Androidアプリの署名をantで行う方法

Android

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

Android開発でリリースビルドをしたファイルに署名と最適化を行いますが
antでできるようにしました。手順をメモします。

[前提]
JDK、android SDK、antはインストール済みです。
使ったバージョンは以下になります。
JDKはJava SE 6 Update 24
android SDKは2.3
antは1.8.2

以下のフォルダにパスが通して下さい。
JDK内のbinフォルダ
android SDK内のtoolsフォルダ
ant内のbinフォルダ

以下のコマンドでコマンドラインからandroidプロジェクトを作成します。
コマンドラインでプロジェクトを作成する理由はbuild.xmlが自動的に生成されるからです。

android create project --target [ターゲットのID] --name [プロジェクト名]
--path [プロジェクトフォルダのパス] --activity [アクティビティ名] 
--package [パッケージ名]

プロジェクトが作成されたらbuild.xmlが中にあります。
ターゲットのIDが分からない場合は以下のコマンドで分かります。

android list targets

次は署名に使うキーストアを以下のコマンドで作成します。
keytoolはJDKに含まれているツールです。
このコマンドは対話式でキーストアのパスワードとエイリアスのパスワードを聞かれるので入力したパスワードを覚えておいて下さい。
暗号化アルゴリズムはデフォルトで1024ビットのDSAになってますが変更したい人はオプションで変更できます。

keytool -genkey -v -keystore [キーストアファイル名] 
-alias [キーストア別名] -validity [有効期限の日数]

鍵ができたらキーストアファイルをプロジェクトの直下に移動します。
次にbuild.xmlと同じ場所にあるbuild.propertiesを開いて以下の情報を入力します。

key.store=[キーストアファイル名]
key.store.password=[キーストアのパスワード]
key.alias=[キーストア別名]
key.alias.password=[キーストア別名のパスワード]

準備ができたのでbuild.xmlのフォルダまで移動して
以下のコマンドでビルドします。

ant release

以下のように表示されてbinフォルダ内に[プロジェクト名]-release.apk
という名前のファイルができていれば成功です。

Buildfile: c:\ant-sample\build.xml
    [setup] Android SDK Tools Revision 8
    [setup] Project Target: Android 2.2
    [setup] API level: 8
    [setup]
    [setup] ------------------
    [setup] Resolving library dependencies:
    [setup] No library dependencies.
    [setup]
    [setup] ------------------
    [setup]
    [setup] WARNING: No minSdkVersion value set. Application will install on all
 Android versions.
    [setup]
    [setup] Importing rules file: tools\ant\main_rules.xml

-set-release-mode:
-release-obfuscation-check:

-dirs:
     [echo] Creating output directories if needed...

-pre-build:

-resource-src:
     [echo] Generating R.java / Manifest.java from the resources...

-aidl:
     [echo] Compiling aidl files into Java classes...

-pre-compile:

compile:
    [javac] C:\android-sdk-windows\tools\ant\main_rules.xml:361: warning: 'inclu
deantruntime' was not set, defaulting to build.sysclasspath=last; set to false f
or repeatable builds
    [javac] Compiling 1 source file to c:\ant-sample\bin\classes

-post-compile:

-obfuscate:

-dex:
     [echo] Converting compiled files and external libraries into c:\ant-sample\
bin\classes.dex...

-package-resources:
     [echo] Packaging resources
     [aapt] Creating full resource package...

-package-release:
[apkbuilder] Creating SampleProject-unsigned.apk for release...

-release-prompt-for-password:

-release-nosign:

release:
     [echo] Signing final apk...
  [signjar] Signing JAR: c:\ant-sample\bin\SampleProject-unsigned.apk to c:\ant-
sample\bin\SampleProject-unaligned.apk as sample-store
  [signjar] キーストアのパスワードを入力してください:
     [echo] Running zip align on final apk...
     [echo] Release Package: c:\ant-sample\bin\SampleProject-release.apk

BUILD SUCCESSFUL
Total time: 4 seconds

以下のファイルは再利用できるので他のプロジェクトフォルダ直下にコピーして
build.xmlの2行目にプロジェクト名を入れるところがあるのでそこを修正します。
①build.xml
②build.properties
③local.properties
④キーファイル

AWS Cloud Roadshow 2017 福岡