8

Próbuję przetestować wersję rozwojową aplikacji na Androida z włączonym Proguard. Stworzyłem dodatkowy plik reguł gry dla zależności testowych, który jest zawarty w pliku reguł wydania.Testowanie wersji wydanej i zaawansowanej aplikacji na Androida - NoSuchMethodError

-keep class android.test.** { *; } 
-dontwarn android.test.** 

# Reuse the release ProGuard mapping 
-applymapping proguard.map 
-dontshrink 
-dontoptimize 

Wszystko kompiluje dobrze, ale kończy się niepowodzeniem w czasie wykonywania.

java.lang.NoSuchMethodError: android.test.AndroidTestRunner.addTestListener 
    at com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner.start(ProGuard:135) 
    at com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner$BridgeTestRunner.start(ProGuard:249) 
    at android.test.InstrumentationTestRunner.onCreate(InstrumentationTestRunner.java:389) 
    at com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner.onCreate(ProGuard:114) 
    at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4702) 
    at android.app.ActivityThread.access$1600(ActivityThread.java:172) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1362) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:136) 
    at android.app.ActivityThread.main(ActivityThread.java:5586) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:515) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084) 
    at dalvik.system.NativeStart.main(Native Method) 

Używam Espresso do testowania, biegacz oprzyrządowanie jest zdefiniowana w build.gradle

defaultConfig { 
    testApplicationId 'package.name.test' 
    testInstrumentationRunner 'com.google.android.apps.common.testing.testrunner.GoogleInstrumentationTestRunner' 
} 

jakaś szansa, aby uruchomić testy dla proguarded kompilacji wersji? Znalazłem topic od maja i wygląda na to, że to niemożliwe. Dla mnie wygląda na to, że jest to po prostu błędna konfiguracja Proguard (brakująca metoda), ale linia -keep class android.test.** { *; } powinna naprawić taki problem. Czy czegoś brakuje?

+0

Spróbuj użyć moją odpowiedź na inne pytanie http://stackoverflow.com/a/15477898/1665964 –

Odpowiedz

0

Próbuję uzyskać pomoc Sir.

zamiast tego

-keep class android.test.** { *; } 
-dontwarn android.test.** 

dodać do niego

-keep class android.test.** { *; } 
-keep class junit.** { *; } 
-dontwarn android.test.** 
-dontwarn junit.** 

faktycznie jest to trudne "przypuszczenie-a-code" nadzieję, że pomoże

+0

Nie, to nie jest problem. W czasie wykonywania kończy się niepowodzeniem z 'NoSuchMethodError' at' android.test.AndroidTestRunner.addTestListener', więc twoje rozwiązanie nie rozwiązuje problemu. – tomrozb