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ć?
Wszelkie ołowiu od typu 'com.adjust.sdk.AdjustConfig' jest? Interesujące, że 'minifyEnabled' uruchamia błąd ... – shkschneider
@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
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