java - 检测在 MainActivity.java 中 Detox 上下文下运行的 Android React Native 应用程序

标签 java android react-native gradle detox

我希望在测试失败时从 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 配置提供额外的 PD 参数并使用 System.getProperty()MainActivity.java 中。
  • build 配置中传递环境变量,并在 MainActivity.java 中使用 System.getenv() 进行使用。
  • 生成一个新的 DetoxActivity.java,而不设置 FLAG_SECURE 并相应地连接 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,但会允许您在前台时被禁用,从而允许您截取屏幕截图。

关于java - 检测在 MainActivity.java 中 Detox 上下文下运行的 Android React Native 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59898754/

相关文章:

react-native - react 导航 5.0 标题按钮

swift - 将 CoreML 与 React Native 结合使用

java - 如何在正则表达式中使用\n?

javax.json.stream.JsonGenerator 在接近文件末尾时突然结束输出

java - 如何在 Java 中实现一个好的游戏菜单?

android - HH :MM:SS format in Android 中的倒数计时器

java - 从 JPanel 实例化 JDialog

java - 最流行的 Android 主机操作系统是什么?

android - 使用 Dialog Fragment 膨胀 View

reactjs - redux-saga中间件如何处理api错误