Android系统framework的base目录下编译生成对应oat和art
比如frameworks\base\core\java\android\hardware\Camera.java,對應(yīng)system\framework\framework.jar,怎么知道是對應(yīng)framework.jar呢,framework\base有Android.mk文件,在base目錄下就沒有Android.mk文件了,見frameworks\base\Android.mk給出了依據(jù):
include $(CLEAR_VARS)
# FRAMEWORKS_BASE_SUBDIRS comes from build/core/pathmap.mk
LOCAL_SRC_FILES := $(call find-other-java-files,$(FRAMEWORKS_BASE_SUBDIRS))
…
LOCAL_JAVA_LIBRARIES := core-oj core-libart core-lambda-stubs conscrypt okhttp core-junit bouncycastle ext //表示framework.jar鏈接(不是包含)這些jar文件,需要調(diào)用這些jar文件的類函數(shù)
…
LOCAL_MODULE := framework
…
include $(BUILD_JAVA_LIBRARY)//編譯成jar類
LOCAL_SRC_FILES 告訴編譯系統(tǒng)源代碼目錄,FRAMEWORKS_BASE_SUBDIRS在build\core\pathmap.mk定義如下
# # A list of all source roots under frameworks/base, which will be # built into the android.jar. # FRAMEWORKS_BASE_SUBDIRS := \$(addsuffix /java, \core \graphics \location \media \media/mca/effect \media/mca/filterfw \media/mca/filterpacks \drm \opengl \sax \telecomm \telephony \wifi \keystore \rs \)Camera.java在core下,android編譯系統(tǒng)就會把core下的java編譯進來
在out\target\common\obj\JAVA_LIBRARIES\framework_intermediates\classes.dex可以找到Camera.java的cameraInitVersion()函數(shù)
Camera.java首先被編譯生成為
out\target\common\obj\JAVA_LIBRARIES\framework_intermediates\classes\android\hardware\Camera.class,然后生成framework_intermediates\classes\class.jar,再是framework_intermediates\classes\classes.dex和classes2.dex,接著是out\target\product\msm8937_64\system\framework\arm和arm64下的boot-framework.oat,在此文件中我們找到了cameraInitVersion()函數(shù)
boot-framework.oat是android可以直接識別的文件。
?
總結(jié)
以上是生活随笔為你收集整理的Android系统framework的base目录下编译生成对应oat和art的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Android系统编译so库提示erro
- 下一篇: 如何理解git的快照?