Я занимаюсь тестированием пользовательского интерфейса Espresso с черным ящиком в приложении, в котором у меня есть только файл apk. Чтобы запустить тест Espresso, приложение, подлежащее тестированию, и тест должны быть подписаны с одной и той же подписью, поэтому мне нужно отменить приложение apk. Я попытался уйти в отставку приложение с этими командами:Как отменить или взломать Android-приложение, которое защищено от увольнения
zip -d $APK META-INF/\*
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore $KEYSTORE -storepass $STOREPASS $APK $ALIAS
jarsigner -verify -verbose -certs $APK
zipalign -v 4 $APK $ALIGNED_APK
в отставку приложение было успешно установлено. Но его нельзя было запустить. Вот бревно из LogCat:
11-03 11:12:08.546: I/ActivityManager(1020): START {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.zg.zl/.ui.SplashActivity u=0} from pid 1128
11-03 11:12:08.546: W/WindowManager(1020): Failure taking screenshot for (246x410) to layer 21005
11-03 11:12:08.556: D/dalvikvm(795): WAIT_FOR_CONCURRENT_GC blocked 0ms
11-03 11:12:08.586: D/dalvikvm(795): GC_EXPLICIT freed 37K, 4% free 7917K/8195K, paused 0ms+1ms, total 27ms
11-03 11:12:08.586: D/dalvikvm(795): WAIT_FOR_CONCURRENT_GC blocked 0ms
11-03 11:12:08.596: D/dalvikvm(795): GC_EXPLICIT freed <1K, 4% free 7917K/8195K, paused 0ms+1ms, total 5ms
11-03 11:12:08.596: I/ActivityManager(1020): Start proc com.zg.zl for activity com.zg.zl/.ui.SplashActivity: pid=1587 uid=10044 gids={3003, 1015, 1006, 3002, 1028}
11-03 11:12:08.606: D/dalvikvm(795): WAIT_FOR_CONCURRENT_GC blocked 0ms
11-03 11:12:08.606: D/dalvikvm(795): GC_EXPLICIT freed <1K, 4% free 7917K/8195K, paused 1ms+1ms, total 6ms
11-03 11:12:08.617: E/Trace(1587): error opening trace file: No such file or directory (2)
11-03 11:12:08.646: D/dalvikvm(1587): WAIT_FOR_CONCURRENT_GC blocked 0ms
11-03 11:12:08.716: D/dalvikvm(1587): GC_CONCURRENT freed 155K, 3% free 8200K/8391K, paused 21ms+1ms, total 40ms
11-03 11:12:08.756: D/dalvikvm(1587): GC_CONCURRENT freed 118K, 3% free 8497K/8711K, paused 15ms+0ms, total 21ms
11-03 11:12:08.806: D/dalvikvm(1587): GC_CONCURRENT freed 127K, 3% free 8808K/9031K, paused 12ms+0ms, total 17ms
11-03 11:12:08.816: I/ActivityThread(1587): Pub com.zg.zl.db.preferencesprovider: com.zg.zl.db.PreferencesProvider
11-03 11:12:08.826: D/dalvikvm(1587): Trying to load lib /mnt/asec/com.zg.zl-1/lib/libzl_native_lib.so 0xb55cfc48
11-03 11:12:08.826: D/dalvikvm(1587): Added shared lib /mnt/asec/com.zg.zl-1/lib/libzl_native_lib.so 0xb55cfc48
11-03 11:12:08.826: D/dalvikvm(1587): Trying to load lib /mnt/asec/com.zg.zl-1/lib/libzl_native_lib.so 0xb55cfc48
11-03 11:12:08.826: D/dalvikvm(1587): Shared lib '/mnt/asec/com.zg.zl-1/lib/libzl_native_lib.so' already loaded in same CL 0xb55cfc48
11-03 11:12:08.826: I/AndroidRuntime(1587): VM exiting with result code 0, cleanup skipped.
11-03 11:12:08.846: I/ActivityManager(1020): Process com.zg.zl (pid 1587) has died.
11-03 11:12:08.846: W/ActivityManager(1020): Force removing ActivityRecord{b59377c8 com.zg.zl/.ui.SplashActivity}: app died, no saved state
11-03 11:12:08.886: W/InputMethodManagerService(1020): Window already focused, ignoring focus gain of: [email protected] attribute=null
11-03 11:13:16.597: D/dalvikvm(1116): GC_CONCURRENT freed 384K, 7% free 8482K/9031K, paused 0ms+0ms, total 7ms
(.. Если я удалить META-INF
папку из покорного APK, и добавить META-INF
папку, которая из исходного APK приложение может быть установлено и работает нормально)
Я считаю, что приложение защищено от того, что его подали в отставку с помощью другого сертификата. Как я могу обойти эту проблему?
Получите новую, правильно подписанную версию от разработчиков. В противном случае трудно убедить кого-либо в том, что вы делаете только «тестирование черного ящика». – Sam
Эспрессо не было построено с учетом теста «черного ящика», поэтому подписание не будет вашей единственной проблемой. Взгляните на UiAutomator (http://developer.android.com/tools/help/uiautomator/index.html) – yogurtearl
@yogurtearl Я знал об UiAutomator, но он доступен только от API 16 (Android 4.1). Кроме того, UiAutomator работает медленно и flaky по сравнению с Expresso. Вы правы, что подписание - не единственная проблема. Но я экспериментировал с testapp и testapp_test в репозитории Espresso (https://code.google.com/p/android-test-kit/source/browse/). Предполагая на практике, у меня нет исходного кода testapp, я смог преобразовать class.dex (скомпилированного testapp) в jar и импортировать его в тестовый проект (testapp_test). Наконец, я сдал testapp, и тест прошел нормально. – Hieu