Подтвердить что ты не робот

Ошибка: выполнение выполнено для задачи ": app: packageRelease". > Невозможно вычислить хэш из/../AndroidStudioProjects/../classes.jar

Я пытаюсь создать сборку "release" в приложении для Android, и я продолжаю получать эту ошибку:

Невозможно вычислить хэш из /../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'
}

Если кто-то может помочь мне отладить эту проблему, это будет здорово.

4b9b3361

Ответ 1

Я понял проблему:

Откройте 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!

Ответ 2

Все текущие ответы на этот вопрос просто дают правила Proguard, которые сработали для них, каждое исправление будет другим. Прежде всего, подтвердите это проблемой 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 для вас!

Ответ 3

Для меня следующие 2 строки внутри proguard.cfg помогли:

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

Ответ 4

Я знаю, что здесь уже есть ответ, но моя ситуация была немного иной, и я хотел поделиться ею.

Для меня мой файл proguard проекта, а именно proguard-rules.pro, был каким-то образом переименован в proguard-android.txt.

proguard-android.txt зарезервирован для правил по умолчанию для Android по умолчанию, поэтому, по сути, я переопределял файл Android proguard, который вызывал хаос, и я получал Unable для вычисления хеш-сообщения.

Как только я изменил имя файла в своем проекте с proguard-android.txt до proguard-rules.pro, мне удалось заставить все работать.

Ответ 5

Я знаю, что это старый вопрос, но, возможно, этот ответ работает на кого-то. Я добавил -dontwarn butterknife.** в proguard, затем gradle строит правильно.

Ответ 6

Отключение параметра minifyEnabled из моего файла gradle исправил ошибку в моей сборке.

build.gradle

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