下面的內容是在看過了很多的文章還有經過了很多的嘗試之後得出的總結, 也作為自己以後可能重複這個過程的筆記.
從哪裡引用到的內容都加上連結了.歡迎大家討論.
首先下載並編譯Android源碼是必須的, 這就要求你必須要安裝Linux, 我自己用的是Ubuntu 11.04,
在虛擬機器裝Ubuntu的話, 我給1個G的記憶體而已, 感覺已經是足夠了, 不像網上說的需要至少1.5個G,
因為我的記憶體只有2G,如果分給虛擬機器1.5的話,反而會卡得完全動不了.
而且整個過程我都是在root下執行的, 如果不是root, 建議使用sudo -sH來進行以下所有操作.
雖然官方是要求64位的作業系統才能編譯, 但是我用的是32位的, 如何修改我會在下文說明.
還有一個問題是只有用Ubuntu 11.04這個特定版本編譯的時候才會出現的,不知道會不會在新版的源碼已經被修複了,
具體如何repo擷取源碼網上到處都是教程,我就不說了.嚴格按官方的教程來是沒問題的.
另外提醒一點,repo的時候用參數 "-j 數字" 可以使用多線程下載.
需要注意的一點的還有很多教程還在說必須用JDK1.5 編譯源碼, 1.6編譯SDK之類的,
其實是已經不需要了, 最新版的Android 只要直接裝sun-java6-jdk就好了. (apt-get找不到就更新你的源或者直接去官網下)
然後如果你用的是32位的Linux, 編譯之前必須做如下修改:
將
./external/clearsilver/cgi/Android.mk
./external/clearsilver/java-jni/Android.mk
./external/clearsilver/util/Android.mk
./external/clearsilver/cs/Android.mk
四個檔案中的
LOCAL_CFLAGS += -m64
LOCAL_LDFLAGS += -m64
注釋掉,或者將“64”換成“32”
LOCAL_CFLAGS += -m32
LOCAL_LDFLAGS += -m32
然後,將
./build/core/main.mk 中的
ifneq (64,$(findstring 64,$(build_arch)))
改為:
ifneq (i686,$(findstring i686,$(build_arch)))
做完以上修改之後, 就可以開始編譯源碼了, cd到源碼根目錄下, 打"make". 然後去看場電影吧. 回來就編好了..
這一步會在android/out/target/product/generic/下面生產3個尾碼為img的檔案,建議拷貝一份出來吧,
我就遇到過這幾個檔案莫名消失結果需要重新make的情況.
如果你跟我一樣只需要自己修改並編譯和測試系統app, 是不需要make sdk這一步的
然後工作之前需要配置一下環境變數:
gedit ~/.bashrc 注意修改成你自己放源碼的路徑, 將以下2行添加到檔案末尾:
export PATH=$PATH:/home/xxx/android/out/host/linux-x86/bin
export ANDROID_PRODUCT_OUT=/home/xxx/android/out/target/product/generic
最後記得執行一下
source ~/.bashrc
並且在源碼根目錄下執行一下:
. build/envsetup.sh
會幫你啟用幾個新的命令.比如下面我們要用到的"mmm"
然後就可以去修改你想要修改的系統app了, 全部都在android/packages下面.
具體修改的例子我會另外寫一個文章來說,這次先說整個流程吧.
比如我修改的是系統的英文IME, 位於android/packages
修改完後直接在android目錄下執行, 指定到包含有Android.mk檔案的目錄就對了 :
mmm packages/imputmethods/LatinIME/
很快就會編譯好了
(千萬不要在根目錄不加任何參數直接執行"mmm",不然你會後悔的,這等同於之前花了好長時間的"make")
然後就要把編譯好的檔案安裝到模擬器中, 你可以之前就啟動了模擬器, 也可以現在才啟動, 都可以的,
安裝前後也不需要重啟模擬器, 執行了adb install 直接可以看到效果.
啟動模擬器可以在android/out/target/product/generic/ 下直接執行這個命令:
emulator -image system.img -data userdata.img -ramdisk ramdisk.img
然後用這個命令把自己編譯好的apk檔案傳入模擬器:
adb install -r /home/xxx/android/out/target/product/generic/system/app/***.apk
到這裡基本就可以實現整個修改和調試系統app的流程啦,
其實前面都是一勞永逸的環境配置工作,實際上一直要用到的就是mmm和adb install -r 這兩個命令而已
因為有些系統app涉及到jni的部分, 在Eclipse下面查看項目是會出錯的, 我也不知道怎麼實現在Eclipse正常調試,
所以只能是在文字編輯器裡直接修改再install到模擬器裡查看效果.