一、Android项目中都包含哪些资源?
资源文件大致分为三类
1、value文件资源
string
Color
Theme
dimen
Style
2、drawable文件资源
图片
shapeListDrawable
LayerDrawable
ShapeDrawable
ClipDrawable
2、ColorStateList资源
根据状态改变drawable对象
二、apk打包流程
1.通过打包资源的工具是aapt,将资源文件生成R.java文件
2.通过aidl工具,处理aidl文件生成Java文件
3.编译项目源码,生成.class文件,放置位置在bin/classes下
4.通过dx文件将class和三方库library转换成dex文件
5.没有编译过的资源直接打包进app,应用层通过文件名获取资源
6.通过appbuilder工具,将dex文件和资源文件打包生成apk
7.对apk文件进行签名
8.对正式版apk进行对齐处理,主要实现是调整资源文件距离文件其实偏移4字节整倍数。起作用是内存映射访问apk文件速度更快,减少运行内存的使用
三、apk解压后都包含哪些资源
assets 工程自身和三方库的assets文件
lib 所有的so文件
res 工程资源文件都在这,values除外,因为已经编译到resources.arsc之中
resources.arsc 资源文件索引
classes.dex 虚拟机的执行文件
AndroidManifest 做组建查找
META-INF 签名、信息描述等
四、R文件打包后生成的文件是哪种?
R.java文件
五、Dex文件结构
1.头文件
存储了文件的概要信息,包括文件大小、版本、校验信息、string_ids的文件位置等等
2.索引区
string_id string索引
type_id 类型索性
field_id 域的索引
method_id 方法的索引
3.数据区
class_defs 类的定义区
data 数据区
link_data 链接索引区
六-Android为何会有65535的限制
我们的源码会被编译成.dex文件,每一个dex中代码可被调用的总数最大是65536。
可以设置对dex进行拆包,分为主dex包(classes.dex)和辅助dex包(classes2.dex 和 classes3.dex 等),所以推荐我们使用组件化,除了解耦业务逻辑,还能防止64k问题的发生。
七。Dalvik和ART的区别
Dalvik中,每次打开应用的时候,Dalvik会读取这个classes.dex并解释执行。
ART中,当你安装apk的时候,这个classes.dex文件就会被转换成本地机器码——后缀为oat的文件,以后打开应用时直接读取oat文件执行即可。
ART相对于Dalvik,执行效率更快,但是需要更多空间,apk的安装速度也变慢了。