当minifyEnabled为true时,建立APK时出错

vik*_*lla 5 android apk android-proguard

我需要启用proguard,所以我将minifyEnabled设置为true.但是,我在尝试构建发布APK时遇到以下错误:

错误:任务':app:packageRelease'的执行失败.无法计算.../app/build/intermediates/classes-proguard/release/classes.jar的哈希值

编辑:听起来我需要根据我正在使用的库更新我的proguard规则.这是我的依赖项:

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.0'
    compile 'com.jakewharton:butterknife:7.0.1'
    compile 'com.parse.bolts:bolts-android:1.+'
    compile 'com.parse:parse-android:1.+'
    compile('com.crashlytics.sdk.android:crashlytics:2.5.2@aar') {
    transitive = true;
    }
    compile('com.mopub.sdk.android:mopub:4.0.0@aar') {
        transitive = true;
    }
}
Run Code Online (Sandbox Code Playgroud)

什么是找出每个中的proguard规则的最佳方法?到目前为止,我只找到了ButterKnife的

Mat*_*att 12

-dontwarn on everything可能会导致另一个问题,如果必需的依赖项被删除而不会抛出错误.

最好的办法是找到那些阻止通过检查你的日志输出(或者在这里张贴所以有人可以看看),然后配置它们发生的构建库-keep-dontwarn根据需要,在proguard的规则.pro文件.

在大多数情况下,人们之前已经为你正在使用的相同库做了这个,你只需要找到一个示例规则文件并查看他们的配置以了解它是如何完成的,就像OkHttp的这个,以及团队经常在GitHub上的库项目的设置部分就像这个用于Retrofit.

  • 别客气.如果您使用最新的开发工具构建,可能会抱怨缺乏Apache HTTP客户端支持.详细信息(和解决方法)在这里:https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-apache-http-client (2认同)
  • @ShailendraMadda 好眼力!你是 5.5 年来第一个注意到这个拼写错误的人。它应该说 Butterknife,尽管 Proguard 部分已从 Butterknife 文档中删除,因此它不再相关。最好的办法是检查 GitHub 上的当前项目页面,了解您正在使用的任何库(如果 proguard 文件尚未包含在 Gradle 工件中)。他们中的大多数都是这些天。 (2认同)