##はじめに
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に必要情報を入れていきます。
####①アプリの追加
メニューの「すべてのアプリのページ>新しいアプリを追加」を押す
新規アプリを追加する
タイトル(アプリ名)入力して「ストアの掲載情報を準備」を押す
####②ストアの掲載情報、コンテンツのレーティング、価格と販売配布地域を入力する
####③apkファイルをアップ
メニューの「APK>製品版」を押し、「製品版に最初のAPKをアップロード」を選択。
必要情報が全て入力済みの場合、アプリを公開が活性化します。
アプリを公開ボタンをクリックすると2時間ほどでgoogle Playに表示されます。
アプリを公開が非活性の場合は、「公開できない理由」を参考に必要情報を入力します。
#####■注意
通常の「標準公開」の場合は、公開処理後すぐにgoogle Playに公開されます。
すぐに公開したくない場合は、「時限公開」を選択してください。
下記が参考になります。
##arm/x86のapkファイルを同じアプリでリリースする
今回一番調べたかったのはこれです。
crosswalkでビルドする際に、armとx86で別々にビルドする必要あります。
その際に、同一のアプリとして複数のapkを登録するには、
apkを登録時にアドバンスモードで登録します。
複数登録すると下記のようになります。
キャプチャのメッセージにあるように、armとx86の両方に対応している端末は、versionCodeの高いものが優先されます。
下記の場合はx86が優先されます。
シンプルモードの場合、versionCodeが高いものが優先されて公開され、
versionCodeの低いものは無効となります。
##その他
###◎versionCodeについて
AndroidManifest.xmlに定義されているversionCodeは、アプリをアップデートする際は必ず前回より大きくなっていなければならない。
付け方に特に決まりはなく、下記のようなドットで区切ったものでも大丈夫。
android:versionCode="1.1"
####追記
versionCodeをドットで区切った場合、下記のエラーが発生しました。
Error: Float types not allowed (at 'versionCode' with value '1.2').
###◎アプリのアイコン書き出しに便利なツール
MakeAppicon