標籤:
Android 編譯完成後,將在根目錄中產生一個out檔案夾,所有產生的內容均放置在這個檔案夾中。
out檔案夾如下所示:
out/
-- CaseCheck.txt
-- casecheck.txt
-- host //表示在主機(x86)產生的工具
-- common
-- linux-x86/darwin-x86
-- target(表示目標機,如果編譯時間候定義TARGET_STRIP_MODULE=false的話,這個目錄為debug/target)
-- common
-- product
主要的兩個目錄為host和target,前者表示在主機(x86)產生的工具,後者表示目標機(預設為ARMv5)啟動並執行內容。
host目錄的結構如下所示:
out/host/
-- common
-- obj(JAVA庫)
-- linux-x86/darwin-x86
-- bin(二進位程式)
-- framework(JAVA庫,*.jar檔案)
-- lib(共用庫*.so)
-- obj(中間產生的目標檔案)
host目錄是一些在主機上用的工具,有一些是二進位程式,有一些是JAVA的程式。
target目錄的結構如下所示:
out/target/
-- common //表示通用的內容
-- R (資源檔)
-- docs
-- obj (目標檔案)
-- product //針對產品的內容
-- generic
其中common目錄表示通用的內容,product中則是針對產品的內容。
在common目錄的obj中,包含兩個重要的目錄:
out/target/obj/
--APPS (包含了JAVA應用程式產生的目標,每個應用程式對應其中一個子目錄,將結合每個應用程式的原始檔案產生Android 應用程式的APK包)
--JAVA_LIBRARIES (包含了JAVA的庫,每個庫對應其中一個子目錄)
在預設的情況下,Android 編譯將產生generic目錄,如果選定產品還可以產生其他的目錄(根據預先設定的產品名命名)。
generic包含了以下內容:
out/target/product/generic/
-- data (存放資料的檔案系統)
-- obj(目錄中包含了各種JAVA應用,與common/obj/APPS相對應,但是已經打成了APK包)
-- root
-- symbols
-- system(主要的檔案系統)
-- Android -info.txt
-- clean_steps.mk
-- ramdisk.img
-- system.img
-- userdata.img
--userdata-qemu.img
obj/SHARED_LIBRARIES中存放所有動態庫。
obj/STATIC_LIBRARIES中存放所有靜態庫。
幾個以img為結尾的檔案是幾個目標映像檔案,其中ramdisk是作為記憶體盤的根檔案系統映像,system.img是主要檔案系統的映像,這是一個比較大的檔案,userdata.img是資料內容映像。userdata-qemu.img是模擬器使用的資料檔案,一般不用userdata.img,只有-wipe-data時才用到userdata.img。這幾個image檔案是運行時真正需要的檔案。
Android 原始碼編後的目錄分析