http://quanminchaoren.iteye.com/blog/836905
此文不同于官方文檔給出的方案,之所以如此,基于以下考慮幾點(diǎn)考慮:我們之所以拿源碼進(jìn)行增量開發(fā),一般而言,不是為了整個(gè)工程,而是為了其中某個(gè)特定的模塊,比如說(shuō) Contacts , Luancher 等;其次,官方方案有一個(gè)巨大的缺陷——優(yōu)化后的模塊打包成 apk 很有可能無(wú)法在其他系統(tǒng)上安裝,因?yàn)樗邢到y(tǒng)權(quán)限,并且一直簽 rom 的簽名,而這個(gè)簽名在其他系統(tǒng)上是拿不到的。換句話說(shuō),除非你想做嵌入式,否則別這么干。
具體步驟:
編譯源碼:由于這些模塊依賴的包中有一部分是不開放的,所以,只能把整個(gè)源碼編譯一遍,然后拿出相關(guān)的 jar 包。
關(guān)于如何編譯源碼網(wǎng)上有很多說(shuō)明,都是用 git 把源碼下載下來(lái)( 4G 左右),然后配下相應(yīng)的編譯環(huán)境。請(qǐng)參照: Justin 的 Build Android Platform 。通常會(huì)遇到一些錯(cuò)誤,編譯停止,這些錯(cuò)誤通常都是一些庫(kù)函數(shù)找不到,這時(shí)候你只需要將相應(yīng)的庫(kù)函數(shù)下載下來(lái),也就是完善一下你的編譯環(huán)境,比如說(shuō)這個(gè)錯(cuò)誤:“
/usr/bin/ld: cannot find -lz
collect2: ld returned 1 exit status
make: *** [out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/aapt] Error 1
”
這個(gè)錯(cuò)誤我曾經(jīng)試了很多種方法,最后才發(fā)現(xiàn)就是
缺少 lib32z1-dev, 安裝即可 :apt-get install lib32z1-dev
源文檔 < http://0123.blog.163.com/blog/static/47883120101024104416786/ >
所以,如果有相應(yīng)的錯(cuò)誤,就把 cannot find 后面那個(gè)東西,去掉“ -l ”,也就是相應(yīng)的庫(kù)函數(shù)了,如上面就是缺少了 z 函數(shù)。然后上網(wǎng)搜。
另外,據(jù)說(shuō)我比較好運(yùn)用的是 64 位系統(tǒng) Ubuntu ,且內(nèi)存比較大, CPU 也比較 OK ,所以編譯時(shí)錯(cuò)誤比較少,編譯時(shí)間也比較短,大概 1 個(gè)鐘,而一般來(lái)說(shuō)都要 2 個(gè)鐘,所以大家做好心理準(zhǔn)備。
有相關(guān)編譯問(wèn)題請(qǐng)咨詢: ernest.he2009@gmail.com
開始 Eclipse 之旅:
找到相關(guān) jar 包,這個(gè)你如果熟悉 Java 肯定很容易就知道, Android 中不開放的包一般在 frameworks 底下很容易找到,具體路徑就是: out/target/common/obj/JAVA_INTERMEDIATE/frameworks_intermediate ,拿到 class.jar 就可以了。但是在 Contacts 中比較特殊,需要另一個(gè) phone 包,這個(gè)一樣可以拿到。
關(guān)鍵是拿到之后怎么辦的問(wèn)題。處理不當(dāng)就會(huì)造成 Eclipse 掛掉。這里就需要通過(guò) User Libraries 來(lái)解決(參照下面的解決方案)。
這樣開發(fā)環(huán)境建立起來(lái)以后就是編譯了。為了能夠成功編譯運(yùn)行。請(qǐng)參照以下解決方案:
解決方案 。