Flutter の公式ドキュメントは Build and release an Android app。
1. bundletool のインストール
brew install bundletool
詳細は bundletool の公式ドキュメント を参照
2. App Bundle の build + 実機へのインストール
build flavor による分岐も含めて、こんな感じでスクリプト化しています。普段から頻繁に使うので。
export KEY_STORE_PASS=XXX
export KEY_PASS=YYY
./scripts/install_aab.sh -f development -s
scripts/build_aab.sh
#!/bin/sh
# 以下2つは、環境変数としてセットされていることを前提とする
# • KEY_STORE_PASS
# • KEY_PASS
SKIP_INSTALL=0
while getopts sf: OPT
do
case $OPT in
s) SKIP_INSTALL=1
;;
f) FLAVOR=$OPTARG
;;
esac
done
AAB_PATH=/sampleProjects/${FLAVOR}Release/app-${FLAVOR}-release.aab
APKS_PATH=/sampleProjects/build/app/outputs/app.apks
KEY_STORE_PATH=/foo/bar/key.jks
KEY_ALIAS=key
# 生成済みだとエラーになるので、まず削除する
rm $APKS_PATH
# aab の build
flutter build appbundle -t lib/main_${FLAVOR}.dart --release --flavor ${FLAVOR}
# aab を実機に install しなくていい場合は、ここで終了
if [ $SKIP_INSTALL -eq 1 ]; then
exit
fi
# bundletool を使って aab, apks を生成する
# See: https://developer.android.com/studio/command-line/bundletool
DEVICE_ID=XXX # 自分の Android 実機
bundletool build-apks \
--connected-device \
--device-id=${DEVICE_ID} \
--bundle=${AAB_PATH} \
--output=${APKS_PATH} \
--ks=${KEY_STORE_PATH} \
--ks-pass=pass:${KEY_STORE_PASS} \
--ks-key-alias=${KEY_ALIAS} \
--key-pass=pass:${KEY_PASS}
# USB で接続済みの端末にインストールする
bundletool install-apks --apks=${APKS_PATH} --device-id=${DEVICE_ID}