2015-06-01 10 views
8

Odkąd aktualizowany Android Studio do wersji 1.2.1.1 Mam następujący problem:ProGuard nie działa zgodnie z oczekiwaniami po Android Studio aktualizacji

Ilekroć zbudować wersję wydania/zbudować wariant mojej aplikacji, otrzymuję NoClassDefFoundError na Adjust library Zawarłem projekt jako moduł biblioteczny.

stracktrace:

java.lang.NoClassDefFoundError: com.adjust.sdk.AdjustConfig 
      at de.myapp.GlobalApp.prepareAdjust(GlobalApp.java:111) 
      at de.myapp.GlobalApp.onCreate(GlobalApp.java:71) 
      at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:999) 
      at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4151) 
      at android.app.ActivityThread.access$1300(ActivityThread.java:130) 
      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1255) 
      at android.os.Handler.dispatchMessage(Handler.java:99) 
      at android.os.Looper.loop(Looper.java:137) 
      at android.app.ActivityThread.main(ActivityThread.java:4745) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:511) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
      at dalvik.system.NativeStart.main(Native Method) 

odpowiednia część mojego kodu:

AdjustConfig config = new AdjustConfig(this, someString, otherString); 

Kiedy wyłączyć PROGUARD z minifyEnabled false; w moim build.gradle, błąd zniknął.

Moja proguard-rules.pro wygląda następująco:

-keepattributes ** 
-keep class !android.support.v7.internal.view.menu.**,** {*;} 
-dontpreverify 
-dontoptimize 
-dontshrink 
-dontwarn ** 

Te zasady PROGUARD może wyglądać nieco dziwnie, bo robią ale jedna rzecz: zaciemniać klas w pakiecie android.support.v7.internal.view.menu. Ta procedura jest obejściem dla a known issue of the Android Support library on Samsung devices.

Jeszcze bardziej myląco, tylko NoClassDefFoundError występuje tylko na urządzeniach z Androidem < 5.0.

Wszelkie pomysły na temat tego, co może być przyczyną i jak to naprawić?

+1

Wszelkie ołowiu od typu 'com.adjust.sdk.AdjustConfig' jest? Interesujące, że 'minifyEnabled' uruchamia błąd ... – shkschneider

+0

@shkschneider Tak, możesz zajrzeć tutaj: https://github.com/adjust/android_sdk/blob/master/Adjust/adjust/src/main/java/com/ adjust/sdk/AdjustConfig.java – FWeigl

+0

Wypróbuj tę linię zamiast swojej: '' '-kamknames class! android.support.v7.internal.view.menu. **, android.support.v7. ** { *;} '' '' Myślę, że linia, której teraz używasz, mówi programiście, aby zaciemniali KAŻDĄ klasę w projekcie, z wyjątkiem tych, które zaczynają się od android.support itd. To zajmie tylko określony pakiet na koncie – scana

Odpowiedz

0

Dokumentacja mówi:

Jeśli używasz PROGUARD dodaj te linie do pliku PROGUARD:

-keep class com.adjust.sdk.** { *; } 
-keep class com.google.android.gms.common.** { *; } 
-keep class com.google.android.gms.ads.identifier.** { *; } 
+1

Próbowałem już wyraźnie to dodać, nie zrobiłem żadnej różnicy. Co jest logiczne, ponieważ jest już dorozumiane w instrukcji keep z mojego posta (pamiętaj o negującym znaku wykrzyknika). – FWeigl