以前の記事で IDE を使わずに Android アプリ開発プロジェクトを構築する方法をみました。 今回はそのプロジェクトから署名された apk ファイルを生成する方法を見ていきます(一覧)。
記事概要:
- (必要なら)鍵の生成 (keytool)
- 鍵の設定 (build.properties)
- apk ファイルの生成 (ant release)
- 警告あれこれ
以下、プロジェクトのルート・フォルダは「$PROJECT_HOME」とします。
鍵の生成
まずはキーストアと鍵の生成。 既にあるキーストアを使う場合は、このステップを実行する必要はありません。 キーストアと鍵を生成するには JDK に付属する「keytool」を使用します。 詳しい使い方は
などを参照。 コマンド・プロンプト(以下 Windows 前提)のカレントフォルダ下に「.keystore」というファイル名のキーストア
- $PROJECT_HOME/.keystore
を生成するためには以下のようにします(alias の waman は適当に変更してください):
keytool -genkey -alias waman -keystore .keystore
個々のプロジェクトに依らないキーストアを作成したい場合は -keystore オプションを指定せずに
keytool -genkey -alias waman
と実行すれば、
- C:/Documents and Settings/●●●●/.keystore (= ${user.home}/.keystore)
というキーストアが生成されます。 ここで「●●●●」はユーザー名です。
鍵設定
次は、ビルドに使用する Ant にキーストアを知らせる設定です。 Ant によって読み込まれる設定ファイル
- $PROJECT_HOME/build.properties
に以下のプロパティを設定します($PROJECT_HOME にキーストア「.keystore」を生成した場合):
key.store=.keystore key.alias=waman
上記でキーストアのファイルを指定せずに鍵を生成した場合、以下のようにパス区切り文字 \(円記号)をエスケープする必要あり:
key.store=C:\\Documents and Settings\\●●●●\\.keystore key.alias=waman
ちなみに、同ファイルで apk ファイルを出力するフォルダを指定する「out.dir」も設定できますが、これをプロジェクトのルートフォルダに指定する(out.dir=.)と、「ant clean」を実行した際にカレントフォルダ下の全てのファイル、フォルダが削除されてしまいます・・・Oh, my god!
apk ファイルの生成
上記の設定ができれば apk ファイルを生成するのは簡単で、プロジェクトのルートフォルダ上で以下のコマンド
ant release
を実行するだけです。
Buildfile: C:\idea\HelloAndroid\build.xml [setup] Android SDK Tools Revision 10 [setup] Project Target: Android 2.3.3 [setup] API level: 10 [setup] [setup] ------------------ [setup] Resolving library dependencies: [setup] No library dependencies. [setup] [setup] ------------------ [setup] [setup] [setup] Importing rules file: tools\ant\main_rules.xml -set-release-mode: -release-obfuscation-check: -pre-build: -dirs: [echo] Creating output directories if needed... -aidl: [echo] Compiling aidl files into Java classes... -renderscript: [echo] Compiling RenderScript files into Java classes and RenderScript bytecode... -resource-src: [echo] Generating R.java / Manifest.java from the resources... -pre-compile: compile: [javac] Compiling 1 source file to $PROJECT_HOME\bin\classes -post-compile: -obfuscate: -dex: [echo] Converting compiled files and external libraries into $PROJECT_HOME\bin\classes.dex... -package-resources: [echo] Packaging resources [aapt] Creating full resource package... -package-release: [apkbuilder] Creating HelloAndroid-unsigned.apk for release... -release-prompt-for-password: [input] Please enter keystore password (store:.keystore): ●●●●●●●●《キーストアのパスワードを入力》 [input] Please enter password for alias 'waman': ●●●●●●●●《鍵パスワードを入力》 -release-nosign: release: [echo] Signing final apk... [signjar] Signing JAR: $PROJECT_HOME\bin\HelloAndroid-unsigned.apk to $PROJECT_HOME\bin\HelloAndroid-unaligned.apk as waman [signjar] [signjar] 警告: [signjar] 署名者の証明書は 6 か月以内に期限切れになります。 [signjar] キーストアのパスワードを入力してください: [echo] Running zip align on final apk... [echo] Release Package: $PROJECT_HOME\bin\HelloAndroid-release.apk BUILD SUCCESSFUL Total time: 26 seconds
途中で「キーストアのパスワード」と「鍵パスワード」の入力を求められます。 この実行が成功すると、以下の apk ファイルが生成されます:
- $PROJECT_HOME/bin/HelloAndroid-release.apk
警告あれこれ
「ant release」を実行するといくつか警告が表示されることがありますが、その対処法を簡単に見ていきます。
minSdkVersion
「minSdkVersion」が設定されていないと以下の警告メッセージが表示されます:
[setup] WARNING: No minSdkVersion value set. Application will install on all Android versions.
「minSdkVersion」を設定するには
- $PROJECT_HOME/AndroidManifest.xml
に以下のような <uses-sdk> ノードを設定します:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" ...> <application> ... </application> <uses-sdk android:minSdkVersion="10"/> </manifest>
debuggable=true
プロジェクトが「デバッグ可能」に設定されていると、以下のような警告が表示されます:
-set-release-mode: [echo] ************************************************* [echo] **** Android Manifest has debuggable=true **** [echo] **** Doing DEBUG packaging with RELEASE keys **** [echo] ************************************************* ... [aapt.exe] Warning: AndroidManifest.xml already defines debuggable (in http://schemas.android.com/apk/res/android); using existing value in manifest.
「デバッグ可能」を設定するには、これまた
- $PROJECT_HOME/AndroidManifest.xml
で設定をします。 この XML ファイルの /manifest/application ノードの @debuggable 属性の値を変更します:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" ...> <application ... android:debuggable="false">...</application> </manifest>
属性自体を削除しても構いません。
'includeantruntime' was not set
Ant で普通にビルドを行うと以下のような警告が発せられます:
[javac] C:\android\android-sdk-windows\tools\ant\main_rules.xml:384: warning: 'includeantruntime' was not set, defaulting to build.sysclasspath=last; set to false for repeatable builds
これは設定の問題ではないようですが(→)、そのままにしておくのは気持ち悪ければ、この警告を消す設定をしておきましょう。 これはプロジェクトの設定ファイルではなく、ANDROID_HOME 下のファイルを設定する必要があります。 以下のファイル
の compile ターゲットの javac タスク(377行目)に以下の属性を付加します:
<javac ... includeantruntime="false">
- 作者: Ed Burnette,日本Androidの会(監訳),長尾高弘
- 出版社/メーカー: オライリージャパン
- 発売日: 2011/01/27
- メディア: 大型本
- 購入: 2人 クリック: 486回
- この商品を含むブログ (18件) を見る
- 作者: Steve Holzner,長瀬嘉秀(監訳),株式会社テクノロジックアート
- 出版社/メーカー: オライリージャパン
- 発売日: 2005/11/18
- メディア: 大型本
- 購入: 2人 クリック: 20回
- この商品を含むブログ (18件) を見る