flutter build appbundleのAlgorithm HmacPBESHA256 not availableエラー解決
Flutterで開発したAndroidアプリをGoogle Playにリリースするため、Flutterのドキュメント(Build an app bundle)通りにAndroid App Bundle(AAB)を作成しました。その時のエラーについてご紹介します。
エラー
cd [project]で自分のFlutterプロジェクトに移動し、ターミナルでflutter build appbundleコマンドを実行したところ、以下のエラーが発生しました。
$ flutter build appbundle
💪 Building with sound null safety 💪
// ~ 省略 ~
> Failed to read key upload from store "flutterProject/app_name/android/upload-keystore.jks": Integrity check failed: java.security.NoSuchAlgorithmException: Algorithm HmacPBESHA256 not available
エラー文を読むと、Java キーストア(.jksファイル)が読み込めないと書かれています。
ちなみにキーストアの定義は以下で、Google Playでアプリをアップロードする際のアプリ署名に使用されます。アプリ署名を設定することで、鍵のセキュリティ強化など色々とメリットがあるようです。
自分はFlutterドキュメントのCreate an upload keystoreに記載がある通り、以下のコマンドでこのキーストアを作っており、それがだめだったみたいです。
解決方法
結論ですが、エラーにあるAlgorithm HmacPBESHA256 not availableで検索し、以下記事にある通りキーストアを作り直すことで解決しました。(ありがとうございます!)
このコマンドでupload-keystore.jksではなくrelease.jksファイルを作成する必要があったみたいです。
作成したrelease.jksファイルを、Macの場合はFinderから/android/appの下に移動させます。
release.jksファイルはFinderでは非表示になっていたので、Finderを開いてcommand + shift + . を押すと非表示ファイルも見れるようになります。
自分はrelease.jksファイルをドラッグアンドドロップで/android/appの下に動かしました。
作成したjksを使うためには、/android/app/build.gradleを修正する必要があります。signingConfigsを修正。
android {
compileSdkVersion 33
~~省略~~
signingConfigs {
release {
keyAlias keystoreProperties['keyAlias']
keyPassword keystoreProperties['keyPassword']
storeFile keystoreProperties['storeFile'] ? file(keystoreProperties['storeFile']) : null
storePassword keystoreProperties['storePassword']
}
}
release{}の['keyAlias']など[]内の内容については、直接書くのではなく以下のように/android/key.propertiesを作成して設定しました。
storePassword=<password from previous step>
keyPassword=<password from previous step>
keyAlias=release
storeFile=<location of the key store file, such as /Users/<user name>/release.jks
passwordは、release.jks作成時にターミナルで色々質問されたときに書いたもので、keyAliasはrelease, storeFileはrelease.jksのパスを指定します。
(key.propertiesやgradleの設定についてはReference the keystore from the appを確認↓)
/android/key.propertiesは、githubなどに公開しないようにgit ignoreに設定しておいたほうが良いみたいです。なので、.gitignoreファイルにパスを追加しておきました。
/android/key.properties
これでflutter build appbundleすると、appbundle作成に成功しました!
この記事が気に入ったらサポートをしてみませんか?