Androidリリースビルドが「成功したのにAPKがない」場合の真相と対処ガイド
対象:Cordova、Gradle素のAndroid、React Native、Flutterなど、Gradleを使うAndroidプロジェクト。
典型症状:コンソールに
BUILD SUCCESSFUL
と出るのに、期待していたapp/build/outputs/apk/release/app-release.apk
が見当たらない。
1 問題の現象
cordova build android --release # または gradlew bundleRelease
- ビルドは成功
- ログにはこんな行が出る。
Built the following bundle(s): app/build/outputs/bundle/release/app-release.aab
- 一方で後処理スクリプトがエラー
ENOENT: no such file or directory, rename '.../apk/release/app-release.apk' ...
- つまりAABはあるがAPKがない
2 ね本原因:デフォルト出力がAPK➡️AABに変わった
年月 | 出来事 | 影響 |
---|---|---|
2021-8 | Google Playで新規アプリはAAB必須 | 配布パイプラインにAAB対応が必須 |
2021-9 | Gradle7/AGP7: リリースビルドのデフォルト成果物をAABに切り替え |
assembleRelease を呼ばない限りAPKを作らない |
2021-10 | cordova-Android10:cordova build --release でbundleRelease を実行 |
引数なしだとAABのみ生成 |
その結果、debug=APK、release=AABが"新しい常識"になった。旧来の「リリースでもAPKを拾う」スクリプトはファイルを見つけられずエラーになる。
3 クイック修復策
3-1 APKがほしい場合
cordova build android --release --packageType=apk
あるいは
cd platforms/android
gradlew assembleRelease
頻繁に使うなら、packageType=apk
を固定すると楽。
4 システマティックな調査手順
Step | チェックポイント | コマンド・方法 | 典型結果 |
---|---|---|---|
①ビルドタスク | bundleReleaseかassembleReleaseか | ./gradlew task --all | grep Release |
②成果物フォルダ | outputs/bundle/release/ vs outputs/apk/release | ls app/build/outputs/**/release/ | どちらにファイルがあるか |
後処理スクリプト | APKパスをハードコードしていないか | grep -R ".apk" scripts/ | |
④CLI引数 | --packageType=が指定されているか | CI ログ/package.jsonを確認 | 省略時はデフォルト継承 |
⑤Gradle設定 | android.bundle.enable...などのフラグ | build.gradleを検索 | trueならAABだけ |
まとめ
「ビルド成功なのに APK がない」はバグではなく エコシステムの進化。
タスク→成果物→スクリプト のチェックリストを持っておけば、
同じ罠にハマっても 2 分で原因を突き止められます。
皆さんのリリースがスムーズに進みますように!