天天看點

android5.0 子產品編譯--art的子產品編譯小發現

講道理,編譯好安卓系統以後,進行子產品修改,再重新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

這三塊内容,然後編譯即可.

繼續閱讀