Cordova で Android リリースビルドして Google Play リリース用 apk を作る方法

phi phi on cordova, android

オレの Advent Calendar 2015 - Adventar の 19 日目です.

手順が結構多かったのでメモ残しておきます.

1. リリースビルド

まずはリリースビルドします.

$ cordova build android --release

これでとりあえず, 署名の付いていない生の apk ファイルが下記のディレクトリに出力されます.

./platforms/android/build/outputs/apk/

以降の作業のために移動しておきましょう.

$ cd ./platforms/android/build/outputs/apk/

2. 鍵の発行

鍵を発行します.

$ keytool -genkey -v -keystore .keystore -alias <エイリアス名> -keyalg RSA -validity 10000

エイリアス名は自分のアプリ名で良いと思います. 今回は wrapp とします.

$ keytool -genkey -v -keystore .keystore -alias wrapp -keyalg RSA -validity 10000

実際にコマンドを叩くと下記のように色々聞かれます. とりあえずパスワード以外はスルーで, 最後だけ y を入力すれば問題ないかと思います.

$ keytool -genkey -v -keystore .keystore -alias wrapp -keyalg RSA -validity 10000
キーストアのパスワードを入力してください:  
新規パスワードを再入力してください: 
姓名を入力してください。
  [Unknown]:  phi
組織単位名を入力してください。
  [Unknown]:  
組織名を入力してください。
  [Unknown]:  
都市名または地域名を入力してください。
  [Unknown]:  
都道府県名を入力してください。
  [Unknown]:  
この単位に該当する2文字の国コードを入力してください。
  [Unknown]:  
CN=phi, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknownでよろしいですか。  
  [いいえ]:  y

10,000日間有効な2,048ビットのRSAの鍵ペアと自己署名型証明書(SHA256withRSA)を生成しています  
  ディレクトリ名: CN=phi, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknown
<wrap>の鍵パスワードを入力してください  
  (キーストアのパスワードと同じ場合はRETURNを押してください):  
[.keystoreを格納中]

3. 鍵の確認

下記のコマンドで確認できます.

$ keytool -list -v -keystore .keystore

4. 署名

実際に署名しましょう. 下記のコマンドで署名できます.

$ jarsigner -verbose -keystore .keystore <apkファイル> <エイリアス名>

wrapp の場合は下記のようになります.

$ jarsigner -verbose -keystore .keystore android-x86-release-unsigned.apk wrapp

5. 署名の確認

上手く言ってれば下記のコマンドで結果を確認できます.

$ jarsigner -verify -verbose -certs <apkファイル>
$ jarsigner -verify -verbose -certs android-x86-release-unsigned.apk

6. 最適化

最後に最適化します. zipalign というツールを使います. パスが通っていれば直接使えますが通っていない場合があります. AndroidStudio 経由で下記のディレクトリにあると思うので直接参照するなりパスを追加するなりして使って下さい.

~/Library/Android/sdk/build-tools/<VERSION>/zipalign

下記のコマンドで最適化できます.

$ zipalign -v 4 <元のapkファイル> <最適化後のapkファイル>

今回の場合でいくとこんな感じです.

$ zipalign -v 4 android-x86-release-unsigned.apk android-release-unsigned.apk

ここで出力された apk ファイル( android-release-unsigned.apk ) を Google Play にアップロードすればアプリをリリースできます!

その他

ちなみに armv7 と x86 ってやつが出力されてると思います. x86 のほうが速いですがサポートしている端末が限られるのでとりあえず armv7 のほうをアップしてオプショナルで x86 ってやつもアップする感じで良いと思います.

Reference

参考にさせていただいたエントリーです.