拉取小米MIUI系统的framework.jar实践之旅

【前言】

最近在研究插件化技术的实现,本来其他品牌的机子,测试得挺好,后来测试一下小米的机子,发现Resources替换出现问题,试着断点调试一下发现,小米MIUI系统自己继承Resources重写了自己的MiuiResources类来作为资源管理类
拉取小米MIUI系统的framework.jar实践之旅_第1张图片

【尝试一】

发现小米MIUI系统实现自己的MiuiResources类之后,想着拉取小米手机里的framework.jar出来看看,它是怎么实现的,正常来说,一般直接进去到system/framework/目录下,就能看到对应framework的jar包,比如:oppo的就对应是coloros-framework.jar,但是小米MIUI系统有点坑爹,system/framework/目录下虽然有个名为framework.jar,但是拉取出来打开啥都没有(我手头上的是红米android 6.0系统,后来发现好像新的系统是有的),看大小都觉得不正常
在这里插入图片描述
【备注】
后来查资料发现,android 5.0、6.0那些旧版本机子framework.jar是没有东西,真正代码都编译成了boot.oat,下图是模拟器截图,所以显示目录是system/framework/x86,要是真机应该是 /system/framework/arm/boot.oat
拉取小米MIUI系统的framework.jar实践之旅_第2张图片
你可以把boot.oat拉取到电脑本地,然后用这个工具:oat2dex,使用命令:

  java -jar oat2dex.jar boot boot.oat

将oat文件转为dex文件就可以了

【尝试二】

既然从小米手机中无法拉取到framework.jar,那么是否可以考虑看看有没有其他途径呢?后来看看还真有,小米有提供一个官方下载小米手机MIUI系统ROM的社区:米柚社区
那么,我们可以从米柚社区下载对应的ROM下来解压获取到framework.jar
1)我们先从下载页选择自己想要下载的版本ROM进去,因为我的手机是红米6,所以我就选择红米6进去,选择“下载完整包”
拉取小米MIUI系统的framework.jar实践之旅_第3张图片
2)下载之后是在zip压缩包,解压之后,包含以下文件
拉取小米MIUI系统的framework.jar实践之旅_第4张图片
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,点击开始转换
拉取小米MIUI系统的framework.jar实践之旅_第5张图片
5)转换完毕之后,会生成一个system.new.dat文件
拉取小米MIUI系统的framework.jar实践之旅_第6张图片
6)接着就是把这个生成的system.new.dat文件再转换为.img文件
拉取小米MIUI系统的framework.jar实践之旅_第7张图片
7)点击“开始转换”时候,会要求选择transfer.list文件
拉取小米MIUI系统的framework.jar实践之旅_第8张图片
8)细心的小伙伴应该留意到,刚才解压出从米柚社区下载的ROM时候,有看到里面有个名为:system.transfer.list文件,我们就是选择这个文件即可
拉取小米MIUI系统的framework.jar实践之旅_第9张图片
9)转换完毕,会生成一个.img文件,这就是我们想要文件
拉取小米MIUI系统的framework.jar实践之旅_第10张图片
10)但是你会发现.img文件依然不能用普通的解压工具去解压,这里还需要用到一个工具:ROM助手,这个工具的链接就不贴了,因为他们官网好像域名过期了,自己百度下载吧
拉取小米MIUI系统的framework.jar实践之旅_第11张图片
11)选择“工具箱”-"IMG解包",选择刚刚转换出来的.img文件,就会开始提取出里面的文件
拉取小米MIUI系统的framework.jar实践之旅_第12张图片
12)解压提取完成之后,我们可以看到以下目录结构,跟我们平时在手机看到的差不多
拉取小米MIUI系统的framework.jar实践之旅_第13张图片
13)点击进去到system/framework目录,就看到了我们心心念念的framework.jar了
拉取小米MIUI系统的framework.jar实践之旅_第14张图片
14)但是大家都知道,android系统其实是dalvid虚拟机,而不是JVM,所以里面当然不是普通的jar,而是dex
拉取小米MIUI系统的framework.jar实践之旅_第15张图片
15)那么,还得把dex转换为jar,这个可以用dex2jar工具,直接输入:d2j-dex2jar framework.jar即可,可能过程中会有些报错,可以不管
拉取小米MIUI系统的framework.jar实践之旅_第16张图片
16)我们用jad-gui双击打开看看framework-dex2jar.jar,终于都看到了我们想要的MiuiResources类了
拉取小米MIUI系统的framework.jar实践之旅_第17张图片

你可能感兴趣的:(android)