8

Ich versuche, Release Build von Android App mit Proguard aktiviert zu testen. Ich habe eine zusätzliche Proguard-Regeldatei für Testabhängigkeiten erstellt, die in der Release-Regeldatei enthalten ist.Testen der Release- und Proguarded-Version der Android-App - NoSuchMethodError

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

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

Alles kompiliert gut, aber es schlägt zur Laufzeit fehl.

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) 

Ich bin mit Espresso für die Prüfung, wird die Instrumentierung Läufer in build.gradle definiert

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

Jede Chance Tests für proguarded Release-Build zu laufen? Ich habe topic zurück von Mai gefunden und es sieht aus wie es unmöglich ist. Für mich sieht es so aus, als wäre es nur eine falsche Proguard-Konfiguration (fehlende Methode), aber die Zeile -keep class android.test.** { *; } sollte dieses Problem beheben. Fehle ich etwas?

+0

Versuchen Sie, meine Antwort in einer anderen Frage verwenden http://StackOverflow.com/a/15477898/1665964 –

Antwort

0

Ich versuche, Hilfe Sir.

anstelle der

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

fügen Sie diese es

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

tatsächlich ist dies ein harter "guess-a-Code" hoffen, es hilft

+0

Nein, das ist kein Problem. Es schlägt zur Laufzeit mit 'NoSuchMethodError' bei' android.test.AndroidTestRunner.addTestListener' fehl, sodass Ihre Lösung das Problem nicht löst. – tomrozb