[Xamarin] Android App Bundle対応がリリースされたので試してみた
Visual Studio 2019のバージョン16.2がリリースされ、Android App Bundleが正式対応しました!
というわけで、早速試してみました!!
目次
- 環境
- Google Play アプリ署名を有効にする
- Android App Bundleに対応する
- ビルドする
- apksファイルを作成して端末にインストールする
- Google Play Consoleにaabファイルをアップロード
- さいごに
- 参考
環境
- Windows
- Windows 10 Pro
- Visual Studio Community 2019: 16.2
- macOS
- macOS Mojave 10.14.5
- Visutal Studio Community 2019 for Mac: 8.2
- Xcode: 10.3
- Android
- Pixel 3a: Android 9
- Xamarin
- Xamarin: 16.2.0.90
- Xamarin.Android SDK: 9.4.0.51
- Xamarin.iOS and Xamarin.Mac SDK: 12.14.0.110
Google Play アプリ署名を有効にする
Google Play アプリ署名の使用 | Play Consoleヘルプを参考に実施します。
「Java Keystore から鍵をエクスポートしてアップロードする」を選択して、アプリ署名の秘密鍵
とアップロード鍵の証明書
をアップロードします。
アプリ署名の秘密鍵
keystore
とalias
の値は、既存のモノを用います。
java -jar pepk.jar --keystore=xxxx.keystore --alias=hoge --output=encrypted_private_key_path --encryptionkey=abcdefg...
生成されたencrypted_private_key_path
をアップロードします。
アップロード鍵の証明書
既存のkeystoreに新しい鍵を追加します。別のkeystoreでもOKだと思います。
keytool -genkey -v -keystore xxxx.keystore -alias upload -validity 10000 -keyalg RSA
続いて、鍵をPEM形式でエクスポートします。
keytool -export -rfc -keystore xxxx.keystore -alias upload -file upload_certificate.pem
生成されたupload_certificate.pem
をアップロードします。
登録する
最後に「完了」を押しましょう!!
「このアプリでは Google Play アプリ署名が有効です」と表示があればOKです!
Android App Bundleに対応する
Android Manifestファイルの修正
Androidのバージョンが「6.0 Marshmallow (API level 23) から 8.1 Oreo (API level 28)」の端末にインストールされる場合、android:installLocation
をinternalOnly
にしないと機能しないとの事なので、対応します。
Limitation: For apps deployed to devices running Android versions between 6.0 Marshmallow (API level 23) and 8.1 Oreo (API level 28), this feature currently only works if the app has the android:installLocation attribute set to "internalOnly" in the Android manifest.
manifest
タグに追加(ある場合は設定値を変更)します。
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="jp.xxx.yyy.zzz" android:installLocation="internalOnly" android:versionCode="123" android:versionName="1.2.3">
csprojファイルの修正
Visual Studioのプロジェクト設定には項目がないため、Androidプロジェクトの***.Android.csproj
を直接修正します。
This new build option is not yet surfaced in the Visual Studio project property pages.
Releaseビルド用のPropertyGroup
が既にあると思うので、適当に<AndroidPackageFormat>aab</AndroidPackageFormat>
を追加します。
ビルド時間が増えるため、Debugビルドには追加していません。
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> <AndroidPackageFormat>aab</AndroidPackageFormat> </PropertyGroup>
ビルドする
「アーカイブ」コマンドは未サポート
お世話になってる「アーカイブ」コマンドでは、本機能は未サポートです。
Additionally, the Build > Archive command does not yet support this feature.
そのため、コマンドでビルドを行います。
msbuildのPATHを通す(Windows)
Windowsでmsbuild
のPathが通ってなかったので、環境変数のPathに下記を追加しました。
- C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin
インストールした環境で微妙に異なるかもしれません。必要に応じて確認してください。
ビルド実行
Windows
コマンドプロンプトまたはPowerShellを起動し、Androidプロジェクトのフォルダ(***.Android.csprojがあるフォルダ)に移動します。
その後、下記コマンドを実行すればビルドが走ります。(万全を期すには、Visual Studioを起動して事前にReleaseビルドしておくと良いかもですね)
各パラメータの値は、署名プロパティを参考に、各自で修正してください。
なお、アップロード用のkeystoreとAliasを指定してください。
msbuild hoge.Android.csproj ` -t:SignAndroidPackage ` -p:Configuration=Release ` -p:AndroidKeyStore=True ` -p:AndroidSigningKeyStore=D:\OneDrive\App\keystore\xxxx.keystore ` -p:AndroidSigningStorePass=password ` -p:AndroidSigningKeyAlias=upload ` -p:AndroidSigningKeyPass=password
できました!
Mac
Windowsと同様です。ターミナルを起動し、Androidプロジェクトのフォルダで下記コマンドを実行します。
msbuild hoge.Android.csproj \ -t:SignAndroidPackage \ -p:Configuration=Release \ -p:AndroidKeyStore=True \ -p:AndroidSigningKeyStore=/Users/name/OneDrive/App/keystore/xxxx.keystore \ -p:AndroidSigningStorePass=password \ -p:AndroidSigningKeyAlias=upload \ -p:AndroidSigningKeyPass=password
できました!
apksファイルを作成して端末にインストールする
下記を参考に実施します。
Windows
apksファイルの作成
ここでは、アプリ署名用のkeystoreとaliasを指定します。
java -jar D:\OneDrive\App\bundletool.jar build-apks ` --bundle=anyname.aab ` --output=anyname.apks ` --ks=D:\OneDrive\App\keystore\xxxx.keystore ` --ks-pass=pass:password ` --ks-key-alias=hoge ` --key-pass=pass:password
インストール
java -jar D:\OneDrive\App\bundletool.jar install-apks --apks=anyname.apks
Mac
apksファイルの作成
bundletool build-apks \ --bundle=anyname.aab \ --output=anyname.apks \ --ks=/Users/name/OneDrive/App/keystore/xxxx.keystore \ --ks-pass=pass:password \ --ks-key-alias=hoge \ --key-pass=pass:password
インストール
bundletool install-apks --apks=anyname.apks
Google Play Consoleにaabファイルをアップロード
APKと同じように、任意のリリース管理にaabファイルをアップロードすればOKです。
適当なアプリで試しましたが、ダウンロードサイズが約20%減少しました!!!
さいごに
「アーカイブ」の対応が待ち遠しいです!!
インストールで一手間かかりますが、Xamarinアプリはapkサイズが大きくなりがちなので、活用していきたいです。
参考
- Visual Studio 2019 バージョン 16.2 | Microsoft Docs
- Initial support for Android App Bundle publishing format | Microsoft Docs
- 署名プロパティ | Microsoft Docs
- Google Play アプリ署名の使用 | Play Consoleヘルプ
- Your First Android App Bundle | Google Developers Codelabs
- Support of AppBundles #2727 | GitHub Issues
- Android App Bundleを端末にインストールする | Qiita