当minifyEnabled为true时构建APK出现错误

6

我需要启用Proguard,因此将minifyEnabled设置为true。但是,在尝试构建发布APK时,我遇到了以下错误:

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

编辑:听起来我需要根据我使用的库更新我的proguard-rules。这里是我的依赖关系:

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;
    }
}

如何找到每个项目在proguard-rules文件中需要添加什么内容?目前只找到了ButterKnife的示例。


这听起来像是你需要配置ProGuard规则以考虑你正在使用的库。请查看类似的问题:https://dev59.com/wF0Z5IYBdhLWcg3w6jse - MattMatt
@MattMatt,这个只需要在我的proguard-rules.pro文件中添加dontwarn语句就可以了吗? - vikzilla
1个回答

13

-dontwarn 对所有东西都使用可能会导致另一个问题,如果必需的依赖项被剥离而没有抛出错误。

你最好通过检查日志输出(或在此处发布以便其他人查看)找到阻止构建的库,然后在 proguard-rules.pro 文件中根据需要配置它们的 -keep-dontwarn

在大多数情况下,人们已经为您正在使用的相同库完成了这项工作,您只需要找到一个示例规则文件,查看其配置以了解如何操作,就像这个 OkHttp 的示例 和团队通常将其放置在 GitHub 上的库项目的设置部分中,就像这个 Retrofit 的示例


谢谢。我似乎已经压制了大部分的日志警告;唯一剩下的是与MoPub SDK相关的,特别是当它试图引用“com.apache”时。希望我能找到需要添加到proguard规则中的内容。 - vikzilla
2
不客气。如果您正在使用最新的开发工具进行构建,可能会抱怨缺少Apache HTTP客户端支持。有关详细信息(和解决方法),请参见此处:https://developer.android.com/about/versions/marshmallow/android-6.0-changes.html#behavior-apache-http-client - MattMatt
1
我认为Retrofit的链接是错误的,但它是ButterKnife:https://github.com/JakeWharton/butterknife/blob/master/butterknife/proguard-rules.txt - Shailendra Madda
2
@ShailendraMadda 很敏锐! 5.5年来你是第一个发现那个打字错误的人。 它应该是Butterknife,尽管Proguard部分已从Butterknife文档中删除,因此不再相关。 最好的方法是在GitHub上检查您正在使用的任何库的当前项目页面,如果Gradle构件中没有包含proguard文件,则进行检查。 现在大多数库都有了。 - MattMatt
1
欢迎您,@MattMatt,感谢提供信息。 - Shailendra Madda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接