Azure DevOps の Android Signing
Xamarin アプリのビルドを Azure DevOps (旧VSTS) に任せています。署名も Android Signing タスクでできるようにしました。
Android Signing の Version 3.*
最近、 Android Signing の Version 3.* が出たので、早速試してみました。 Version 3.* では、署名に apksigner.jar を使うようになります。
apksigner が失敗する
ところが、うまくいかなかったのです。ビルドが Android Signing のところで失敗してしまいます。 jarsigner.exe を使う Version 2.* なら大丈夫なのに
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 ファイルを作り直して回避しました