Proguard配置使APK崩溃

时间:2016-03-11 09:19:36

标签: android android-studio proguard

我遇到proguard的问题。

添加proguard后,我收到了警告:

  

警告:com.actionbarsherlock.internal.ActionBarSherlockCompat:找不到引用的类com.actionbarsherlock.BuildConfig   警告:com.slidingmenu.lib.CustomViewBehind:无法找到引用的类com.slidingmenu.lib.R $ id   警告:com.slidingmenu.lib.CustomViewBehind:无法找到引用的类com.slidingmenu.lib.R $ id   警告:com.slidingmenu.lib.CustomViewBehind:找不到引用的类com.slidingmenu.lib.R   警告:okio.DeflaterSink:无法找到引用的类org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement   警告:okio.Okio:找不到引用的类java.nio.file.Files   警告:okio.Okio:找不到引用的类java.nio.file.Files   警告:okio.Okio:找不到引用的类java.nio.file.Files   警告:okio.Okio:找不到引用的类java.nio.file.Path   警告:okio.Okio:找不到引用的类java.nio.file.OpenOption   警告:okio.Okio:找不到引用的类java.nio.file.Path   警告:okio.Okio:找不到引用的类java.nio.file.OpenOption   警告:okio.Okio:找不到引用的类org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement   警告:okio.Okio:找不到引用的类java.nio.file.Path   警告:okio.Okio:找不到引用的类java.nio.file.OpenOption   警告:okio.Okio:找不到引用的类java.nio.file.Path   警告:okio.Okio:找不到引用的类java.nio.file.OpenOption   警告:okio.Okio:找不到引用的类org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement   警告:org.solovyev.android.checkout.ActivityCheckout:无法找到引用的类javax.annotation.Nonnull   警告:org.solovyev.android.checkout.ActivityCheckout:无法找到引用的类javax.annotation.Nonnull   警告:org.solovyev.android.checkout.ActivityCheckout:无法找到引用的类javax.annotation.Nonnull   警告:org.solovyev.android.checkout.ActivityCheckout:无法找到引用的类javax.annotation.Nonnull   警告:org.solovyev.android.checkout.ActivityCheckout:无法找到引用的类javax.annotation.Nonnull   警告:org.solovyev.android.checkout.ActivityCheckout:无法找到引用的类javax.annotation.Nonnull   警告:org.solovyev.android.checkout.ActivityCheckout:无法找到引用的类javax.annotation.Nonnull   警告:org.solovyev.android.checkout.ActivityCheckout:无法找到引用的类javax.annotation.Nonnull   警告:org.solovyev.android.checkout.ActivityCheckout:无法找到引用的类javax.annotation.Nonnull   警告:org.solovyev.android.checkout.ActivityCheckout:无法找到引用的类javax.annotation.Nonnull   警告:org.solovyev.android.checkout.ActivityCheckout:无法找到引用的类javax.annotation.Nonnull   警告:org.solovyev.android.checkout.ActivityCheckout:无法找到引用的类javax.annotation.Nonnull   警告:org.solovyev.android.checkout.ActivityCheckout:无法找到引用的类javax.annotation.Nonnull   警告:org.solovyev.android.checkout.ActivityCheckout:无法找到引用的类javax.annotation.Nonnull   警告:org.solovyev.android.checkout.ActivityCheckout:无法找到引用的类javax.annotation.Nonnull   警告:org.solovyev.android.checkout.ActivityCheckout $ 1:无法找到引用的类javax.annotation.Nonnull   警告:org.solovyev.android.checkout.BaseInventory:无法找到引用的类javax.annotation.Nonnull   警告:org.solovyev.android.checkout.BaseInventory:无法找到引用的类javax.annotation.Nonnull   警告:org.solovyev.android.checkout.BaseInventory:无法找到引用的类javax.annotation.Nonnull

等等,其中661个。在寻找回应之后,我已经碰到了它,这是怎么回事:

-dontwarn com.actionbarsherlock.**
-dontwarn org.solovyev.android.**
-dontwarn okio.**
-dontwarn com.slidingmenu.**

我已将此添加到我的proguard-android.txt文件中,并修复了一个问题(此方法的来源:Gradle Build Failure

但是现在,.apk文件的大小从10mb减少到5mb,并且,正如你猜测的那样,它不起作用,只是崩溃。

问题:我应该对两者做什么:删除此警告以便.apk将构建,并且将构建的.apk将起作用?

编辑: 我发布了版本的错误跟踪,它与ormlite库有一些关系,并显示以下消息:

  

E / AndroidRuntime(16807):java.lang.NoSuchFieldError   E / AndroidRuntime(16807):at libcore.reflect.AnnotationAccess.decodeValue(AnnotationAccess.java:688)   E / AndroidRuntime(16807):at libcore.reflect.AnnotationAccess.toAnnotationInstance(AnnotationAccess.java:663)   E / AndroidRuntime(16807):at libcore.reflect.AnnotationAccess.toAnnotationInstance(AnnotationAccess.java:641)   E / AndroidRuntime(16807):at libcore.reflect.AnnotationAccess.getDeclaredAnnotation(AnnotationAccess.java:170)   E / AndroidRuntime(16807):at java.lang.reflect.Field.getAnnotation(Field.java:242)   E / AndroidRuntime(16807):at com.tojc.ormlite.android.annotation.OrmLiteAnnotationAccessor.getAnnotationColumnName(Unknown Source)   E / AndroidRuntime(16807):at com.tojc.ormlite.android.framework.ColumnInfo。(Unknown Source)   E / AndroidRuntime(16807):at com.tojc.ormlite.android.framework.TableInfo。(Unknown Source)   E / AndroidRuntime(16807):at com.tojc.ormlite.android.framework.MatcherController.addTableClass(Unknown Source)   E / AndroidRuntime(16807):at com.tojc.ormlite.android.framework.MatcherController.add(Unknown Source)   E / AndroidRuntime(16807):at com.test.kovla.provider.KovlaContentProvider.a(Unknown Source)   E / AndroidRuntime(16807):at com.test.kovla.provider.KovlaContentProvider.onCreate(Unknown Source)   E / AndroidRuntime(16807):在android.content.ContentProvider.attachInfo(ContentProvider.java:1737)   E / AndroidRuntime(16807):在android.content.ContentProvider.attachInfo(ContentProvider.java:1712)   E / AndroidRuntime(16807):在android.app.ActivityThread.installProvider(ActivityThread.java:5437)   E / AndroidRuntime(16807):在android.app.ActivityThread.installContentProviders(ActivityThread.java:5032)   E / AndroidRuntime(16807):在android.app.ActivityThread.handleBindApplication(ActivityThread.java:4972)   E / AndroidRuntime(16807):在android.app.ActivityThread.access $ 1600(ActivityThread.java:177)   E / AndroidRuntime(16807):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1491)   E / AndroidRuntime(16807):在android.os.Handler.dispatchMessage(Handler.java:102)   E / AndroidRuntime(16807):在android.os.Looper.loop(Looper.java:135)   E / AndroidRuntime(16807):在android.app.ActivityThread.main(ActivityThread.java:5910)   E / AndroidRuntime(16807):at java.lang.reflect.Method.invoke(Native Method)   E / AndroidRuntime(16807):at java.lang.reflect.Method.invoke(Method.java:372)   E / AndroidRuntime(16807):at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1405)   E / AndroidRuntime(16807):at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)   E / AndroidRuntime(16807):引起:java.lang.NoSuchFieldException:INTEGER   E / AndroidRuntime(16807):at java.lang.Class.getDeclaredField(Class.java:939)   E / AndroidRuntime(16807):at libcore.reflect.AnnotationAccess.decodeValue(AnnotationAccess.java:685)

事实上,我已将-keep class com.tojc.** {*;}添加到我的proguard-android.txt并且它没有帮助,但只是指定了包裹权限,它不是

  

com.tojc.ormlite.android.annotation.OrmLiteAnnotationAccessor.getAnnotationColumnName(未知   源)

修改:如果这是评论中提出的列表:

repositories {
maven { url 'https://maven.fabric.io/public' }
jcenter()
}

1 个答案:

答案 0 :(得分:0)

似乎你正在使用一堆库。请查看此repository。并使用progaurd配置。

修改

根据您的编辑,您可能遇到了ormlite库的问题。

你可以尝试这套progaurd规则:

-keep interface com.j256.**
-keepclassmembers interface com.j256.** { *; }
-keep enum com.j256.**
-keepclassmembers enum com.j256.** { *; }
-keep class com.j256.**
-keepclassmembers class com.j256.** { *; }

我会坚持一次重建项目。