shuhelohelo’s blog

Xamarin.Forms多めです.

Xamarin.FormsのAndroidアプリのAPKファイルの生成

ストアに上げるにしてもテスト用にデバイスに配置(デバッグではなく)するにしても,APKに対して署名する必要があるようだ?

docs.microsoft.com

こちらも参考に.

riptutorial.com

で,テスト用のAPKを生成する際は「Ad hoc」を選ぶようだ?

ちょっとやってみよう.

docs.microsoft.com

Androidプロジェクトのプロパティを開く.

これはソリューションエクスプローラAndroidプロジェクトを右クリックしてコンテキストメニューから「Properties」を選択する.

f:id:shuhelohelo:20200703170227p:plain

Android Manifest

左側のメニューからAndroid Manifestを選ぶ.

アプリケーションのアイコンを指定する

Application iconでpngファイルを指定する.

f:id:shuhelohelo:20200703171533p:plain

ここにはAndroidプロジェクトのResources > drawableResources > mipmap-**内に配置されたpngファイルが候補として表示される.

バージョンを指定する

バージョン番号

  • これはビルドのたびにインクリメントされていく.
  • ユーザーに見せるものではない.
  • AndroidManifest.xmlandroid:versionCodeとして記述される.

バージョン名

  • ユーザーに見せる「バージョン」情報.
  • ストアなどでも表示されるもの.
  • 内部的には使われない.
  • ユーザーが使っているバージョンの特定ができるのであれば,どんな文字列であってもよい.
  • AndroidManifest.xmlandroid:versionNameとして記述される.

Android Options

左側のメニューからAndroid Optionsを選択する.

この設定はビルド設定毎に異なるので,対象のビルド設定を選択していることを確認する.今回はReleaseを選択している.

f:id:shuhelohelo:20200703173450p:plain

Code shrinker

サイズを小さくしてくれるのか?

f:id:shuhelohelo:20200703180940p:plain

r8とかProGuardとかわかんない.

James Montemagnoさんのアプリの設定がr8だったので,とりあえずr8にしておく

Code Generation and Runtime

これもよくわかっていない.

JamesさんのアプリではEnable Startup TracingUse the concurrent garbage collectorの両方にチェックがついているので,そのようにした.

わかった.DotNetConf2020 Xamarin回のメモに書いてた.

shuhelohelo.hatenablog.com

事前コンパイラ(AOT)を有効にするオプションだった.

f:id:shuhelohelo:20200703194249p:plain

Linker

静的な解析によって,実行時に使用されるアセンブリ,型,メンバーなどを検出し,それ以外の使用されないものをパッケージから除外する.

デフォルトでSdk Assemblies Onlyが選択されているので,そのままにする. f:id:shuhelohelo:20200703173826p:plain

このあたりの設定は,James Montemagnoさんのアプリの設定を参考にするとしよう.これはストアにも公開している有料アプリで,そこで使われている設定なので大いに参考になるはず.

github.com

てか,ビルド設定の種類がたくさんあるなぁ. f:id:shuhelohelo:20200703175018p:plain

とりあえずこのへんで.

Archive化する

ソリューションエクスプローラで,Androidプロジェクトで右クリックしてコンテキストメニューからArchiveを選択する.

f:id:shuhelohelo:20200703201536p:plain

もしくはVisual StudioのメニューからTools > Archive Managerを選択する.

f:id:shuhelohelo:20200703201500p:plain

Archive Mangerタブが開く.

f:id:shuhelohelo:20200703201114p:plain

Archive化が実行され,以下のように表示されるので,完了するまで待つ.

f:id:shuhelohelo:20200703201733p:plain

成功したら,Distribute...ボタンを押す.

f:id:shuhelohelo:20200703202218p:plain

このようなダイアログ(Distribution Channel )が表示される.

f:id:shuhelohelo:20200703202307p:plain

ここでは2つの選択肢がある.

Androidバイスにインストール(サイドローディング)可能な署名されたAPKをローカルに保存する.

詳しくはこちら.

docs.microsoft.com

Google Playに署名されたAPKを発行する.

詳しくはこちら.

docs.microsoft.com

Ad Hoc

Ad Hocボタンを押すと次の画面(Signing Identity)が表示される.

f:id:shuhelohelo:20200703202851p:plain

APKを発行するためには署名キー(または証明書)で署名する必要がある.

既存の署名キーがある場合はImportボタンを押す. 新規作成する場合は+ボタンを押す.

f:id:shuhelohelo:20200703203437p:plain

ここでは新規作成する.

以下のダイアログが開く. Visual Studio opens dialog as shown in the next screenshot.とかdialog is displayedとか.

f:id:shuhelohelo:20200703203504p:plain

Androidアプリへの署名に必要な情報をここで入力する.

AliasとPasswordを設定し,後半の情報は少なくとも1つ入力すれば良いので,Organization(組織)だけ入力した.

f:id:shuhelohelo:20200703204507p:plain

Aliasはまあこの署名キーを区別するための名前だと思うので,適当に決めた.

Createボタンを押す.

すると以下のように,リストにアイテムが追加された.

harusoftという名前で署名キーが作成されたということか.

f:id:shuhelohelo:20200703204657p:plain

この署名キーの保存場所は,以下のとおりである.

C:\Users\{USERNAME}\AppData\Local\Xamarin\Mono for Android\Keystore\{ALIAS}\{ALIAS}.keystore

この{ALIAS}の部分が,先程設定したAliasの文字列になる.つまりさっきAliasにharusoftという文字列を指定したので,私の場合は以下のようになる.

C:\Users\hoge\AppData\Local\Xamarin\Mono for Android\Keystore\harusoft\harusoft.keystore

注意!

この署名キーをなくさないこと! ぐぬぬ.どこに保管しておくのが良いのだろうか. プライベートなリポジトリか?

続いて,その署名キーを選択した状態で,ダイアログ下部のSave asボタンを押す.

f:id:shuhelohelo:20200703204945p:plain

APKファイルの保存先を指定するダイアログが開くので,好きな場所を指定する.今回はデスクトップにした. Saveボタンを押す.

パスワードを訊かれるので,先程設定した署名キーのパスワードを入力する.

f:id:shuhelohelo:20200703205144p:plain

OKボタンを押すと,指定したディレクトリに以下のようにAPKファイルが作成される.

f:id:shuhelohelo:20200703205654p:plain

APKのサイドローディング

署名されたAPKファイルが無事生成できたので,これをAndroid端末にインストールする.

AndroidアプリのサイドローディングについてはGoogleの公式サイトを参考にする.

developer.android.com

このページの説明によると,サイドローディングとは、Google Play などのアプリストアを使用せずに手動でアプリをデバイスにインストールすることを指します,とのこと.

なるほど.

PCとAndroid端末をつないで,Android内のいずれかのフォルダにAPKファイルをコピーし,Android側でそのファイルを開けば,インストールが始まる.

色々警告されるが,自分で作ったものなので自信を持って進んでいけばよい.