AndorindでAPKファイルにコンパイルする方法メモ

apktoolから以下の2つのファイルをダウンロードしてくる。

  • apktool1.5.2.tar.bz2(2013/11/19時点)
  • apktool-install-linux-r05-ibot.tar.bz2(2013/11/19時点)

http://ocotooo.blogspot.jp/

2つのファイルを解凍する。

$bzip2 -dc apktool1.5.2.tar.bz2 | tar xvf -
$bzip2 -dc apktool-install-linux-r05-ibot.tar.bz2 | tar xvf

それぞれディレクトリ構成は、

  • apktool
    /apktool1.5.2/apktool.jar
  • apktool-install-linux-r05-ibot
    /apktool-install-linux-r05-ibot/aapt
    /apktool-install-linux-r05-ibot/apktool

apktool.jarとapktoolを同一ディレクトリに格納。
ついでにapktoolを分かりやすいようにapktool.shとかにrenameしておく。
ここでは、ディレクトリを/home/xxx/apktool/とする。

  • /home/xxx/apktool/apktool.jar
  • /home/xxx/apktool/apktool.sh

apkをデコンパイルする
上記のディレクトリにapkをおいて以下のコマンドを実行

$./apktool.sh d old.apk

すると apkがデコンパイルされ、old ディレクトリが作成される。

AndroidManifest.xmlを修正する。
old ディレクトリの中にあるAndroidManifest.xmlを思うがままに修正する。

コンパイルする
以下のコマンドを実行

$./apktool.sh b old new.apk

すると new.apk が作成される。

apkに署名する
署名に必要な非公開鍵の生成と管理を行うにはkeytoolが必要。
keytoolを使ったキーストアファイル(.keystore)の作成と非公開鍵(=キー)の生成の仕方は省略。

ってことで、.keystoreを使って以下のコマンドで署名を行う。

jarsigner -sigalg SHA1withDSA -digestalg SHA1 -verbose -signedjar <署名後のapk名> -keystore <キーストアファイルへのパス> <署名前のapk名> <キーストアのalias>

すると、無事署名されたapkが出来上がる。