Error:Execution failed for task ':app:packageRelease'. > Unable to compute hash of /../AndroidStudioProjects/../classes.jar

Error:Execution failed for task ':app:packageRelease'. > Unable to compute hash of /../AndroidStudioProjects/../classes.jar

我正在尝试在 Android 应用程序上构建 'release',但我不断收到以下错误:

Unable to compute hash of /../AndroidStudioProjects/../classes.jar

然后当我查看 'classes.jar' 的目录时,文件不存在。我是否必须使用 gradle 任务自己创建此文件?

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

如果有人能帮我调试这个问题那就太好了。

我发现问题了:

为您的项目打开 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

基本上我是如何解决这个问题的,我尝试 运行 我的应用程序处于 'release' 模式,但出现了一堆类似于这里的人的错误:https://github.com/square/okio/issues/144

我几乎完全按照他说的做了,并修复了它。

希望这可以帮助其他人生成他们的 APK!

我知道这里已经有了答案,但我的情况有点不同,我想分享一下。

对我来说,我的项目的混淆文件 proguard-rules.pro 以某种方式重命名为 proguard-android.txt.

proguard-android.txt 是为 Android 的默认混淆器规则保留的,所以基本上,我覆盖了 Android 的混淆器文件,这造成了破坏,我会得到无法计算哈希消息

一旦我将项目中的文件名从 proguard-android.txt 更改为 proguard-rules.pro,我就可以正常工作了。

对我来说,proguard.cfg 中的以下 2 行对我有帮助:

 -keep class com.google.android.gms.** { *; }
 -dontwarn com.google.android.gms.**

我知道这是一个老问题,但也许这个答案对某些人有用。我将 -dontwarn butterknife.** 添加到 proguard,然后 gradle 正确构建。

这个问题的所有当前答案都只是给出了适用于他们的 Proguard 规则,每个修复都会不同。首先,通过检查 classes-proguard 目录是否位于错误消息中的某处来确认这是 Proguard 问题,如下所示:Unable to compute hash of /Users/Documents/projectX/app/build/intermediates/classes-proguard/release/classes.jar

这意味着它是由较早的 Proguard 错误引起的,因此您需要在消息 window 或 Gradle 控制台 window 中向上滚动并检查您收到的警告或错误.举个例子,在我当前的项目中,Square 的 Picasso 库导致了错误: Warning: com.squareup.picasso.OkHttpDownloader: can't find referenced class com.squareup.okhttp.OkHttpClient。我刚刚添加 -dontwarn com.squareup.okhttp.** 以忽略警告,应用程序仍然正常运行。

很多 Proguard 错误将是关于某些 class 的警告,因此只需为任何 class 在您的项目中导致它的原因添加 -dontwarn 即可。

我知道 Whosebug 的方法只是 Google 错误消息,复制并粘贴最上面的答案并希望最好,但在这里你必须稍微理解它并为你找出 proguard 规则!

只需创建一个文件 proguard-rules.pro 并添加“-dontwarn package names”,在消息中给出警告。

从我的 gradle 文件中禁用 minifyEnabled 选项纠正了我构建中的错误。

build.gradle

buildTypes {
       release {
              // DISABLE OPTION
              //minifyEnabled true
              proguardFiles 'proguard.cfg'
       }
}

对我来说,它显示了同样的错误 我解决了 确保你在文件

中有正确的 Keystore 密码
\mobile\android\gradle.properties 
MYAPP_UPLOAD_STORE_FILE=my-upload-key.keystore
MYAPP_UPLOAD_KEY_ALIAS=my-key-alias
MYAPP_UPLOAD_STORE_PASSWORD=yourpassword
MYAPP_UPLOAD_KEY_PASSWORD=yourpassword