Androidアプリを配布するにはAPKファイルに署名が必要とのことなので、Xamarin というか Visual Studio for Mac ではどうすれば良いのか調べてみました。
まずは挙動を確認
リリースビルドすると...
-
bin/Release
を覗いてみてもAPKファイルは生成されていなかった。
"発行のためのアーカイブ"を実行すると...
-
$HOME/Library/Developer/Xamarin/Archives/yyyy-mm-dd
にAPKファイルが作成される。 -
bin/Release
にもAPKファイルが作成される。 - MD5ハッシュ値は両方とも同じだった。
APKの生成と署名
"発行のためのアーカイブ"を実行
この時点でAPKファイルが作成されますが、まだ未署名の状態です。
ちなみにキーストアは $HOME/Library/Developer/Xamarin/Keystore/エイリアス名
の下に作成されていました。
$ ls
BlankAppKey.keyInfo BlankAppKey.keystore
結果
さて、ちゃんと署名されたかどうか確認してみましょうか。
APKファイルの署名状態は下記のコマンドで確認できるらしいです。
apksigner verify -v [APKファイル]
では、確認してみます。
$ apksigner verify -v ~/Desktop/APKs/com.companyname.BlankApp.apk
Verifies
Verified using v1 scheme (JAR signing): true
Verified using v2 scheme (APK Signature Scheme v2): false
Number of signers: 1
v2署名がされていません...(>_<;
v2署名なしでもアプリのインストールはできるので今のところは問題ないとは思いますが、今後も無効のままにはしておけないのでv2署名を有効にする方策を探らねばなりませんね...
まぁ、Android側でv2署名が必須になれば、それまでにXamarinが対応してくれるでしょうけど。
自動で署名
APKファイル作成時に自動で署名できるようです。
Androidプロジェクトの設定から"Androidパッケージへの署名"を選択するとキーストアやらを指定する欄があるので入力します。
キーストアのパスワードを設定した覚えはありませんが、証明書(エイリアス)を作成した時に入力したものがそのまま使われているっぽいです。
"発行のためのアーカイブ"を実行してAPKファイルを作成します。すると...
$ apksigner verify -v com.companyname.BlankApp.apk
Verifies
Verified using v1 scheme (JAR signing): true
Verified using v2 scheme (APK Signature Scheme v2): false
Number of signers: 1
署名済みのAPKファイルが作成されました。
ちなみに署名の設定をせずにAPKファイルを作成した場合はこうなりました。
$ apksigner verify -v com.companyname.BlankApp.apk
DOES NOT VERIFY
ERROR: Missing META-INF/MANIFEST.MF
ということで、XamarinでもAPKファイルに署名できることがわかりました。
とりあえずは以上です。
おまけ
署名のないアプリをインストールしようとすると...
こうなりました。
「インストールできません」と言って欲しいところです。
署名ありの場合は、こうでした。
私の場合は、v2署名なしでもOreoにインストールできました。メール経由です。
Google Play経由は試してません。
こちらを参考にしました
apksignerで署名する方法:
http://monozukit.hatenablog.com/entry/2017/01/26/apksigner%E3%81%A7%E7%BD%B2%E5%90%8D%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95