2018年1月2日火曜日

Xamarin ProGuradでハマる

Xamarinで開発したAndroidアプリをGooglePlayで公開する場合には、パッケージ(APKファイル)を最小サイズにするために、ProGuardというJavaのツールを使って、使用しているクラスだけに絞る最適化を行います。
ところがVisualStudio2017Community+Xamarinで開発したアプリを、ProGuardを有効にしてAPKを作って実機で実行すると起動時にエラーで落ちたり、真っ暗な画面で起動しなかったりで苦労しました。
XamarinのProGuardは、プロジェクトプロパティのAndroidオプション画面で指定するのですが、ProGuardを有効にする場合には、同じ画面の他のオプションにも注意が必要らしいです。
まずProGuradはリリースコンパイルの時にのみONにすればいい機能なので、ビルド構成をReleaseにします。
で、ProGuard以外のパッケージプロパティは全OFF(メソッド数が65535を超える場合は要Multi-Dex。※KitKatでは注意が必要らしい)。で、リンカープロパティは、「SDKよびユーザーアセンブリ」にしておく必要があるらしい。
この状態でビルドすると、確かにAPKは小さくなるが実機で動かない。
どのくらい小さくなるかというと、リンカープロパティでリンクなしにすると50MBくらい→7MBくらい。
小さくなって動かないのじゃ仕方ない。デバイスログを見たり色々したのですが原因不明で数時間調べたのですが、ProGuardオプションをOFFにしてビルドしたら、数百バイト大きなAPKができて何故か正常に動いた。さっぱり原因がわからん。
という感じで元旦からプログラミングしてます。