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

【前言】

最近在研究插件化技术的实现,本来其他品牌的机子,测试得挺好,后来测试一下小米的机子,发现Resources替换出现问题,试着断点调试一下发现,小米MIUI系统自己继承Resources重写了自己的MiuiResources类来作为资源管理类
在这里插入图片描述

【尝试一】

发现小米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
在这里插入图片描述
你可以把boot.oat拉取到电脑本地,然后用这个工具:oat2dex,使用命令:

  java -jar oat2dex.jar boot boot.oat

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

【尝试二】

既然从小米手机中无法拉取到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类了
在这里插入图片描述

### Spring Framework Beans Factory Annotation Package 使用说明 Spring框架中的`org.springframework.beans.factory.annotation`包提供了多种注解来简化依赖注入的过程。这些注解允许开发者通过声明的方式配置bean之间的关系,而无需编写大量的XML配置。 #### @Autowired 注解 @Autowired用于自动装配依赖项,默认情况下是必需的(即required=true)。当存在多个候选者时,可以通过限定符进一步指定具体的实现类[^1]: ```java import org.springframework.beans.factory.annotation.Autowired; public class ExampleService { private final AnotherService anotherService; @Autowired public ExampleService(AnotherService anotherService) { this.anotherService = anotherService; } } ``` 如果希望某个字段不是必须被注入,则可以设置`@Autowired(required=false)`属性。 #### 常见问题及其解决方案 ##### IDEA 中找不到 `org.springframework.beans.factory.annotation` 包 IDEA报告“程序包org.springframework.beans.factory.annotation不存在”的错误通常是因为缺少必要的库文件或Maven/Gradle构建工具未能正确下载所需的依赖项[^2][^3]。 为了修复这个问题,建议执行以下操作: - 清理并重建项目缓存,在命令行运行`mvn clean install` 或者在IDE内部操作; - 如果仍然存在问题,尝试重启IDEA,并同步项目结构; 对于某些极端情况,如提到的情况,可能涉及到本地工作空间元数据损坏等问题,此时删除`.idea`目录下的所有文件再重新导入工程可能是有效的办法之一[^4]。 另外需要注意的是,确保网络连接稳定以便能够顺利远程仓库上的最新依赖。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值