はじめに
Androidビルド時に作成されるAPK(Android Application Package)とAAB(Android App Bundle)のファイル名を変更する方法について説明していきます。
APK/AABファイルの名称変更の方法のうち、ビルドタイプ/プロダクトフレーバーも含めて変更する方法と、ビルドタイプ/プロダクトフレーバーについては変更しない方法がありますが、今回は前者について説明します。
環境
今回の記事では、Ionic(Cordova/Angular)で作成したAPK/AABファイルの名称を変更しています。
ionic info
コマンドの実行結果
% ionic info Ionic: Ionic CLI : 6.17.1 (/usr/local/lib/node_modules/@ionic/cli) Ionic Framework : @ionic/angular 5.7.0 @angular-devkit/build-angular : 12.1.4 @angular-devkit/schematics : 12.2.6 @angular/cli : 12.1.4 @ionic/angular-toolkit : 4.0.0 Cordova: Cordova CLI : 10.0.0 Cordova Platforms : android 9.1.0 Cordova Plugins : cordova-plugin-ionic-keyboard 2.2.0, cordova-plugin-ionic-webview 4.2.1, (and 4 other plugins) Utility: cordova-res : not installed globally native-run : not installed globally System: NodeJS : v14.17.6 (/usr/local/bin/node) npm : 6.14.15 OS : macOS Big Sur Xcode : Xcode 12.5.1 Build version 12E507
デフォルトのファイル名
ファイル名について何も設定をしていない状態では、どのような命名規則でファイル名が設定されるのかをまず確認していきます。
Android Application Package(.apk)の場合
Ionic(Cordova)では、以下のコマンドで.apk
ファイルを作成することができます。
ionic cordova build android
上記のコマンドの結果、[ionicプロジェクト]/platforms/android/app/build/outputs/apk/debug
配下にapp-debug.apk
ファイルが作成されます。
このように、デフォルトでは.apk
ファイルは以下のような命名規則でファイルが命名されます。
app-[プロダクトフレーバー]-[ビルドタイプ].apk
今回は、ビルドタイプをdebug
に設定しプロダクトフレーバーは作成していないため、ファイル名がapp-debug.apk
になっています。
Android App Bundle(.aab)の場合
Ionic(Cordova)では、以下のコマンドで.aabファイルを作成することができます。
ionic cordova build android -- -- --packageType=bundle
上記のコマンドの結果、[ionicプロジェクト]/platforms/android/app/build/outputs/bundle/debug
配下にapp-debug.aab
ファイルが作成されます。
.aab
ファイルの命名規則も、拡張子(.aab
)以外は.apk
ファイルと同じになります。1
app-[プロダクトフレーバー]-[ビルドタイプ].aab
ファイル名の変更方法
APK/AABファイルをそれぞれ以下の通り、名称を変更することで、ファイル名の変更方法について説明します。
- APKファイル
- 変更前:
app-debug.apk
- 変更後:
android-application-package.apk
- 変更前:
- AABファイル
- 変更前:
app-debug.aab
- 変更後:
android-app-bundle.aab
- 変更前:
APK/AABのファイル名を変更する方法についてですが、Cordova のフックスクリプトで直接ファイル名を変更する方法などもありますが、今回はGradle経由で変更する方法について説明します。
Gradle経由でファイル名を変更する
それでは、Gradle経由でAPK/AABのファイル名を変更する方法について説明していきます。
Gradleでファイル名を変更する大まかな流れですが、以下になります。
before_build
にフックされたCordovaフックスクリプト(JavaScript)がビルド前のタイミングでコールされるコールされたCordovaフックスクリプトが
build-extras.gradle
ファイルを[ionicプロジェクト]/platforms/android/app
ディレクトリ配下にコピーするファイル名を変更する処理が設定された
build-extras.gradle
がapp
ディレクトリ配下に配置されることにより、AndroidビルドのタイミングでAPK/AABのファイル名が変更される
ビルドの設定ファイルであるbuild.gradle
はAndroidビルド後に作成されるため、ビルドの設定を拡張するためには上記のようにフックスクリプトを経由する必要があります。
build-extras.gradle
をコピーするCordovaフックスクリプトを作成する
APK/AABファイルの両方で使用する、build-extras.gradle
をコピーするCordovaフックスクリプトを作成します。
build_scripts/copy-build-extras.js
/* * customize build.gradle */ const fs = require("fs"); const path = require("path"); const androidAppFolderPath = ["platforms", "android", "app"]; const extrasGradleFilePath = ["build_scripts", "build_extras"]; const extrasGradleFileName = "build-extras.gradle"; const copyBuildExtras = ( androidAppFolderFullPath, extrasGradleFileFullPath, destinationFullPath ) => { if ( !fs.existsSync( androidAppFolderFullPath || !fs.existsSync(extrasGradleFileFullPath) ) ) { console.log(`${extrasGradleFileFullPath} not found. Skipping`) return; } fs.copyFile(extrasGradleFileFullPath, destinationFullPath, (err) => { if (err) { console.error(err); return; } console.log('copied build-extras.gradle'); }) }; module.exports = (context) => { copyBuildExtras( path.join(context.opts.projectRoot, ...androidAppFolderPath), path.join( context.opts.projectRoot, ...extrasGradleFilePath, extrasGradleFileName ), path.join(context.opts.projectRoot, ...androidAppFolderPath, extrasGradleFileName) ); };
続いて、上記で作成したCordovaフックスクリプトをビルド前(before_build
)に呼び出されるようにフックします。
config.xml
<?xml version='1.0' encoding='utf-8'?> <widget id="io.ionic.starter" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0"> ... <platform name="android"> ... <hook src="build_scripts/copy-build-extras.js" type="before_build" /> ... </platform> <platform name="ios"> ... </platform> </widget>
これでCordovaフックスクリプトの作成とフックの設定が完了したので、続いてAPKとAABのファイル名を変更するbuild-extras.gradle
を作成していきます。
APKファイルの名称を変更する
以下がAPKファイルの名称を変更するbuild-extras.gradle
になります。
build_scripts/build_extras/build-extras.gradle
android { applicationVariants.all { variant -> if (variant.buildType.name != "debug") { return } variant.outputs.all { outputFileName = "android-application-package.apk" } } }
AABファイルの名称を変更する
以下がAABファイルの名称を変更するbuild-extras.gradle
になります。
build_scripts/build_extras/build-extras.gradle
android { task finalizeBundleDebug(type: Sync) { def path = "${buildDir}/outputs/bundle/debug/" from(path) include 'app-debug.aab' destinationDir file(path) rename 'app-debug.aab', 'android-app-bundle.aab' } tasks.whenTaskAdded { task -> if (task.name.equals('bundleDebug')) { task.finalizedBy finalizeBundleDebug } } }
動作確認
フックスクリプトとbuild-extras.gradle
の作成が終わったところで、APK/AABファイルの名称が変更されるか確認してみます。
APKファイル
以下のコマンドで.apk
ファイルを作成します。
ionic cordova build android
以下画像のようにファイル名が期待通り変更されています。
AABファイル
以下のコマンドで.aab
ファイルを作成します。
ionic cordova build android -- -- --packageType=bundle
.aab
ファイルも期待通り変更されていることがわかります。
参考サイト
Android Platform Guide - Apache Cordova
How do I add a version specific filename to a Cordova .apk - Stack Overflow
Copy build-extras to platforms/android · GitHub
ビルド時に生成されるAPK/AABのファイル名を変更する方法 - Qiita
ビルド バリアントを設定する | Android デベロッパー | Android Developers
How to make use of Android App Bundle in Ionic Applications? - Stack Overflow
Androidのビルドバリアントをイチから理解する | フューチャー技術ブログ
How to change the generated filename for App Bundles with Gradle?
Copy build-extras to platforms/android · GitHub
-
Android Gradle プラグインの3.5.0 alpha 04以前では、Android App Bundleのデフォルトのファイル名にはビルドタイプもプロダクトフレーバーも含まれていなかった。Android Gradle プラグイン 3.5.0 alpha 04以前のAABファイルのデフォルトのファイル名は
app.aab
となる↩