Help us understand the problem. What is going on with this article?

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

More than 3 years have 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

nogson
へっぽこデザイナーです。
https://satofaction.net/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away