【前言】
最近在研究插件化技术的实现,本来其他品牌的机子,测试得挺好,后来测试一下小米的机子,发现Resources替换出现问题,试着断点调试一下发现,小米MIUI系统自己继承Resources重写了自己的MiuiResources
类来作为资源管理类
【尝试一】
发现小米MIUI系统实现自己的MiuiResources
类之后,想着拉取小米手机里的framework.jar
出来看看,它是怎么实现的,正常来说,一般直接进去到system/framework/
目录下,就能看到对应framework的jar包,比如:oppo的就对应是coloros-framework.jar
,但是小米MIUI系统有点坑爹,system/framework/目录下虽然有个名为framework.jar,但是拉取出来打开啥都没有(我手头上的是红米android 6.0系统,后来发现好像新的系统是有的),看大小都觉得不正常
【尝试二】
既然从小米手机中无法拉取到framework.jar
,那么是否可以考虑看看有没有其他途径呢?后来看看还真有,小米有提供一个官方下载小米手机MIUI系统ROM的社区:米柚社区
那么,我们可以从米柚社区下载对应的ROM下来解压获取到framework.jar
1)我们先从下载页选择自己想要下载的版本ROM进去,因为我的手机是红米6,所以我就选择红米6进去,选择“下载完整包”
2)下载之后是在zip压缩包,解压之后,包含以下文件
3)我们重点关注system.new.dat.br
这个文件,这个文件解压之后可以获取到framework.jar,但是system.new.dat.br
这个文件不是简单的解压工具可以解压的,这个是Google用了自己的压缩算法:Brotli 压缩算法,想要自己动手编译的话,可以去Google brotli github仓库上获取
4)我们这里就介绍更加简单点的做法,去ROM开发者平台下载他们官网那个ROM制作工具
,安装之后打开,选择“实用工具
”-“new.dat编辑
”-"dat与dat.br转换
",选择刚刚我们解压的文件system.new.dat.br
,点击开始转换
5)转换完毕之后,会生成一个system.new.dat
文件
6)接着就是把这个生成的system.new.dat
文件再转换为.img
文件
7)点击“开始转换”时候,会要求选择transfer.list文件
8)细心的小伙伴应该留意到,刚才解压出从米柚社区下载的ROM时候,有看到里面有个名为:system.transfer.list
文件,我们就是选择这个文件即可
9)转换完毕,会生成一个.img
文件,这就是我们想要文件
10)但是你会发现.img
文件依然不能用普通的解压工具去解压,这里还需要用到一个工具:ROM助手
,这个工具的链接就不贴了,因为他们官网好像域名过期了,自己百度下载吧
11)选择“工具箱
”-"IMG解包
",选择刚刚转换出来的.img文件,就会开始提取出里面的文件
12)解压提取完成之后,我们可以看到以下目录结构,跟我们平时在手机看到的差不多
13)点击进去到system/framework目录,就看到了我们心心念念的framework.jar了
14)但是大家都知道,android系统其实是dalvid虚拟机,而不是JVM,所以里面当然不是普通的jar,而是dex
15)那么,还得把dex转换为jar,这个可以用dex2jar工具,直接输入:d2j-dex2jar framework.jar
即可,可能过程中会有些报错,可以不管
16)我们用jad-gui
双击打开看看framework-dex2jar.jar
,终于都看到了我们想要的MiuiResources类了