Android
Cordova
Crosswalk

androidアプリのapkのビルドと、リリース手順メモ

More than 1 year has passed since last update.

はじめに

cordovaを使ったアプリ開発で、初めてAndroidをリリースする為、
今後の必ず忘れると思うのでアプリのビルド方法と、リリース方法をメモしておきます。

アプリをビルド

まずリリース用のアプリをビルドする。

通常の場合

cordova build --release

crosswalkを使った場合
(プロジェクトのルートディレクトリに移動後)

cordova/build --release

プロジェクト/bin/hogehoge-release-unsigned.apkが書き出される。

ビルドする前にチェック

スマホのみに限定や、対応バージョンの設定などを確認して、設定を変更する。
インストール可能な端末を限定する

鍵を作成

keytool -genkey -v -keystore <鍵ファイル名> -alias <エイリアス名> -keyalg RSA -validity <有効期間>

下記の鍵を作成する場合。

有効期間:10000日間
鍵ファイル名:.keystore
エイリアス名:test

keytool -genkey -v -keystore .keystore -alias test -keyalg RSA -validity 10000

※鍵ファイル名は「test.keystore」のような設定も可能

鍵生成コマンド実行後、下記QAを進める。
パスワードは忘れないようにメモしておく。

・・・でよろしいですか。の後は、「y」を入力。

キーストアのパスワードを入力してください:
新規パスワードを再入力してください:
姓名は何ですか。
[Unknown]: test
組織単位名は何ですか。
[Unknown]:
組織名は何ですか。
[Unknown]:
都市名または地域名は何ですか。
[Unknown]:
都道府県名または州名は何ですか。
[Unknown]:
この単位に該当する2文字の国コードは何ですか。
[Unknown]:
CN=asumo, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=Unknownでよろしいですか。
[いいえ]:y
testの鍵パスワードを入力してください
(キーストアのパスワードと同じ場合はRETURNを押してください):

鍵の確認方法

keytool -list -v -keystore <鍵ファイル名> -storepass <パスワード>

署名を作成する

署名を作成し、鍵、アプリを紐付ける。

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

下記の署名を作成する場合。

鍵ファイル名:.keystore
エイリアス名:test
apk名:test-release-unsigned.apk
※apkは、binディレクトリ内にあり、鍵ファイルの階層とは別にある

jarsigner -verbose -keystore .keystore ./bin/test-release-unsigned.apk test

署名作成後に下記警告が発生する場合がある。

警告:
-tsaまたは-tsacertが指定されていないため、このjarにはタイムスタンプが付加されていません。タイムスタンプがないと、署名者証明書の>有効期限(2042-12-15)後または将来の失効日後に、ユーザーはこのjarを検証できない可能性があります。

解決方法

下記を追加する

-tsa http://timestamp.digicert.com

こちらのコマンドを実行

jarsigner -verbose -tsa http://timestamp.digicert.com -keystore <鍵ファイル名> <apkファイル> <エイリアス名>

署名の確認方法

jarsigner -verify -verbose -certs <apkファイル>

アプリを最適化する

zipalignコマンドで最適化する

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

もし下記のエラーがでた場合、Android SDK ManagerからBuild-toolsをインストールする。

bash: zipalign: command not found

私の場合下記にzipalignコマンドがありました。

/Applications/adt-bundle-mac-x86_64-20140702/sdk/build-tools/2X.XX/zipalign

なぜ最適化する必要があるのか?

下記から引用

Androidにおいてなぜzipalignをやる必要があるのか

配布するapkファイルはzipalignコマンドで最適化する事が推奨されており、
最適化されていないapkファイルをgoogleのディベロッパーコンソールでアップしようとすると警告が出る。

アプリが最適化されているか確認する

最適化されていれば、「Verification succesful」と表示される。

zipalign -c -v 4 <apkファイル>

リリースファイルを実機で確認

リリースビルドしたファイルは、リリース前に実機でも必ず確認する。

Google Play デベロッパー コンソールにログイン

Google Play デベロッパー コンソール

Google Playに必要情報を入れていきます。

①アプリの追加

メニューの「すべてのアプリのページ>新しいアプリを追加」を押す

新規アプリを追加する

タイトル(アプリ名)入力して「ストアの掲載情報を準備」を押す

すべてのアプリ   Google Play Developer Console.png

②ストアの掲載情報、コンテンツのレーティング、価格と販売配布地域を入力する

ストアの掲載情報   asumo   Google Play Developer Console.png

③apkファイルをアップ

メニューの「APK>製品版」を押し、「製品版に最初のAPKをアップロード」を選択。

APK   asumo   Google Play Developer Console.png

④アプリを公開

APK   asumo   Google Play Developer Console.png

必要情報が全て入力済みの場合、アプリを公開が活性化します。
アプリを公開ボタンをクリックすると2時間ほどでgoogle Playに表示されます。

アプリを公開が非活性の場合は、「公開できない理由」を参考に必要情報を入力します。

■注意

通常の「標準公開」の場合は、公開処理後すぐにgoogle Playに公開されます。
すぐに公開したくない場合は、「時限公開」を選択してください。
下記が参考になります。

Google Play Developer Consoleの時限公開機能を試してみた

arm/x86のapkファイルを同じアプリでリリースする

今回一番調べたかったのはこれです。

crosswalkでビルドする際に、armとx86で別々にビルドする必要あります。
その際に、同一のアプリとして複数のapkを登録するには、
apkを登録時にアドバンスモードで登録します。

複数登録すると下記のようになります。
キャプチャのメッセージにあるように、armとx86の両方に対応している端末は、versionCodeの高いものが優先されます。
下記の場合はx86が優先されます。

APK   エレファンタ・スティックアタック7   Google Play Developer Console.png

シンプルモードの場合、versionCodeが高いものが優先されて公開され、
versionCodeの低いものは無効となります。

その他

◎versionCodeについて

AndroidManifest.xmlに定義されているversionCodeは、アプリをアップデートする際は必ず前回より大きくなっていなければならない。
付け方に特に決まりはなく、下記のようなドットで区切ったものでも大丈夫。

android:versionCode="1.1" 

追記

versionCodeをドットで区切った場合、下記のエラーが発生しました。

Error: Float types not allowed (at 'versionCode' with value '1.2').

◎アプリのアイコン書き出しに便利なツール

MakeAppicon