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 件のコメント:
コメントを投稿