このページでは、PhoneGapで作ったAndroidアプリの公開用APKを作るまでを紹介します。APKは「android application package file」の略です。
事前準備
証明書を作る
Google playにアプリを公開するには、アプリに署名する必要があります。これは、アプリの正当性を保証するためです。
まず、署名するための証明書を作ります。keytoolはJDKに入っているので、パスが通っていればどこでも実行できます。パスワードなど色々聞かれるので、好きに答えてください。「よろしいですか?」と聞かれたら、「y」と答えれば次に進みます。
今回の設定値 | |
---|---|
エイリアス名 | shoarai |
アプリ名 | app |
有効日数 | 10000 |
$ keytool -genkey -v -keystore .keystore -alias shoarai -keyalg RSA -validity 10000 > キーストアのパスワードを入力してください: > 新規パスワードを再入力してください: > 姓名を入力してください。 > 組織単位名を入力してください。 > 組織名を入力してください。 > 都市名または地域名を入力してください。 > 都道府県名を入力してください。 > この単位に該当する2文字の国コードを入力してください。 > ...でよろしいですか。 10,000日間有効な2,048ビットのRSAの鍵ペアと自己署名型証明書(SHA256withRSA)を生成しています ディレクトリ名: ... の鍵パスワードを入力してください (キーストアのパスワードと同じ場合はRETURNを押してください):
公開用APKを作る
APKを生成する
アプリの実装が完了したらリリースビルドし、APKを生成します。platforms/android/ant-buildにapp-release-unsigned.apkというファイルが生成されます。appの部分にはアプリ名が入ります。
$ phonegap build --release
署名する
事前に作った証明書でapkに署名します。
$ jarsigner -verbose -keystore .keystore app-release-unsigned.apk shoarai
最適化する
Google playにアプリを公開するには、最適化もする必要があります。最適化後のapkのファイル名をapp.apkとします。これで公開用APIの完成です。
$ zipalign -v 4 app-release-unsigned.apk app.apk
エラー
前述の最適化にて、zipalignコマンドが見つからないことがあります。
-bash: zipalign: command not found
zipalignはANDROID SDKのBuild-toolsに入っています。もしまだBuild-toolsが入ってないなら、Android SDK Managerからインストールしましょう。また、パスを通さないと実行できません。パスを通すのが面倒であれば、下記のように直接アクセスして実行してもいいです。
$ /Applications/android-sdk-macosx/build-tools/21.1.1/zipalign ...
ちなみに
APK生成、署名、最適化をまとめて行えるように下記のようなバッチファイルを作り、証明書と一緒にプロジェクトフォルダに置いておくと楽ですね。
MY_DIRNAME=$(dirname $0) cd $MY_DIRNAME # 設定値 UNSIGNED_FILE=platforms/android/ant-build/app-release-unsigned.apk SIGNED_FILE=app.apk ALIAS=shoarai phonegap build --release jarsigner -verbose -keystore .keystore $UNSIGNED_FILE $ALIAS zipalign -v 4 $UNSIGNED_FILE $SIGNED_FILE
警告が表示される(2015-12-24追記)
いつの間にか、署名時に下記の警告が表示されるようになっていました。
警告: -tsaまたは-tsacertが指定されていないため、このjarにはタイムスタンプが付加されていません。 タイムスタンプがないと、署名者証明書の有効期限(2043-05-10)後または将来の失効日後に 、ユーザーはこのjarを検証できない可能性があります。
JDK1.7からタイムスタンプが必要になったそうです。署名を下記のように修正すると警告が表示されなくなります。
$ jarsigner -verbose -tsa https://timestamp.digicert.com -keystore .keystore app-release-unsigned.apk shoarai