![](https://halzoblog.com/wp-content/themes/cocoon-master/images/man.png)
Android Studioでaabファイル作ろうとしたけど、Buildメニューに「Generate Signed Bundle」の項目がない。。
「Gradle project sync failed」というエラーも出ている。どうしたらいいの?
という方向けの記事です。
自分がこの状況に陥り、解決にとても苦労したので、自分の体験をもとに、対処法を共有したいと思います。
結論は、以下になります。
- 「Android Gradle Plugin Version」と「Gradle Version」の対応関係が不整合の場合は、整合するようにアップデートする。
- 「Show Log in Finder」のログを見て、ERRORの項目をチェックし、必要な対処をする。
- 「ERROR…Module: 'xxxx' platform 'android-番号' not found.」となっている場合は、該当の番号のAndroid SDKをインストールする。
自分の場合は、上記2.が解決方法でした。
2.は、あくまで「ログを見るのが重要」という趣旨でして、実際にはERRORの内容次第のため、必ずしもAndroid SDKのインストールで解決するとは限らない点をご了承くださいm(_ _)m。
40代からプログラミング(Flutter)を始めて、GooglePlayとAppStoreにアプリを公開しているhalzo appdevです。
作成したアプリはこちら↓ 全てFlutterで開発したアプリです。
前提とする環境
以降の説明は、以下の環境で試した結果になります。
- PC: MacBook Pro
- OS: Big Sur
- Flutter: Channel stable, 2.2.3
- Android Studio: version 4.2
自分が直面した状況 ※「Generate Signed Bundle / APK…」が表示されない
Google Play Consoleにアップロードするaab(Android App Bundle)ファイルを作成するため、
- Flutterプロジェクトの中の「Android」フォルダを右クリック
- 「Open Android module in Android Studio」で、Androidアプリ専用のプロジェクトを起動
- 「Build」メニューから「Generate Signed Bundle / APK…」を選択
の手順を踏もうとしたところ、「Build」メニューに「Generate Signed Bundle / APK…」の項目が見つかりませんでした。
![](https://halzoblog.com/wp-content/uploads/2022/01/50_image01.png)
![](https://halzoblog.com/wp-content/uploads/2022/01/50_image02.png)
「Build」ウィンドウには、非推奨のGradle使用の警告が出ているものの、「BUILD SUCCESSFUL」となっていて、Androidアプリとしてのビルドはできているようでした。
![](https://halzoblog.com/wp-content/uploads/2022/01/50_image03.png)
但し、よく見るとウィンドウ上部に、
Gradle project sync failed. Basic functionality (e.g. editing, debugging) will not work properly.
Try Again Open 'Build' View Show Log in Finder
というメッセージが出ていました。
![](https://halzoblog.com/wp-content/uploads/2022/01/50_image04.png)
メッセージのとおり、「Try Again」を押しても、同じ状態になるだけで効果はありません。
「Open 'Build' View」を押すと、上図の「Build」ウィンドウが開くだけです。
「Show Log in Finder」を押すと、過去からのログが記録されている長大なファイルが開き、どこを見てよいのか分からず。。
他に気になる箇所を探すと、プロジェクトウィンドウに、通常であれば生成されるはずの「app」フォルダがありませんでした。
![](https://halzoblog.com/wp-content/uploads/2022/01/50_image05.png)
また、右下の「Event Log」を開いてみると、
Gradle sync failed: Sync failed: reason unknown
と赤字で表示されており、やはりエラーで正しくビルドされていない事がわかりました。
![](https://halzoblog.com/wp-content/uploads/2022/01/50_image06.png)
「reason unknown」とあるので、厄介そうな予感です。。
ネット上で調べて見つかった情報
「Generate Signed Bundle / APK…」が表示されないときの対策情報
どのキーワードで調べるか悩みましたが、まずは「Generate Signed Bundle / APK…」が表示されない事への対処法を調べてみました。
大方の情報は、Flutterのプロジェクトからは直接「Generate Signed Bundle / APK…」を開けず、「Open Android module in Android Studio」からAndroidアプリ専用の画面を開く必要がある、という趣旨のものでした。
この点は理解して対応していたため、解決には至りませんでした。
ただ、こちらの情報は少し違う観点でした。
自分のプロジェクト環境も、PCの移行に伴ってgit cloneして作ったものだったので、「もしかしてcloneしたときに何か処理が漏れていたからか?」と思い、参考にしたのですが、情報の時点がかなり以前なのもあってか、自分の状況とは異なるようでした。
なお、Flutterプロジェクトを旧環境(旧PCなど)から新環境(新PCなど)に移行する際、git cloneして、新環境でAndroidアプリのリリースビルドを作るとき、最低限必要となる対応は、以下2点と認識しており、いずれも対応済でした(そもそも後者は今回の時点では関係しないかと思います)。
- 「File」→「Project Structure」→「Project Settings」→「Modules」で、+ボタンからAndroidのモジュールを追加する。
※git clone後に、「View」→「Tool Windows」で、「Device File Explorer」や「Logcat」などがリストに表示されない場合は、これが必要。これをしないと、「Device File Explorer」だけでなく、「Generate Signed Bundle / APK…」も表示されない。 - 旧環境で、Google Playリリース時に使用していたkeystore(.jksファイル)を、git cloneした新環境においても使用できるよう、コピーしてくる。
前者については、こちらの記事で詳細を整理したので、よろしければご参考にしてください。
なお、Flutterプロジェクトをgit cloneしたときに必要な対応については、こちらの記事が大変わかりやすくまとまっており、参考になりました。ありがとうございます!
「Gradle project sync failed」が発生したときの対策情報
「Gradle project sync failed」の対処法としては、「Android Gradle Plugin Version」と「Gradle Version」の対応関係が不整合なので、Gradleを最新にして解消する、という情報が主流でした。
こちらに、Google公式のバージョン対応表があります。
ここでバージョン対応に不整合がある場合は、下図のようにAndroid Studioの右下に出ているアップデートを実行すれば、解消すると思われます。
![](https://halzoblog.com/wp-content/uploads/2022/01/50_image07.png)
もしくは、次の図にあるとおり、Androidアプリ専用の画面の「File」→「Project Structure」→「Project」から、それぞれ整合するバージョンを指定することもできます。
詳細なアップデートの方法は、上記Google公式のバージョン対応表のページにも説明があります。
しかし、自分の環境を「Project Structure」から確認したところ、下図のとおり不整合は生じていませんでした。
![](https://halzoblog.com/wp-content/uploads/2022/01/50_image08.png)
別のFlutterプロジェクトも、上記と同じバージョン関係で問題なくGradle syncが成功していたので、Gradleのバージョンが問題ではなさそうです。。
「Show Log in Finder」のログを確認
その他に、Android StudioやMacの再起動を試しましたが効果はなく、Gradle syncが成功したプロジェクトと失敗したプロジェクトで、「Project Structure」の設定内容も比較しましたが、特に違いは見つけられませんでした。
ただ、ログをきちんと見ていなかったことを思い出したので、改めて確認しました。
ログファイル(自分の場合は「idea.log」というファイル)は、前述のAndroid Studio内のエラーメッセージのリンク(「Show Log in Finder」)から飛べますが、Finderから探す場合は、以下のようなパスに保存されています。
ユーザー名>ライブラリ>Logs>Google>AndroidStudio4.2>idea.log
※「ライブラリ」フォルダは、Finder上でcommand+shift+ピリオド(.)を押すと表示されます。
ログファイルには、過去分から膨大な量が記録されているので、どこに今回のエラーログがあるか分かりづらいです。。
そのため、ログファイルを開いた状態で、「sync failed」のエラーメッセージにある「Try Again」を押すことで、実行した時点からのログを追加表示させ、該当部分を探しやすくしました。
結果、ログの中に以下のようなエラー文があることがわかりました。
ERROR - intellij.openapi.progress.Task - Module: 'flutter_plugin_android_lifecycle' platform 'android-31' not found.
com.android.tools.idea.gradle.project.sync.idea.issues.SdkPlatformNotFoundException: Module: 'flutter_plugin_android_lifecycle' platform 'android-31' not found.
どうやらAPIレベル31のAndroid SDKが入っていないことが問題らしいと分かりました。
Android SDKを追加
念のため上記エラー文でググってみると、全く同じ状況を説明している下記記事が見つかりました。ベストアンサーではありませんが、1つ目の回答が対処法になると思われます。
そこで、「Preferences」→「Appearance & Behavior」→「System Settings」→「Android SDK」と進み、「Android API 31」をインストールしました。
![](https://halzoblog.com/wp-content/uploads/2022/01/50_image09.png)
その上で、
- 「File」→「Invalidate Caches / Restart…」で、キャッシュを削除・Android Studioを再起動
- 「Open Android module in Android Studio」で、Androidアプリ専用のプロジェクトを起動
すると、無事Syncが成功し、「Build」メニューに「Generate Signed Bundle / APK…」が表示されました。
![](https://halzoblog.com/wp-content/uploads/2022/01/50_image10.png)
バージョンは違いますが、こちらの記事にほぼ同じ内容が掲載されていて、大変参考になりました。ありがとうございます!
ただ、APIレベルについて、まだ理解が浅いこともあり、
「app/build.gradle」ファイルでは「targetSdkVersion」と「compileSdkVersion」を30にしているのに、なぜAPIベル31のSDKが必要なの?
と疑問に思ってしまいました。。
恐らく使用しているパッケージの中に、APIレベル31を要求するものがあったのかな?と思い、エラーログにあった「flutter_plugin_android_lifecycle」をコード内検索(command+shift+F)したところ、「flutter_plugin_android_lifecycle」パッケージのバージョン2.0.5が使用されていると分かりました。
本パッケージの下記Changelogによると、2.0.5は、compileSdkVersion 31に対応させたバージョンらしいので、これが原因の一端だったようです。
なお、本パッケージは、自分が導入していた「file_picker」パッケージの中で使用されていました。
これ以上は、まだ理解を深められていませんが、、、また勉強していきます。
以上、ご参考になれば幸いです。
最後までお読みいただき、ありがとうございました。
個人アプリ開発で役立ったもの
おすすめの学習教材
\超初心者向けでオススメな元Udemyの講座/
\キャンペーン時を狙えば安価で網羅的な内容が学べる(日本語訳あり)/
\Gitの基礎について無料で学べる/
おすすめの学習書籍
\実用的。image_pickerに関してかなり助けられた/
\Dartの基礎文法を素早くインプットできる/
Dart入門 - Dartの要点をつかむためのクイックツアー
コメント