2019年10月21日月曜日

Xamarin Android App Bundle エラー

Xamarinがコンソールレベルで、Androidの新しいアプリ公開パッケージ方式であるAndroid App Bundleに対応しているので試してみました。

ココを参考にさせてもらって、aabファイルが出来たまでは良かったのですが、いざPlay Consoleで登録して公開後、手持ちのスマホでダウンロードしてみたら、インストールはできたものの、起動直後に「問題が発生したため、XXXXを終了します。」となってアプリが起動しない。

先週公開されたXamarin 10.1 preview releaseでは、ようやくIDEがAndroid App Bundleに対応し、アーカイブ機能も対応したようです。もうちょっと待とうかな。10月中にAndroid App Bundleでバージョンアップ版を公開したいのですが…。

Android9対応期限である11月1日の前にバージョンアップ版を公開したいので原因調査してなんとか対応させることにしました。まずはVisual Studioを16.3.5にアップデートし、Xamarinを10.0に。Androidオプションにaapt2の設定が出現しました。
csprojでAndroidPackageFormatをaabに設定すれば、強制的にaapt2がtrueに設定されるらしいのですが。
ということで、再度msbuildを実行。aabファイルができましたが、これまでより若干サイズが大きい。さっそくPlay Consoleにアップロード。今度はいけるか?


ダメでした。
---
その後、クラッシュレポートのスタックトレースにヒントを発見。
resources/rawフォルダ内のファイルに対して、NotFoundExceptionが発生しているので、とりあえずrawフォルダとリソースを参照するロジックをカット。これでエラーは回避できましたが、さらに広告絡みのエラーが出ました。インストール後の初回起動時のみエラーが発生するという不可解な現象ですが、ネットで事例がチラホラ。
com.google.android.gms.measurement.AppMeasurementInstallReferrerReceiver
のClassNotFoundExceptionです。
こちらはAndroidの不要コードを削除する機能(ProGuard)の問題で、当該クラスの削除抑制を指示することで対応可能なようです。configに追加オプションを書けばいいらしいのですが、R8を指定している場合も、互換があるので同じで良さそうです。
以下のオプションを追記します。

-keep class com.google.android.gms.** { *; }
-keep class com.google.firebase.** { *; } 

Xamarinの場合はAndroidSDKのフォルダにある..\tools\proguard\proguard-android.txtに追記してやれば良いみたいです。

諦めかけましたが、何とかApp Bundle対応できてよかった。
ということで次はAndroid9(minSdkVersion=28)対応です。
SupportLibraryからAndroidXへの移行はどうしようかな…。