android资源文件编译/解析/查找
apk安装后资源分布路径
/data/app
/data/app-lib
/data/davlik-cache/
/data/data/packagename/
/data/system/packages.list
/data/system/packages.xml
不觉得奇怪吗? drawable目录在哪里? 编译成二进制后的xml在哪里?
- 全盘搜索drawable中的图片文件
手机是root过的,搜索结果是啥都没有!! - 把/data/app中的目标apk删除
再次启动目标apk,崩溃了!! - 把目标apk卸载
- 重新安装目标apk
- 修改/data/app中目标apk的名字
启动目标apk崩溃,把/data/app中目标apk名字还原,启动目标apk成功.
结论
app是直接通过resources.arsc中的映射然后直接从apk文件中读取资源的.
android中资源文件的加载过程
1. 编译
aapt 根据drawable和xml文件生成resources.arsc
如果是文件比如图片,resources.arsc中会存储id和路径, 如果是字符串则会固化到arsc文件中, xml布局会编译成二进制文件(反编译后打开查看一下).
2. 安装到手机收查找
2.1 加载
resources.arsc文件在启动app的时候被加载到内存中.
**AssetManager** call **ResTable**
2.2 查找
findViewById(R.id.xxx)
根据id到ResTable中找对应的映射值,如果是图片则直接到/data/app/packagename.apk中提取.