【问题标题】:Proguard configuration makes APK brokenProguard 配置导致 APK 损坏
【发布时间】:2016-03-11 09:19:36
【问题描述】:

我遇到了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.solovev.android.checkout.ActivityCheckout$1:找不到引用的类 javax.annotation.Nonnull 警告:org.solovyev.android.checkout.BaseInventory:找不到引用的类 javax.annotation.Nonnull 警告:org.solovyev.android.checkout.BaseInventory:找不到引用的类 javax.annotation.Nonnull 警告:org.solovev.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):在 libcore.reflect.AnnotationAccess.decodeValue(AnnotationAccess.java:688) E/AndroidRuntime(16807):在 libcore.reflect.AnnotationAccess.toAnnotationInstance(AnnotationAccess.java:663) E/AndroidRuntime(16807):在 libcore.reflect.AnnotationAccess.toAnnotationInstance(AnnotationAccess.java:641) E/AndroidRuntime(16807):在 libcore.reflect.AnnotationAccess.getDeclaredAnnotation(AnnotationAccess.java:170) E/AndroidRuntime(16807):在 java.lang.reflect.Field.getAnnotation(Field.java:242) E/AndroidRuntime(16807):在 com.tojc.ormlite.android.annotation.OrmLiteAnnotationAccessor.getAnnotationColumnName(未知来源) E/AndroidRuntime(16807):在 com.tojc.ormlite.android.framework.ColumnInfo.(Unknown Source) E/AndroidRuntime(16807): 在 com.tojc.ormlite.android.framework.TableInfo.(Unknown Source) E/AndroidRuntime(16807):在 com.tojc.ormlite.android.framework.MatcherController.addTableClass(未知来源) E/AndroidRuntime(16807):在 com.tojc.ormlite.android.framework.MatcherController.add(未知来源) E/AndroidRuntime(16807):在 com.test.kovla.provider.KovlaContentProvider.a(未知来源) E/AndroidRuntime(16807):在 com.test.kovla.provider.KovlaContentProvider.onCreate(未知来源) 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): 在 java.lang.reflect.Method.invoke(Native Method) E/AndroidRuntime(16807):在 java.lang.reflect.Method.invoke(Method.java:372) E/AndroidRuntime(16807):在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405) E/AndroidRuntime(16807): 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200) E/AndroidRuntime(16807): 引起: java.lang.NoSuchFieldException: INTEGER E/AndroidRuntime(16807):在 java.lang.Class.getDeclaredField(Class.java:939) E/AndroidRuntime(16807): 在 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()
}

【问题讨论】:

  • 您可以添加您在 gradle 文件中添加的存储库的列表吗?
  • @Derp,如果我理解正确你的意思,我添加了它

标签: android android-studio proguard


【解决方案1】:

看来您正在使用一堆库。请查看此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.** { *; }

而且我会坚持重建一次项目。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多