Android系统framework的base目录下编译生成对应oat和art

本文详细解析了Android系统中Camera模块的编译过程,从Camera.java源文件到最终生成framework.jar的过程,包括Android.mk文件的作用,以及编译过程中涉及的各类中间文件和最终产物boot-framework.oat。

比如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 := $(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文件,需要调用这些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可以直接识别的文件。

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

loongembedded

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值