繁体   English   中英

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

[英]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配置提供额外的PD参数,并使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM