android 资源 打包,Android打包流程

本文详细介绍了Android Apk的组成,包括res目录、lib目录、classes.dex、assets目录、AndroidManifest.xml、resources.arsc和META-INF目录等,并解析了Apk的打包流程,涉及aapt工具、资源编译、dex转换、apkbuilder和签名等步骤。此外,还讨论了资源文件的处理方式,如二进制XML的优化和资源ID的映射。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Apk组成

关闭Android Instant Run热部署功能,正常打包的情况下,生成的Apk包含以下文件和目录。

4b8206262991

Apk组成

1,res目录,存放资源文件,所有文件映射在R类资源id常量中,在代码中通过id直接访问。

2,lib目录,C++库,so文件,根据Cpu架构区分文件夹,如arm-v7,x86,mips,不同目标设备根据当前架构加载对应目录下so文件。

3,classes.dex文件,由class字节码文件通过dx工具转化,Dalvik虚拟机识别的执行文件。

4,assets目录,存放任何文件或文件夹,一般存放WebView相关资源。

和res目录的区别:不会在R类中映射资源id,在代码中通过AssetManager类访问,其他资源,包括raw资源,都会生成资源id。

5,AndroidMainfest文件,应用配置,向Android系统注册该应用信息,四大组件,权限声明。

6,resources.arsc文件,记录资源文件和资源id的映射关系,在代码中通过R类的资源id查找资源,运行时,需要根据id找到资源的路径。

7,META-INF目录,签名和校验,验证Apk文件完整性,打包时,会计算内部所有文件摘要签名,保存在该目录下,安装时,根据该目录的相关文件校验完整性,确保Apk每个文件不被篡改,是官方正版Apk。

二、打包流程

Apk如何出来的?

aapt(Android Asset Packaging Tool),资源打包工具,编译res目录下的资源文件,生成R文件,resources.arsc和res目录,R文件。

4b8206262991

屏幕快照 .png

res目录是资源文件,比如layout,anim,drawable,menu,raw,xml目录下的文件,在R文件是静态内部类的静态变量,每个文件对应一个id。

4b8206262991

屏幕快照 .png

value目录下的文件,比如attrs,colors,dimens,styles,strings文件,每个文件对应一个静态内部类,文件内的资源item是静态变量,每个项对应一个id。

4b8206262991

屏幕快照 .png

资源id是4字节无符号,resources.arsc文件记录应用程序资源目录信息,包括每一个资源名称、类型、值、id以及所配置的维度信息,资源索引表,key是资源id。

4b8206262991

屏幕快照 .png

res目录将文本格式的xml转换成二进制xml,文本编辑器打开是乱码的。

4b8206262991

屏幕快照 .png

用As的Apk查看工具可以看到里面内容。二进制xml实现了字符串替换,将一些在资源使用id表示,解析更快,占用空间更小。

aidl,处理aidl文件,编译成java文件。

compile,javac工具编译所有java文件,包括R文件,aidl生成的java文件,java源文件和第三方java文件,生成class文件。

dex,通过dex命令,处理class文件,包括第三方class文件,生成Delvik虚拟机可执行的classes.dex文件,在分包情况下生成多个dex文件。对多个class文件合并,重组,优化,可以减小体积,缩短运行时间。

apkbuilder,将resources.arsc,res目录,Androidmanifest文件,dex文件,一些第三方的so文件,assets目录,通过apkbuilder工具生成未签名Apk包。

注意,raw资源和assets直接打包进入Apk,其他资源编译处理,raw被映射到R文件,assets不会映射,需要Assetmanager类访问,raw目录内部不能再有目录结构,assets可以有。

jarsigner,对Apk进行签名,debug使用默认签名。

zipalign,对未压缩的数据,如图片,按4字节边界进行对齐,对齐后可以向读内存一样对普通文件操作,加快资源访问速度。

参考

任重而道远

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值