Я буду sh, чтобы делать скриншоты моего приложения React Native из прогона Detox e2e, когда тест не пройден. Это прекрасно работает на iOS, но на Android из-за использования FLAG_SECURE
в моем MainActivity.java
, скриншоты генерируются, но с нулевыми байтами. В других случаях я получаю Command failed
из ScreencapPlugin
, и файлы не создаются. По сути, мне нужен способ обнаружить, что приложение выполняется из контекста теста Detox, и если это так, не устанавливайте FLAG_SECURE
.
Моя базовая конфигурация Detox:
"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);
}
}
Пока что я пытался, но безрезультатно:
- Предоставление дополнительного аргумента
P
или D
для конфигурации build
и использование System.getProperty()
в MainActivity.java
. - Передача переменной среды в
build
конфигурирование и использование с использованием System.getenv()
in MainActivity.java
. - Генерация нового
DetoxActivity.java
без установки FLAG_SECURE
и подключение DetoxTest.java
соответственно. - Считывание
System.getProperty()
in app.gradle
и присвоение переменной в defaultConfig
.
Кто-нибудь может предложить лучший способ заставить это работать? Я думаю, что я борюсь здесь, потому что я еще не совсем справился с комбинацией Detox / Gradle / Java!