2011/09/17

[ビルド]antとProguard

過去記事:2010/09/23 16:53


「俺はミドルなんて知らねえ! アプリに生きるぜ!!」という方もおられよう。

私はeclipseが、というよりも、eclipseの自動補完とかがないととてもJavaでアプリを作ることができない。
Ctrl+Oがなかったらと思うと、そら恐ろしい。

ただ、eclipseなしでも、コマンドラインから開発はできる。
つまり、ビルドできる。
今日のAndroid Developer Blogに、Proguardを使う場合にはコマンドラインでビルドせんといかん、とあったので、Proguradはやってないけど(やれよ)コマンドラインでのビルド手順を書いておこう。

今回はWindowsでやったので、コマンドプロンプトは「>」です。



まず、プロジェクトの作成。

の前に、自分の環境を知っておこう。

> android list targets

これで、自分がビルドできるターゲット一覧が出てくる。

うちは全部はインストールしていないので、こんだけだ。

いるのは、赤文字の部分。
プロジェクト作成字に指定するのだ。

Available Android targets:

id:
1 or "android-4"

     Name: Android 1.6

     Type: Platform

     API level: 4

     Revision: 3

     Skins: HVGA (default), QVGA, WVGA800, WVGA854

id:
2 or "android-8"

     Name: Android 2.2

     Type: Platform

     API level: 8

     Revision: 2

     Skins: HVGA (default), QVGA, WQVGA400, WQVGA432, WVGA800, WVGA854

id:
3 or "Google Inc.:Google APIs:8"

     Name: Google APIs

     Type: Add-On

     Vendor: Google Inc.

     Revision: 2

     Description: Android + Google APIs

     Based on Android 2.2 (API level 8)

     Libraries:

      * com.google.android.maps (maps.jar)

          API for Google Maps

     Skins: WVGA854, WQVGA400, HVGA (default), WQVGA432, WVGA800, QVGA


> android create project --target "android-8"
   --name AntTest --path .\AntTest --activity AntTestActivity
   --package jp.typepad.hirokuma.AntTest

 

長いので改行させたが、本来は1行で書く。
実行すると、

  • --targetで指定したターゲット向けに、

  • --nameで指定したプロジェクト名で、

  • --pathに指定したディレクトリを作成し、

  • --activityで指定したアクティビティ名の、

  • --packageで指定したパッケージで

プロジェクトを作成する。

--targetは文字でなく数字でもよい。

あとは、できたディレクトリに移動して、ビルドするだけ。

> cd AntTest

> ant

お手軽。



eclipseで作ったプロジェクトと違うのは、たぶんbuild.xmlというファイルが作成されることだろう。

これに従ってantはビルドしているようだ。
たぶん、Proguardを使うときは、build.xmlに細工をするのだろうな。

「もう既にeclipseで作ったプロジェクトをantでビルドしたいんだけど…」という場合が、たぶんAndroid Developer Blogに書かれている方法だな。
うん、そうだ。
ant releaseとすると、ビルドできるな。

なになに、local.propertiesというファイルもできるので、そこにkeystoreとかを登録しておくと署名済みのapkファイルができるだと?

これも試しておくか・・・。

Windowsの場合は、パスのデリミタが\\となるので注意が必要だな。

ファイルのパスを取得することが多いので、ツールを入れておくと便利。

私はFileMenu Toolsというものを使っている。

Explorerの右クリックで「ファイルパスをコピー」ということもできるのだ。

local.propertiesを編集してからant releaseすると・・・
おお、パスワードを訊かれるようになった。
打ち込むと(「***」とはならず、普通の入力なので注意)、できたような気がする。

むむ、ちょっと待て!

2回パスワードを訊かれたので、打ち間違えたのかと思っていたのだがそうではない。

1回目はkeystoreのパスワードで、2回目はaliasのパスワードだ。

そして、keystoreのパスワードが違うとビルドエラーになるのだが、aliasの方は特に文句をいわれない。

そんなものなのか・・・?

> jarsigner -verify -verbose -certs XXX.apk

とすると、署名済みかどうかわかるそうだ。

署名はできていたのだが、aliasのパスワードは、そのときに付けるものなのか?

いや、eclipseからやると確認されるな。

うーむ。。。
まあいいや。

 

local.propertiesにProguardをインストールしたパスを追加。

パスは、proguard.jarの入っているlibまでを書かねばならん!

気付くのに時間がかかったわい。

 

次は、2つのファイルをサイトからダウンロードして、build.xmlと同じ場所に置く。

最後に、build.xmlへの編集が必要。

先頭の<?xml・・の次の行に追加。

<!DOCTYPE project [

       <!ENTITY add-proguard-release SYSTEM "add-proguard-release.xml">

]>

<project name・・・の次の行に追加。

&add-proguard-release;

これで終わりらしい。

ant releaseすると、時間がかかりながらもビルドできた。



特にLVLが入っていなくても、使えるみたいだ。

が、Blogを読むと、このまま動かしてもCRASHすることがあるらしい。

procfg.txtを編集して、-keep public classとして登録するようだ。

よくわからんので、読んでおきたまえ。

 

登録はめんどくさいなぁ。

が、やらんと動かんなら、仕方ないな。

実際に動かさないとわからんのだったら、全classを試してみないといかんことになるが、事前にわからんのかいな?

ある程度はprocfg.txtに登録してあるので、外部から呼ばれることがあるclassだけを追加すればよさそうな気がするが・・・。

 

obf/mappin.txtに、どのようにobfされたかが出ているみたいだ。

何かなと思ってみると、このクラスはこの名前に変更しました、というものみたい。

そういえば、Javaって名前がそのままファイルサイズにつながるという記事をどこかで読んだことがある。

難読化するのとサイズを小さくするのを兼ねているのだな。

とまあ、あまり興味がないわりには最後までやってみましたとさ。
めでたしめでたし。

0 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。