现在的位置: 首页 > 综合 > 正文

Android编译顺序

2014年09月18日 ⁄ 综合 ⁄ 共 7153字 ⁄ 字号 评论关闭

引言:

编译android时,第一个编译的是jsr305lib,一直很好奇,终于有时间分析下原因了;

拷贝到本地,设置为不自动换行,阅读跟方便;

第一部分:整体次序
1 .PHONY: droid
DEFAULT_GOAL := droid
$(DEFAULT_GOAL):
终极目标为droid;

2.droid: droidcore dist_libraries

3:droidcore有效的依赖为
droidcore: doc-comment-check-docs
droidcore: checkapi
droidcore: files \
 systemimage \
 $(INSTALLED_BOOTIMAGE_TARGET) \   #bootimage没有编译规则
 $(INSTALLED_RECOVERYIMAGE_TARGET) \ #recovery.img
 $(INSTALLED_USERDATAIMAGE_TARGET) \ #userdata.img
 $(INSTALLED_PERSISTIMAGE_TARGET) \ #persist.img
 $(INSTALLED_CACHEIMAGE_TARGET) \ #cache.img
 $(INSTALLED_TOMBSTONESIMAGE_TARGET) \ #tombstones.img
 $(INTERNAL_OTA_PACKAGE_TARGET) \ #msm7627a-ota-eng.***.zip
 $(INTERNAL_OTA_PACKAGE_TARGET_2K) \ #msm7627a-ota-eng.***_mmc--2k.zip
 $(INTERNAL_MMC_OTA_PACKAGE_TARGET) \ #msm7627a-ota-eng.***_mmc.zip
 $(INSTALLED_FILES_FILE)   #installed-files.txt

4: files的有效依赖
.PHONY: files
files: prebuilt \
        $(modules_to_install) \  ###所有需要编译的对象通过$(tag)_MODULES和Default_MODULES添加
        $(modules_to_check) \    ###对BUILD_HOST_JAVA_LIBRARY需要检查下是否编译;
        $(INSTALLED_ANDROID_INFO_TXT_TARGET)#android-info.txt

prebuilt: $(ALL_PREBUILT)

ALL_PREBUILT =  out/target/product/msm7627a/system/usr/share/zoneinfo/zoneinfo.dat
   。。。。。。。。。。。。
  target Prebuilt: system_etcdir (out/target/product/msm7627a/system/etc/gps.conf)

编译次序:
【doc-comment-check-docs】【checkapi】【prebuilt】【modules_to_install】【modules_to_check】【systemimage】
【bootimage】【recovery.img】。。。【msm7627a-ota-eng.***_mmc.zip】

 

第二部分,详细分析doc-comment-check-docs
由droidcore: doc-comment-check-docs引起的编译
doc-comment-check-docs【Docs droiddoc】依赖:
 droiddoc = out/host/linux-x86/framework/doclava.jar
 full_java_lib_deps=
 out/target/common/obj/JAVA_LIBRARIES/bouncycastle_intermediates/javalib.jar  out/target/common/obj/JAVA_LIBRARIES/core_intermediates/javalib.jar
 out/target/common/obj/JAVA_LIBRARIES/ext_intermediates/javalib.jar  out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/javalib.jar
 out/target/common/obj/framework.aidl【Aidl Preprocess】

第一节【Install:doclava.jar】
由目标out/host/linux-x86/framework/doclava.jar【Install:doclava.jar】引起的编译

out/host/linux-x86/framework/doclava.jar【Install:doclava.jar】依赖:
 out/host/linux-x86/framework/jsilver.jar【Install:jsilver.jar】(jsilver依赖guavalib,后者先编译)
 out/host/linux-x86/framework/guavalib.jar【Install:guavalib.jar】
 out/host/linux-x86/framework/antlr.jar【Install:antlr.jar】 
 /usr/lib/jvm/java-6-sun/lib/tools.jar###已存在不需要编译

out/host/linux-x86/framework/guavalib.jar【Install:guavalib.jar】依赖:
 out/host/common/obj/JAVA_LIBRARIES/jsr305lib_intermediates/javalib.jar【host Java: jsr305lib】
 out/host/common/obj/JAVA_LIBRARIES/guavalib_intermediates/javalib.jar【host Java: guavalib】
 out/host/linux-x86/bin/acp 【Install:acp】注:$(LOCAL_INSTALLED_MODULE): $(LOCAL_BUILT_MODULE) | $(ACP)
 out/host/linux-x86/obj/NOTICE_FILES/src//framework/guavalib.jar.txt【Notice file:guavalib.jar.txt】

out/host/linux-x86/bin/acp【Install:acp】依赖:
 out/host/linux-x86/obj/EXECUTABLES/acp_intermediates/acp.o【host C: acp】 ###c文件编译会引起头文件的copy     
 out/host/linux-x86/obj/STATIC_LIBRARIES/libhost_intermediates/libhost.a【host StaticLib: libhost】
 out/host/linux-x86/obj/EXECUTABLES/acp_intermediates/acp【host Executable: acp】

out/host/linux-x86/obj/STATIC_LIBRARIES/libhost_intermediates/libhost.a 依赖:
 out/host/linux-x86/obj/STATIC_LIBRARIES/libhost_intermediates/pseudolocalize.o 【host C++:pseudolocalize】   
 out/host/linux-x86/obj/STATIC_LIBRARIES/libhost_intermediates/CopyFile.o【host C: CopyFile】   

编译次序为:
【host Java: jsr305lib】【host Java: guavalib】【头文件拷贝】【host C: acp】【host C++:pseudolocalize】 【host C: CopyFile】【host StaticLib: libhost】
【host Executable: acp】【Notice file:guavalib.jar.txt】【Install:guavalib.jar】【Install:jsilver.jar】【Install:antlr.jar】 【Install:doclava.jar】

第二节【target Jar: bouncycastle】
由目标out/target/common/obj/JAVA_LIBRARIES/bouncycastle_intermediates/javalib.jar【target Jar: bouncycastle】引起的编译

out/target/common/obj/JAVA_LIBRARIES/bouncycastle_intermediates/javalib.jar【target Jar: bouncycastle】依赖:
 out/target/common/obj/JAVA_LIBRARIES/bouncycastle_intermediates/noproguard.classes.dex【target Dex: bouncycastle】
 AAPT = out/host/linux-x86/bin/aapt【Install:aapt】注:$(common_javalib.jar) : $(built_dex) $(java_resource_sources) | $(AAPT)

out/target/common/obj/JAVA_LIBRARIES/bouncycastle_intermediates/noproguard.classes.dex【target Dex: bouncycastle】依赖:
 out/target/common/obj/JAVA_LIBRARIES/bouncycastle_intermediates/classes-full-debug.jar【target Java:bouncycastle】 
 Install: out/host/linux-x86/framework/jarjar.jar【Install:jarjar.jar】注:$(full_classes_jarjar_jar): $(full_classes_compiled_jar) | $(JARJAR)
 noproguard.classes.jar,noproguard.classes-with-local.dex,noproguard.classes.dex###bouncycastl还会依赖这三个目标不单独列出

out/target/common/obj/JAVA_LIBRARIES/bouncycastle_intermediates/classes-full-debug.jar【target Java:bouncycastle】依赖:
 out/target/common/obj/JAVA_LIBRARIES/core_intermediates/javalib.jar【target Jar:core】 依赖:

由目标out/target/common/obj/JAVA_LIBRARIES/core_intermediates/javalib.jar【target Jar:core】引起的编译

out/target/common/obj/JAVA_LIBRARIES/core_intermediates/javalib.jar【target Jar: core】依赖:
 out/target/common/obj/JAVA_LIBRARIES/core_intermediates/noproguard.classes.dex【target Dex: core】
 AAPT = out/host/linux-x86/bin/aapt【Install:aapt】注:$(common_javalib.jar) : $(built_dex) $(java_resource_sources) | $(AAPT)

out/target/common/obj/JAVA_LIBRARIES/core_intermediates/noproguard.classes.dex【target Dex: core】依赖
 out/target/common/obj/JAVA_LIBRARIES/core_intermediates/noproguard.classes.jar【Copying:core】###这里包括classes.jar,classes-jarjar.jar,/classes-jarjar.jar,target Java: core
 DX = out/host/linux-x86/bin/dx【Install:dx】 注:$(built_dex_intermediate): $(full_classes_proguard_jar) $(DX)

DX = out/host/linux-x86/bin/dx【Install:dx】依赖:
 out/host/linux-x86/framework/dx.jar【install:dx.jar】###依赖【host Java: dx】在david/dx/src/android.mk定义
 out/host/linux-x86/obj/EXECUTABLES/dx_intermediates/dx【Copy:dx】###dx没有是使用base_rules.mk中定义的依赖和生成命令,而是在david/dx/android.mk中定义;

由out/host/linux-x86/bin/aapt【Install:aapt】引起的编译

out/host/linux-x86/bin/aapt【Install:aapt】依赖:
 all_objects =    out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/AaptAssets.o【host C++:AaptAssets】...###LOCAL_SRC_FILES中的c++引起的编译;
 all_libraries =   out/host/linux-x86/obj/STATIC_LIBRARIES/libhost_intermediates/libhost.a###已生成
   out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/libutils.a【host StaticLib:libutils】
   out/host/linux-x86/obj/STATIC_LIBRARIES/liblog_intermediates/liblog.a【host StaticLib:liblog】
   out/host/linux-x86/obj/STATIC_LIBRARIES/libcutils_intermediates/libcutils.a【host StaticLib:libcutils】
   out/host/linux-x86/obj/STATIC_LIBRARIES/libexpat_intermediates/libexpat.a【host StaticLib:libexpat】
   out/host/linux-x86/obj/STATIC_LIBRARIES/libpng_intermediates/libpng.a 【host StaticLib:libpng】
 注:$(LOCAL_BUILT_MODULE): $(all_objects) $(all_libraries)
out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/libutils.a【host StaticLib:libutils】依赖:
 out/host/linux-x86/obj/STATIC_LIBRARIES/libutils_intermediates/Asset.o【host C++:Asset】...###LOCAL_SRC_FILES中的c++引起的编译;

编译次序为:
【Copying:core】【install:dx.jar】【Copy:dx】【Install:dx】【target Dex: core】【host C++:AaptAssets】【host C++:Asset】
【host StaticLib:libutils】【host StaticLib:liblog】【host StaticLib:libcutils】【host StaticLib:libexpat】【host StaticLib:libpng】
【Install:aapt】【target Jar:core】【target Java:bouncycastle】【Install:jarjar.jar】【target Jar: bouncycastle】

 

 

 

抱歉!评论已关闭.