Xamarin
Xamarin.Android
VSTS
AzureDevOps

Android のキーストアの入力情報ではカンマを使わないこと

Azure DevOps の Android Signing

Xamarin アプリのビルドを Azure DevOps (旧VSTS) に任せています。署名も Android Signing タスクでできるようにしました。

Android Signing の Version 3.*

最近、 Android SigningVersion 3.* が出たので、早速試してみました。 Version 3.* では、署名に apksigner.jar を使うようになります

apksigner が失敗する

ところが、うまくいかなかったのです。ビルドが Android Signing のところで失敗してしまいます。 jarsigner.exe を使う Version 2.* なら大丈夫なのに :angry:

apksigner だけローカルPCで実行してみたのですが、同様に失敗する状態です。

"Invalid trailing backslash" という例外

次のような例外が吐かれます。

>apksigner.bat sign -ks Hoge.keystore HogeApp.apk
Keystore password for signer #1:
Exception in thread "main" java.security.SignatureException: Failed to generate v1 signature
...
Caused by: java.security.cert.CertificateException: Failed to sign using signer "HOGE"
...
Caused by: java.security.cert.CertificateParsingException: Failed to parse signer certificate issuer name
...
Caused by: java.io.IOException: Invalid trailing backslash
...

原因は "~ Co., Ltd."

キーストアを作成する際、 組織Hoge Co., Ltd. と入力していたのですが、これが原因でした。キーストアに入力した情報は、カンマをバックスラッシュでエスケープして、 Piyo, OU=Fuga, O=Hoge Co.\, Ltd., L=Minato-ku, S=Tokyo, C=JP という形で .keystore ファイルに格納されています。apksigner.jar がこのアンエスケープに失敗していたようです。

カンマを使わないようにして回避

ということで、カンマを含まないように 組織HOGE に変えて .keystore ファイルを作り直して回避しました :smile:

参照