概述
家人们!后台启动 Activity 的 Demo 工程请私聊我, 如有问题欢迎提出,觉得不错的话就点个赞吧。
前段时间调研 Android 后台启动 Activity 的方案,参考 实战|Android后台启动Activity实践之路 一文,当时的结论如下:
原生Android ROM
Android 原生 ROM 都能正常地从后台启动 Activity 界面,无论是 Android 9(直接启动) 还是 10 版本(借助全屏通知)。
定制化ROM
Android P版本的机型:
- 通过 moveTaskToFront 方法将应用切换到前台,如果切换失败的话可以多尝试几次调用 moveTaskToFront 方法;
- 小米机型可以通过Hook相关参数来后台启动Activity;
Android Q版本的机型:
- 通过系统全屏通知的方式调起后台 Activity;
- 在一些另作了限制的 ROM 上可能调起失败;
后来又想到如果能够拿到这些机型 ROM 的源码,那么通过阅读 startActivity 以及后台启动权限设置页面的源码,那么就有可能找到破解的方法。至于怎么获取 ROM 的源码,我这里有两种方式:
- 如果手里有现成的机型,则可以直接将 /system/framework/ 中的内容通过 adb pull 命令拉下来,然后通过一些反编译工具可以查阅相关的源码;
- 去相关厂商的官网下载对应机型的 ROM 包,通过工具将其解压转换,最终也可以拿到源码。
这篇文章主要是延续上篇文章的内容,介绍一下怎么拿到 ROM 包源码,并以小米某机型为例,找出它们针对后台启动权限所做的定制化。
获取ROM源码
adb pull
我一开始也没想到原来不需要 root 权限即可从手机里 pull /system/framework/ 里的内容,方式也很简单,手机连接电脑后运行命令即可在当前路径下拿到 framework 文件夹内容:
$ adb pull /system/framework
这种方式做过 Android 开发的应该都知道,就不再多说了。不过需要注意的是在一些机器里 pull 下来的 framework 文件夹下的 jar 文件可能都是只有 1Kb 的大小,这种 jar 文件里不含有源代码,在 framework 下还有一些 odex 文件,需要将其转换成 dex 等格式才更好反编译,具体怎么转换的可以网上搜,貌似还有挺多教程的。
解压ROM
首先去对应厂商的官网下载 ROM 包,以小米为例是在 MIUI下载 里下载,下载了目标 ROM.zip 后将其解压缩,我下载的是小米 Max3(Android 9) 的 ROM 包,解压后我们需要的有两个文件: system.new.dat.br 和 system.transfer.list。接下来分步骤看看怎么反编译出它的源码:
- 下载 ROM 制作工具: 下载地址,下载安装打开后,选择其 实用工具 栏,然后打开 new.dat编辑 功能,如下图: