故事

我在我的《我是如何折腾我的低配 Android 的 | Matrix 精选》中提到了关于在 Xposed 框架下使用阻止运行优化使用体验,以及发生在阻止运行上的悲伤故事。我使用了原作者的最后一版,本以为余下的 Android 生涯里都将如此渡过,没想到几日前,原作者现身酷安这个应用交流社区并且带来了阻止运行的新版本。

在我看来,这个新版本像是一次涅槃重生。

与其说是「新版本」,不如说是「新模式」。为了避免与新东家造成利益冲突,原作者发布的新版本并不依赖 Xposed 框架,而是采用了补丁模式。根据他在酷安的评论可以得知他想发布新版本的理由:当前的阻止运行必须依赖 Xposed 框架,而他刚买的新手机 Google Pixel 搭载的原生 Android 7.0 对框架的支持「目前看起来遥遥无期」,因此他只能修改原版本为补丁模式自用。既然自用,在不伤害新东家利益的情况下,为什么不发布出来与用户共享呢?原作者已经与新东家沟通,与此同时他也释出了补丁模式的使用方法

补丁模式与框架的恩怨

而对于用户来说,补丁模式也是更好的选择。 Android 5.0 意味着 ART 时代的到来, 在这种情况下,Xposed 框架需要重新编译整个 ART 虚拟机的库文件,从而对系统的稳定性和流畅性都有所影响。能够用上新版本的阻止运行,却不依赖框架,这是最好不过的了。

新版本的包名改为黑域 ( me.piebridge.prevent ) ,读过《三体》的朋友一定知道这个名词代表着什么。在我看来,这个称呼的确相当贴切,新版本的阻止运行就像是系统内的黑域,让毒瘤们的运行近乎静止……

PS:此方法适用于那些不想安装 Xposed 框架和使用了 Android 7.0 的朋友。补丁模式支持 Android 4.4 到 Android 7.1

补丁的制作方法

点击标题可以跳转至原作者的教程。非常感谢他。

首先在开始郑重声明:由于本人的专业并不是计算机专业,而是英语专业,因此在涉及许多原理性内容时倍感无力。我在这里分享的是我根据原作者的教程,配合自身的大量摸索的制作过程,尽力做到详尽。如果有感到疑问或者出现错误,欢迎在评论区留言(反正我能力有限只能尽力帮你咯)。这是一篇面向我这样的小白的教程

配置环境

  •  ADB 调试;(我使用的是 Windows 系统,其他系统可以访问原教程)
  • Python, 最新的 2.X 或者 3.X,用于运行补丁程序;
  • Java, Java SE 8 (JDK) 以上,smali/baksmali  需要 Java 7,而 oat2dex 需要Java 8;

  • baksmali/smali, 2.2 及以上版本,用于解包封包;(我使用的是前者)

配置完毕后,可以在运行里输入 cmd 呼出命令行,进行测试。

在命令行后输入python 

微信截图_20161026090031.png

如果出现图示这样的回应,没有报错,则说明配置成功。同理,接下来输入这些进行测试:

在命令行后输入adb devices

成功了吗?成功的话会显示你的设备的调试 ID 。

在命令行后输入java -version

成功了吗?成功的话会显示你之前安装的 Java 版本。

配置环境都成功后,我们开始下一步

打补丁

首先连接你的手机到电脑,需要开启开发者调试。

在命令行后输入adb pull /system/framework

执行这个命令后,电脑里会出现一些文件,如 services.jar、services.odex 等。这些文件都是来自手机的系统目录。

在 Windows 桌面建立一个临时文件夹,我举个例子,就命名为 lianer 好了。

点击这个链接下载原作者上传的安装包(即 pr-v3.1.1.apk )。将这个安装包和刚刚电脑里出现的 services.jar 一起放在刚刚设立的 lianer 文件夹里。

PS:由于我的设备 ROM 为非 odex 优化版本 (services.jar 在 1M 以上),因此只需要 services.jar 即可。Android 4.4 同理。

在命令行后输入cd C:\Users\你电脑的名字\Desktop\lianer

这条命令是切换到当前这个目录,方便处理文件。一个小诀窍是,如果你不知道这个目录,你可以进入这个文件夹中,查看任一文件的属性,你就可以看到这个文件所在的目录,复制进 cd 后面即可。

在命令行后输入java -jar baksmali-2.2b4.jar d services.jar -o services

PS:我下载的是最新的 2.2b4 版本,如果你下载了别的版本,可以修改版本号。

执行完以后,会生成一个新目录services。这是一个把 services 转成 smali 的过程。

如果你的 services.jar 在 1M 以下……你需要提取 services.jar, services.odex, boot.oat 这三件,步骤也会相对多一些。由于我没有办法测试,因此只搬运来原教程。

Android 5.0 - Android 5.1:

在命令行后输入 java -Xms1g -jar oat2dex.jar boot <boot.oat路径>

在命令行后输入 java -Xms1g -jar oat2dex.jar <services.odex路径> <dex目录路径>

在命令行后输入 java -Xms1g -jar baksmali-2.2b4.jar d <services.dex路径> -o services

执行完以后,会生成一个新目录services以及中间过程目录odex与dex。

Android 6.0 - Android 7.1:

注意: Android 7.0 及以上版本中的boot.oat依赖同目录下的其它文件,请不要移动boot.oat,直接指定它所在的目录就好。

提示: 如果boot.oat或services.odex出现在多个目录,使用任何一个就好。

在命令行后输入java -Xms1g -jar baksmali-2.2b4.jar x -d <boot.oat所在目录路径> <services.odex文件路径> -o services

执行完以后,会生成一个新目录services。


接下来,是把 apk 转成 smali 的过程。

在命令行后输入java -jar baksmali-2.2b4.jar d pr-v3.1.1.apk -o apk

执行完以后,会生成一个新目录 apk 。

从下载的安装包中获取 patch.py ,可以直接把 apk 后缀改为 zip ,就能看到 assets/patch.py 了。提取出来放在lianer文件夹里。开始正式打补丁。

在命令行后输入python patch.py -a apk -s services

执行完以后,会提示一共打了多个个补丁。正常的话,Android 4.4 一共有 14 处补丁,5.0 以上共有 15 处补丁。接下来输出打过补丁的 services 。

在命令行后输入java -jar smali-2.2b4.jar a -o classes.dex services

在命令行后输入jar -cvf services.jar classes.dex

执行完以后,会生成中间过程 classes.dex 以及目标文件 services.jar

值得注意的是,我在输入 jar 命令时,出现了错误。如果你也在这个步骤出现了错误,在确认 C:\Program Files\Java 下有 jdk 目录的情况下(没有请重新安装 Java )可以在控制面板——系统与安全——系统——高级系统设置——环境变量里新建 JAVA_HOME 和 CLASS_PATH 变量,并且在已有的 Path 变量后添加一些内容。完成后关闭 cmd 命令窗口再开启以生效。

JAVA_HOME    c:\Program Files\Java\你的jdk目录

CLASS_PATH   ;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;

Path         %JAVA_HOME%\bin; 

微信截图_20161026142621.png

放个示意图,相信你会觉得心安一些。

生效

得到了生成的 services.jar 文件后,将手机原先的 services.jar 提取作为备份,将新的 services.jar 放入 /system/framework 目录下覆盖原先的版本,并且修改好权限(-rw-r--r--)。

重启,在手机上安装 pr-v3.1.1.apk ,即黑域,新生的阻止运行。重启。

结语

352221.jpg

打开即可开始配置阻止名单,只需配置一次即可。内置了强迫症设置供用户选择。我认为默认的设置已经足够好用,如果对使用效果不满意,可以尝试更改设置。


352225.jpg

应用内自带用户指南,强烈建议用户仔细阅读和理解,只有在理解的基础上才能更高效地发挥黑域的功效。至于使用效果,我个人非常满意 。

黑域正式版将会在正式版会在作者的 Pixel 到货后发布在 Google Play 与酷安。

到此结束。谢谢观看。如有不当,烦请勘误,不胜感激。