講道理,編譯好安卓系統以後,進行子產品修改,再重新mmm x子產品 因該是一件特别快速的事情.
問題:
在編譯android 5.0的art子產品時發現存在兩個問題:
1,無法進行單獨的子產品編譯,且提示缺少各種各樣的庫.
2,能成功編譯後,編譯速度及其緩慢.
調查:
1,根據錯誤的資訊可以發現都是形如 libgtest_host_intermediates 類似的檔案夾中缺少庫檔案,和export_includes等檔案.
2,編譯慢,肯定是編譯的東西多了,既然是編譯上的問題,直接檢視art目錄下的android.mk檔案,有衆多test有關的語句,以及test相關的mk檔案
include $(art_path)/build/Android.common_test.mk
include $(art_path)/build/Android.gtest.mk
include $(art_path)/test/Android.run-test.mk
對比,android5.x和android6.x版本的 art/Android.mk檔案
可以發現
# test rules
# host test rules
# target test rules
等test相關的編譯語句,
在仔細看android6.x中的Android.mk檔案發現多了幾行代碼
# Don't bother with tests unless there is a test-art*, build-art*, or related target.
art_test_bother := false
ifneq (,$(filter %tests test-art% valgrind-test-art% build-art%,$(MAKECMDGOALS)))
art_test_bother := true
endif
ifeq ($(art_test_bother),true)
...............
...............
endif # art_test_bother
是以,我們可以發現,test部分的編譯是可以取消,關閉的
猜測:
1,既然缺少檔案,肯定是相關部分沒有,那麼可能是 第一次make時,沒有去編譯相關的和test有關的子產品,這些子產品最可能存在的就是external目錄下了
2,編譯慢,就是多編譯了test有關的部分内容
解決:
1,根據提示查找external目錄 libcore目錄下的相關檔案,然後先編譯 這些test用到的相關子產品,當相關子產品都編譯好後,就可以編譯art子產品了.
2,直接去掉
# test rules
# host test rules
# target test rules
這三塊内容,然後編譯即可.