一、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的安装速度也变慢了。