Obecnie pracujemy nad pakietem testów oprzyrządowania, który działa na naszym serwerze budowania, ale podczas gdy testy przechodzą na maszynie programistycznej przy użyciu normalnego emulatora systemu Android, kompilacje kończą się niepowodzeniem na serwerze kompilacji, ponieważ uruchamiamy tylko emulator bezgłowy z Flaga -no-window
.Jak wysłać kluczowe zdarzenia do bezgłowego emulatora w teście instrumentacji?
Awaria występuje podczas próby wywołania metody InstrumentationTestCase.sendKeys()
, aby programowo otworzyć menu opcji. Błąd jest:
Permission denied: wstrzykiwanie kluczową imprezę z pid 646 uid 10026 do Window {43d55100 wstrzymane = false} własnością uid 1000
Następnie okazało się, że istnieje zgoda INJECT_EVENTS
, ale ustawienie go w manifeście nie przyniosło efektu. W rzeczywistości w dzienniku widzieliśmy to wyjście:
nieprzyznania android.permission.INJECT_EVENTS uprawnienia do spakowania com.qype.radar (ProtectionLevel = 2 flags = 0x6644)
ma znaczyć to uprawnienie jest bezużyteczny?
Staraliśmy się również, aby aplikacja do testowania oprzyrządowania i testowana aplikacja miały ten sam identyfikator użytkownika Linuksa, używając android:sharedUserId
i działały w tym samym procesie (android:process
- nie byliśmy pewni, czy to już miało miejsce), ale wciąż nie ma szczęścia.
Czy to oznacza, że obecnie nie można uruchamiać instrumentów, które zawierają kluczowe zdarzenia na bezgłowym emulatorze, czy coś nam brakuje?
'INJECT_EVENTS' to całkowicie poprawne zezwolenie, ale takie, które może być przechowywane tylko przez oprogramowanie układowe, a nie przez aplikacje SDK. – CommonsWare
bummer. więc jaki jest nasz najlepszy zakład? Czy Google nie pomyślał o uruchomieniu testów na serwerze kompilacji? – Matthias
Właśnie zrestartowałem emulator za pomocą flagi -wipe-data, a następnie kompilacja przeszła na RAZ, następnie emulator się zawiesił, zrestartował ponownie, teraz kompilacja znów się nie udaje ... to wszystko jest tak kruche :-( – Matthias