Skip to content

[实验性功能] [开发者向]如何免Root控制应用程序组件

lihenggui edited this page Sep 22, 2018 · 1 revision

警告

本教程对普通用户不友好,如果你对本文内容表示不理解,为了节约您的时间,请勿尝试。

已知问题

  1. 需要重新打包Apk进行修改,应用签名会发生改变,随时会被厂商封杀/封号的危险。
  2. 修改完之后某些应用会变得不正常(例如手机淘宝),需要对代码进行进一步操作才可以正常使用。
  3. 因为免Root的权限问题,某些禁用之后的组件会在应用程序启动之后自动启动,效果同没有装上Xposed插件的MyAndroidTools一样。理论上可以修改Smail文件内容屏蔽启用组件的代码达到永久禁用的目的。
  4. Android 7及以下无法使用。

如何使用Blocker免Root禁用权限?

准备工具

ADB工具:https://dl.google.com/android/repository/platform-tools_r28.0.1-windows.zip (已有则无需安装)

下载修改版Apk

Apk的Repository地址为 https://github.com/lihenggui/Blocker-NonRoot-Apps/

若是你修改好了Apk也可以提交pull request来更新此Repository。

(目前只有一个测试软件-知乎Android,下载地址为 https://github.com/lihenggui/Blocker-NonRoot-Apps/raw/master/zhihu_signed.apk)

安装修改版的Apk

修改完的Apk在手机上无法直接安装,需要在电脑端下载好Apk,然后使用ADB工具安装。手机要首先在开发者选项中打开调试模式,然后连接到电脑上,在命令行中输入安装命令 adb install -t 你的apk存放地址

若是出现Success字样则是安装成功

通过Adb激活Shizuku

(若是已经激活过,可以跳过此步骤)

Shizuku的Play Store下载地址为 https://play.google.com/store/apps/details?id=moe.shizuku.privileged.api

酷安的下载地址为 https://www.coolapk.com/apk/moe.shizuku.privileged.api

下载安装之后,打开Shizuku Manager, 根据屏幕提示激活Shizuku服务。

使用Blocker

打开Blocker,选择你刚才安装的软件,授予Shizuku权限,即可禁用组件。

如何制作Apk

准备工具

ApkTool(反编译)和ApkSign(重签名) 下载地址: https://github.com/lihenggui/Blocker-NonRoot-Apps/tree/master/Tools

禁用原理

在AndroidManifests.xml文件中,我们将android:testOnly="true"属性放置入<application>标签中。程序在安装的时候会识别为测试apk,便可以修改各个组件的状态。

使用ApkTool反编译Apk

ApkTool是一个反编译Apk的工具,相关教程网上有很多,不再赘述。 使用apktool d apk文件名命令解压Apk,待完成之后进入解压目录。

修改AndroidManifests.xml文件

在目录中找到AndroidManifests.xml文件,使用文本编辑器打开。找到<application>标签,在标签闭合符>前加入android:testOnly="true"。保存文件

使用ApkTool重新打包文件

使用apktool b apk文件名命令重打包Apk,打包的apk存放在解压目录中的dist文件夹中。

使用ApkSign重新签名

ApkTool打包生成的文件是没有签名的,这意味着我们需要给他重新签名才可以安装在手机上。我们打开ApkSign软件,在“选择APK或者ROM文件”按钮中选择我们刚才生成的apk文件,签名文件保存目录选择ApkSign存放目录(里面有测试密钥),然后点击制作签名。稍等片刻签名的安装包就做好了。

需要继续改进的地方

某些软件在改变为测试状态之后无法正常使用,例如手机淘宝会一直连接不上网络。需要进一步对相关代码修改才可以使用。

理论上可以通过对反编译出的Smail文件打补丁以屏蔽组件自动启用。这是下一阶段研究的目标。