Androidアプリで 'リリース'ビルドを実行しようとしていますが、このエラーが発生し続けます:
/../AndroidStudioProjects/../classes.jarのハッシュを計算できません
そして、「classes.jar」のためにそのディレクトリを調べると、ファイルはそこにありません。 gradleタスクでこのファイルを自分で作成する必要がありますか?
ここでプロガードで何かが進行中ですが、「ハッシュを計算できません...」以外の有用な情報はあまり提供していません。
これが私の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
基本的に私がそれを解決したのはこれでした。「リリース」モードでアプリを実行しようとすると、この男に似たエラーがたくさんありました: https://github.com/square/okio/issues/144
私は彼が言ったことをほぼ追って修正しました。
これが他の人のAPKの生成に役立つことを願っています!
この質問に対する現在のすべての回答は、それらに有効なProguardルールを提供しているだけです。すべての修正は異なります。まず、classs-proguardディレクトリがエラーメッセージのどこかにあることを確認して、Proguardの問題であることを確認します。次のようなものです。Unable to compute hash of /Users/Documents/projectX/app/build/intermediates/classes-proguard/release/classes.jar
これは、以前のProguardエラーが原因であるため、メッセージウィンドウまたはGradle Consoleウィンドウを上にスクロールして、表示される警告またはエラーを確認する必要があります。ちょうど例として、私の現在のプロジェクトでは、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.cfg内の次の2行が役に立ちました:
-keep class com.google.Android.gms.** { *; }
-dontwarn com.google.Android.gms.**
ここにはすでに答えがありますが、私の状況は少し違っていたので、共有したいと思いました。
私にとって、私のプロジェクトのプロガードファイル、つまりproguard-rules.pro
は、何らかの形でproguard-Android.txt
に名前が変更されました。
proguard-Android.txt
はAndroidのデフォルトのプロガードルール用に予約されているため、本質的にAndroidのプロガードファイルをオーバーライドしていたため、大混乱を引き起こし、ハッシュメッセージを計算できませんを取得しました。
プロジェクトのファイル名をproguard-Android.txt
からproguard-rules.pro
に変更すると、物事を機能させることができました。
これは古い質問ですが、この答えは誰かに役立つかもしれません。追加した -dontwarn butterknife.**
gradleビルドを適切に保護するために。
GradleファイルのminifyEnabledオプションを無効にすると、ビルドのエラーが修正されました。
build.gradle
buildTypes {
release {
// DISABLE OPTION
//minifyEnabled true
proguardFiles 'proguard.cfg'
}
}