Ошибка: выполнение выполнено для задачи ": 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'
}
Если кто-то может помочь мне отладить эту проблему, это будет здорово.
Ответы
Ответ 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'
}
}