2011/05/04

CyanogenMod 6 froyo-stable をソースコードからビルドする

環境: Ubuntu 10.10 Desktop x86_64

CyanogenMod 6.1.1の/system/framework/framework.jar, services.jar を入れ替えるために、ソースコードからビルドした。
/syste/framework/配下のファイルの入れ替え以外は試していない。

CyanogenMod Wikiにプラットフォームごとのビルド方法が説明されている。有難い。
UbuntuとOS Xでの方法が書いてあるが、両方見た方がいいかも。


$ repo init -u repo init -u git://github.com/CyanogenMod/android.git -b froyo-stable
$ repo sync


を実行すると


error: revision master in CyanogenMod/android_device_advent_vega not found


というエラーが発生した。
.repo/manifest.xml からandroid_device_advent_vegaをコメントアウトして、再び repo sync。
これが完了したらビルドの設定。

WikiでのUbuntu上でのビルド方法には brunch bravo を実行するように書いてあったものの、このバージョンのenvsetup.shにはbrunchがないようだ。
OS X上でのビルド方法にはlaunchを実行するように書いてある。

続いてmake。frameworks/base と frameworks/base/services/java だけ部分的にmakeしたいが、モジュール間の依存関係を調べるのも面倒なのでフルビルド。

次のエラーが発生した。


(unknown): error 17: Field org.apache.http.protocol.HTTP.EXPECT_CONTINUE has changed value from "100-Continue" to "100-continue"


このスレッドを見ると、CyanogenMode 6.1.1リリースのすぐ後に修正された問題のようだ。


external/apache-http/src/org/apache/http/protocol/HTTP.java:    public static final String EXPECT_CONTINUE = "100-continue";


の 100-continue を 100-Continue に変更。

続いて次のエラーが発生した。


make: *** No rule to make target `vendor/cyanogen/proprietary/RomManager.apk', needed by `out/target/product/bravo/system/app/RomManager.apk'.  Stop.


WikiにROM Managerをダウンロードするように書いてあったが、やらなかったので出た。
ビルド中にcurlで外から取得するようになっていて、取得先のURLが見つかっていない。
CyanogenModの.zipから取り出して配置して、再びmake。

以上でmakeが完了した。
フルビルドした後はビルドしたいモジュールのディレクトリに移動して、mmコマンドを実行。

実はCyanogenModのビルドに先立って、手元にandroid git repositoryから取得したソースがあったので、それを使おうとした。
CyanogenModのframework.jarのclasses.dexをsmaliで逆コンパイルし、一部のクラスだけ置き換えたのだが、問題があった。
gitのタグandroid-2.2.1_r1とCyanogenMod 6.1.1では、android.internal.RのリソースIDが変わっていて、適切なリソースを取得できなかった。

0 件のコメント:

コメントを投稿