每一个apk如何使用Framework-res.apk中的资源

在此总结一下为什么Android系统资源包Android.jar中的资源可以被访问:

1.app引入了系统资源,这些系统资源及其id和名字的索引包含在Android.jar包中。

2.app编译时会执行aapt资源编译打包命令,aapt资源编译打包命令的-I 参数,引入了Android.jar,所以app在编译的时候,系统资源id能被识别。

3.apk包中只包含了对系统资源id的索引,并不包含真正的资源,否则apk包不会那么小。

4.apk在运行时加载的系统资源其实包含在/system/framework/framework-res.apk包中,这个包的资源索引表跟Android.jar包相同,在apk运行时由framework层中的 AssertManager自动加载,app需要引用系统资源时,通过使用编译时固定的id到framework-res.apk包中查找。

所以Android.jar中的资源可以被访问其实是个假象, app只是应用了位于其中的资源id及索引,这一步是在编译时就完成了。真正的资源访问是在运行时去framework-res.apk包中查找的。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 13,135评论 2 59
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,744评论 25 709
  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 2,736评论 0 3
  • 简述:    一直希望有个机会可以好好研究一下android手机的多主题功能,借此机会将自己所能分析到的内容记录...
    大天使之剑阅读 1,927评论 0 6
  • 下午突然下起雨来了。就是在下雨之后的几分钟内发生的事情,其实就像,这几年,积蓄起来的那些力量一样喷发出来。 我自己...
    lygly9阅读 203评论 0 0