Определить Android React Native приложение, работающее в контексте Detox в MainActivity. java - PullRequest
0 голосов
/ 24 января 2020

Я буду 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!

1 Ответ

2 голосов
/ 24 января 2020

В вашей 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 только тогда, когда приложение находится в фоновом режиме, но позволит вам быть отключенным, когда в передний план, поэтому позволяет делать снимки экрана.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...