見出し画像

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コマンドを実行したところ、以下のエラーが発生しました。

Enter
1. cd [project]
2. Run flutter build appbundle

https://docs.flutter.dev/deployment/android#build-an-apk
$  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でアプリをアップロードする際のアプリ署名に使用されます。アプリ署名を設定することで、鍵のセキュリティ強化など色々とメリットがあるようです。

Java キーストア(.jks または .keystore)は、証明書と秘密鍵のリポジトリとして機能するバイナリ ファイルです。

https://developer.android.com/studio/publish/app-signing?hl=ja#certificates-keystores

Play アプリ署名を使用すると、アプリ署名鍵の管理と保護、APK 配信時の署名を Google に委託することができます。App Bundle では、APK のビルドおよび署名が Google Play ストアで行われるため、App Bundle をアップロードする前に Play アプリ署名を設定する必要があります。

https://developer.android.com/studio/publish/app-signing?hl=ja#app-signing-google-play

自分はFlutterドキュメントのCreate an upload keystoreに記載がある通り、以下のコマンドでこのキーストアを作っており、それがだめだったみたいです。

keytool -genkey -v -keystore ~/upload-keystore.jks -keyalg RSA -keysize
2048 -validity 10000 -alias upload

https://docs.flutter.dev/deployment/android#create-an-upload-keystore

解決方法

結論ですが、エラーにあるAlgorithm HmacPBESHA256 not availableで検索し、以下記事にある通りキーストアを作り直すことで解決しました。(ありがとうございます!)

keytool -genkey -v -keystore ~/release.jks -keyalg RSA -keysize 2048 -validity 10000 -alias release -storetype JKS

https://note.com/iga34engineer/n/ndbe247c8e23a

このコマンドでupload-keystore.jksではなくrelease.jksファイルを作成する必要があったみたいです。

作成したrelease.jksファイルを、Macの場合はFinderから/android/appの下に移動させます。
release.jksファイルはFinderでは非表示になっていたので、Finderを開いてcommand + shift + . を押すと非表示ファイルも見れるようになります。
自分はrelease.jksファイルをドラッグアンドドロップで/android/appの下に動かしました。

文字が暗くなっているのが非表示のファイル/フォルダ
release.jksを移動

作成した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作成に成功しました!

この記事が気に入ったらサポートをしてみませんか?