主機是fedora 14 linux核心2.6.35.6 swapon交換分區1.5G make -version 3.81(官方指定的make版本)jdk 1.6
磁碟預留空間大概需要大於13G
具體的編譯步驟可參考
Fedora 15編譯Android原始碼
Android4.0.1 源碼下載,模擬器編譯和運行
問題1:
out/host/common/obj/JAVA_LIBRARIES/clearsilver_intermediates/classes)Unrecognized option : 9999999make: ***[out/host/common/obj/JAVA_LIBRARIES/clearsilver_intermediates/javalib.jar]Error 41解決:安裝jdk,並正確設定環境變數,具體參考上面列出的第一篇文章問題二:缺少libgl1的包解決:在fedora下使用 yum install mesa-libGL-devel即可問題三:
Processing target/product/generic/dex_bootjars/system/framework/core.jar+ n s# Z5 J5 e8 j/ M. L) w. c( f
host/linux-x86/bin/dexopt: error while loading shared libraries: libdvm.so: cannot enable executable stack as shared object requires: Permission denied
解決:是使用的系統 fedora的問題,在fedora中suselinux預設設定了一些許可權
在這裡可以通過執行 setsebool allow_execstack=1
問題四:
/usr/bin/ld: note: 'XInitThreads' is defined in DSO /usr/lib/libX11.so.
6 so try adding it to the linker command line
/usr/lib/libX11.so.6: could not read symbols: Invalid operation
collect2: ld returned 1 exit status
解決:
在檔案development/tools/emulator/opengl/host/renderer/Android.mk中加入
LOCAL_LDLIBS += -lX11
問題五:out of memory 或者是 collect2: ld terminated with signal 9 [Killed]
解決:android在後面的編譯階段記憶體佔用量很高,如果沒有設定swap交換分區,或者分區太小都會導致上述錯誤 ,
# dd if=/dev/zero of=/opt/other/swapfile bs=1024 count=1536K
# mkswap /opt/other/swapfile
# swapon /opt/other/swapfile
# swapon -s
Filename Type Size Used Priority
/opt/other/swapfile file 1572860 0 -1
問題六:acp: file 'out/host/linux-x86/obj/EXECUTABLES/vm-tests_intermediates/tests/data' does not exist
解決:在相應位置建立data目錄即可(我在第一次編譯的時候遇到了這個問題,按照此方法解決後又出現其他問題,刪除out目錄後重新編譯,沒有出現此問題及後續問題)
問題七:llvm-rs-cc:permission denied
解決:你可以到相應檔案夾下 out/host/linux-x86/bin/llvm-rs-cc,查看此檔案,即使你將所有許可權有效,在運行會出現cannot execute binary file llvm-rs-c c,我沒有找到解決辦法,只是把out目錄刪除,重新編譯就沒有出現此問題。也沒有出現上面的問題六。
倒騰了兩天,終於是編出來了。貌似android的編譯不是每次編譯都是一樣的,所有有人一次成功,還有人要糾結很久。貼圖一張,祝大家成功阿!
問題八:修改android代碼的過程中再進行編譯出現You
have tried to change the API from what has been previously approved.(修改了frameworks/base)
解決:make update-api
問題九:當想測試一個內建的應用程式時,使用mmm編譯packages/experimental/xxx檔案夾,會在generic/system/app下產生apk檔案以及同名的xxx.odx檔案,但是這個apk檔案是不可以直接安裝的,安裝時出錯。logcat會顯示does not include classes.dex。
解決:‘發現Android的ROM中有很多odex檔案,相對於APK中的dex檔案而言這個odex有什麼作用呢? Android123提示大家,如果你仔細觀察會發現檔案名稱時一一對應的,同時那些對應的apk檔案中沒有dex檔案。這樣做可以使其廠商保證一定的反盜版,因為沒有沒有dex檔案的apk是無法正常安裝的,而廠商直接將odex和不完整的apk檔案放到手機rom固化到/system/bin中可以讓一般使用者無法正常匯出使用。’其實含有dex的檔案在generic/obj/APPS下面的xxx_intermediates檔案夾下,下面的xx.apk.unaligned和xxx.apk.unsingned是包含dex是可以安裝的。