ちょっと原因も対策もよく分からないのでメモ。
前提
- Titanium Studioからkeystoreを作成した
- keystoreのオプションは標準のまま(RSA 2048bit)
- 対象はAndroid 4.0以降
- AndroidManifest.xmlは更新している
NGまでの流れ
- 作成したkeystoreを使い、Store用にAndroidビルド
- Google Playに申請 → OK
- しばし待つ
- テスト端末のデバッグ版アプリを削除
- Google Playから申請アプリをインストール
- 署名NGでインストールできず
- あれ?っと思い、申請アプリのadbインストールを試すも署名NG
やったこと
- Titanium Studioのコンソールから、
jarsigner
の-sigalg
オプションがAndroidのドキュメントで指定されているものと異なっているのを確認 -
jarsigner -sigalg MD5withRSA ...(あとは同じ)
と手動でサイン -
zipalign
も手動で - もう一度Google Playへ申請
- 通った (´・ω・`) 何があかんかったんやろか。毎回手動で署名とかめんどい
分かってきたこと
- keystoreを調べると、署名アルゴリズムに
SHA256withRSA
が書かれている -
keytool -list -v -keystore XXXX.keystore -alias XXXX
で調べる - この結果を見て、
builder.py
がjarsigner
の-sigalg
オプションをSHA256withRSA
にしている - デフォルトは
MD5withRSA
、つまり正しい結果になるはず - Titanium Studioからkeystoreを作ったからこうなったのかな
- 毎回手動サインは面倒なので、builder.pyを編集してやった。だいたい1700行目の
get_sigalg
メソッド。 - どうやらTerminalの文字コードをS-JISに変更するとOKらしいぞ!まだ試してないけど。