[英]Getting error on MainActivity.java when running react-native run-android
[英]Detect Android React Native app running under Detox context in MainActivity.java
我希望在测试失败时从 Detox e2e 运行中截取我的 React Native 应用程序的屏幕截图。 这在 iOS 上运行良好,但在 Android 上,由于在我的MainActivity.java
中使用了FLAG_SECURE
,因此生成了屏幕截图,但字节数为零。 在其他情况下,我从ScreencapPlugin
收到Command failed
,并且没有生成任何文件。 本质上,我需要一种方法来检测应用程序是否正在 Detox 测试运行的上下文中执行,如果是这样,请不要设置FLAG_SECURE
。
我的基本排毒配置是:
"android.emu.debug": {
"binaryPath": "android/app/build/outputs/apk/debug/app-debug.apk",
"build": "cd android && ./gradlew app:assembleDebug app:assembleAndroidTest -DtestBuildType=debug && cd ..",
"type": "android.emulator",
"device": {
"avdName": "Pixel_3a_API_27"
}
}
这是使用以下命令执行的:
detox build --configuration android.emu.debug && detox test --configuration android.emu.debug --take-screenshots failing
MainActivity.java
的受影响部分如下所示:
public class MainActivity extends ReactActivity {
// ...
@Override
protected void onCreate(Bundle savedInstanceState) {
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE);
// ...
super.onCreate(savedInstanceState);
}
}
到目前为止,我已经尝试过,但无济于事:
build
配置提供额外的P
或D
参数,并使用MainActivity.java
中的System.getProperty()
进行消费。build
配置中传递环境变量并在MainActivity.java
中使用System.getenv()
进行消费。FLAG_SECURE
的情况下生成新的DetoxActivity.java
并相应地连接DetoxTest.java
。app.gradle
中的System.getProperty()
并分配给defaultConfig
中的变量。任何人都可以建议让这个工作的最佳方法吗? 我想我在这里很挣扎,因为我还没有完全掌握 Detox/Gradle/Java 的组合!
在您的 MainActivity.java 中
添加:
protected void onPause() {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
super.onPause();
}
protected void onResume() {
super.onResume();
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE);
}
这将仅在应用程序处于后台时启用 FLAG_SECURE,但将允许您在前台时被禁用,因此允许您截取屏幕截图。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.