比如frameworks\base\core\java\android\hardware\Camera.java,对应system\framework\framework.jar,怎么知道是对应framework.jar呢,framework\base有Android.mk文件,在base目录下就没有Android.mk文件了,见frameworks\base\Android.mk给出了依据:
include $(CLEAR_VARS)
FRAMEWORKS_BASE_SUBDIRS comes from build/core/pathmap.mk
LOCAL_SRC_FILES := (FRAMEWORKS_BASE_SUBDIRS))
…
LOCAL_JAVA_LIBRARIES := core-oj core-libart core-lambda-stubs conscrypt okhttp core-junit bouncycastle ext //表示framework.jar链接(不是包含)这些jar文件,需要调用这些jar文件的类函数
…
LOCAL_MODULE := framework
…
include $(BUILD_JAVA_LIBRARY)//编译成jar类
LOCAL_SRC_FILES 告诉编译系统源代码目录,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编译系统就会把core下的java编译进来
在out\target\common\obj\JAVA_LIBRARIES\framework_intermediates\classes.dex可以找到Camera.java的cameraInitVersion()函数
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()函数
boot-framework.oat是android可以直接识别的文件。