在 MainActivity.java 中检测在 Detox 上下文下运行的 Android React Native 应用程序
Posted
技术标签:
【中文标题】在 MainActivity.java 中检测在 Detox 上下文下运行的 Android React Native 应用程序【英文标题】:Detect Android React Native app running under Detox context in MainActivity.java 【发布时间】:2020-05-10 22:00:53 【问题描述】:我希望在测试失败时从 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 的组合!
【问题讨论】:
【参考方案1】:在您的 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,但允许您在前台时禁用,因此允许您截屏。
【讨论】:
此更改确实允许从 Detox 截取屏幕截图,也可以从在真实 Android 设备上运行的实际应用截取屏幕截图。还有其他我可能错过的配置吗? 您需要检查您正在使用哪种风格的应用程序(开发与产品)并相应地启用这些方法。 由于这是一个简单的 Expo 应用程序,我不确定我是否能够使用多种风格(参见发布渠道?)或构建类型。以上是关于在 MainActivity.java 中检测在 Detox 上下文下运行的 Android React Native 应用程序的主要内容,如果未能解决你的问题,请参考以下文章
如何在 MainActivity.java 中发出简单的 HTTP 请求? (安卓工作室)
错误形式(在 com.going.books.MainActivity.onCreate(MainActivity.java:19))
如何将片段活动添加到 MainActivity.java 或 MainActivity.kt