2012年8月6日

Androidのアプリをコンパイル。

ガラッと話を変えて

前回までWindows8だのWebSitesだのの話だったのですが、ガラッと話を変えて。
Androidの開発の話です。

バージョン番号に苦しむ

Androidは活発に開発が行われている、ということもあり、Androidシステムのバージョンアップの開発サイクルが速いです。
なので、気が付くとSDKのバージョンが最新版といくつかずれていたりします。

今回のお仕事もそんな感じから始まりました。

先日、久しぶりにAndroid SDKのバージョンを上げてみました。
SDK tools16位までは追いかけていた記憶があるのですが…。
バージョンを挙げてみると、SDK tools19でした。
……。結構上がってるなー。とは思ったのですが。

今日、androidコマンドを起動してバージョンアップすると、20がインストールされ。
再度androidコマンドを起動すると20.0.1にバージョンアップされ。
eclipseを起動すると20.0.2にバージョンアップされ。
と、3度のバージョンアップの洗礼を受けてしまいました。なんですか。これ。

結局コンパイルできない

結局、持ってこられたソースはSDK9で、インストールしていないものでした。
SDK7,8,10とインストールしてたんですけどねー。
そして、Eclipseからは「android-9でコンパイルできない」と怒られ。
SDK9をインストールしても解消せず。
もう面倒なのでコマンドラインでコンパイルすることに。

Eclipseプロジェクトからコマンドラインコンパイルへ変換方法

Eclipseのプロジェクトとコマンドラインコンパイルのプロジェクトはほとんど同じですが、微妙に違うところがあるんです。
まず、コマンドラインコンパイルでは、local.propertiesとか、build.xmlとかのファイルが必要になってきます。

実は、androidのコマンドラインでのコンパイルはantを使用してコンパイルを行います。
そのantに喰わせるファイルがbuild.xmlというファイルなんですが、Javaファイルのみなら苦労しなくても、androidにはリソースがあります。
これらの位置やSDK自体の位置を記録しておくものが必要なんですね。
local.propertiesファイルにそれらが記録されます。

で、これらのファイルの作成方法なのですが。
これらは実はandroidコマンドで自動作成させることが可能だったりします。

android update project -p .

上記のコマンドを実行すると、カレントディレクトリのeclipseプロジェクトを参考に、コマンドラインからコンパイルできるプロジェクトを構築してくれます。
上記のコマンドを実行した後、コンパイルを実行するには以下のコマンドを実行すればapkファイルが出来上がります。



ant debug


ちなみに、上記のデバッグコンパイルだと、端末インストールはやってくれないので、下記コマンドでインストールしてやる必要があったりします。


adb install -r bin/test-debug.apk

それでもコンパイルがうまくいかない


理由は簡単で、コマンドラインのプロジェクトは複数のソースルートディレクトリがあってもコンパイルできるソースルートは1つだけ、という制約があるのです。
本来ならソースルートとなるのはsrcディレクトリなのですが、それをsrc-commonとかsrc-resとかに分けている状態のものがあります。
(BS!あんただあんた!w)


そういうものだと、別のライブラリプロジェクトにしたり、面倒くさいのでソースを1つのディレクトリにまとめたりして何とかコンパイルさせるわけです。


でも、たまには別のシステムを触るのは頭の体操になって楽しいです。

0 件のコメント:

コメントを投稿