错误:执行任务':app:packageRelease'失败。 >无法计算/../AndroidStudioProjects/../classes.jar的散列
我正在尝试在Android应用上进行“发布”构build,并且一直在收到以下错误:
无法计算/../AndroidStudioProjects/../classes.jar的哈希值
然后当我查看该目录中的“classes.jar”文件不存在。 我需要自己创build这个文件吗?
这里有一些关于proguard的内容,但除了“无法计算哈希…”之外,没有提供太多有用的信息。
这是我的gradle.build文件:
apply plugin: 'com.android.application' apply plugin: 'com.google.gms.google-services' android { compileSdkVersion 22 buildToolsVersion "22.0.1" defaultConfig { applicationId "com.example" minSdkVersion 11 targetSdkVersion 22 versionCode 1 versionName "1.0" } buildTypes { debug { buildConfigField "String", "SERVER_URL", '"http://10.0.2.2:3000"' } release { buildConfigField "String", "SERVER_URL", '"https://example.com"' minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debugRelease { buildConfigField "String", "SERVER_URL", '"https://example.com"' debuggable true jniDebuggable false renderscriptDebuggable false minifyEnabled false zipAlignEnabled true } } productFlavors { } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:appcompat-v7:22.1.1' compile 'com.android.support:recyclerview-v7:22.1.1' compile 'com.android.support:cardview-v7:22.1.1' compile 'com.google.android.gms:play-services-gcm:7.5.0' }
如果有人可以帮我debugging这个问题,那就太好了。
目前对这个问题的所有答案只是给予他们的Proguard规则,每一个解决scheme将是不同的。 首先,通过检查classes-proguard目录是否在错误信息中的某处,确认它是一个Proguard问题,如下所示: Unable to compute hash of /Users/Documents/projectX/app/build/intermediates/classes-proguard/release/classes.jar
这意味着它是由较早的Proguard错误引起的,因此您需要在“消息”窗口或“Gradle控制台”窗口中向上滚动,并检查您所得到的警告或错误。 举个例子,在我目前的项目中,Square的Picasso库导致错误: Warning: com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.OkHttpClient
。 我刚刚添加了-dontwarn com.squareup.okhttp.**
忽略警告,并且应用程序仍然正常工作。
很多Proguard错误将会对某些类进行警告,所以只需在项目中经常使用的任何类中添加-dontwarn即可。
我知道StackOverflow的方式只是Google的错误信息,复制和粘贴顶部的答案,并希望最好的,但在这里你已经了解了一下,并找出你的proguard规则!
对于我来说proguard.cfg里面的以下两行帮助:
-keep class com.google.android.gms.** { *; } -dontwarn com.google.android.gms.**
我想出了问题:
打开你的项目proguard-rules.pro
并添加到底部:
-dontwarn java.nio.file.Files -dontwarn java.nio.file.Path -dontwarn java.nio.file.OpenOption -dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
基本上我是如何解决这个问题的,我试图在'释放'模式下运行我的应用程序,并得到了一堆类似于这个人的错误: https : //github.com/square/okio/issues/144
我几乎遵循他所说的并修正了它。
希望这可以帮助其他人生成他们的APK!
我知道这里已经有了答案,但是我的情况有点不同,我想分享一下。
对我来说,我的项目的proguard文件,即proguard-rules.pro
,不知何故更名为proguard-android.txt
。
proguard-android.txt
保留给Android默认的proguard规则,所以基本上,我重写了Android的proguard文件,这是造成浩劫,我会得到无法计算哈希消息 。
一旦我将我的项目中的文件名从proguard-android.txt
更改为proguard-rules.pro
我就能够正常工作。
从我的gradle文件禁用minifyEnabled选项更正了我的版本中的错误。
的build.gradle
buildTypes { release { // DISABLE OPTION //minifyEnabled true proguardFiles 'proguard.cfg' } }
我知道这是一个老问题,但也许这个答案适用于某人。 我加了-dontwarn butterknife.**
,然后gradle正确的build立起来。