使用树莓派3b+作为黑阈激活器

黑阈(yù)不需要 root 就能待机(App Standby,Android 6.0
引入,部分设备不支持)或强行停止应用,防止应用持续运行。

黑阈不处理非“黑阈清单”内应用。当您启动应用,使用完退出(如按“返回”)以后,黑阈会待机它;待机超时,或者从概览屏幕(recents
screen)划掉,黑阈会强行停止它。无论何时应用被运行,只要没有打开界面,黑阈都将强行停止它。

本篇文章只做技术性讨论,不接受实用性评价。

上一部手机不幸挂了,因为贫穷,我选择了比较便宜的SONY XPERIA Z5 SO-01H(DOCOMO日版)
拿到手后发现自己还是年少太轻狂了,这手机不能解锁/不能ROOT
火龙810在裤兜里烫大腿呀!这谁顶得住呀…

这种情况使用黑阈去镇压毒瘤效果还是很好,但因为黑阈使用了ADB来激活
ADB Shell权限很高,每次手机重启后都要连接到电脑上使用ADB激活(Android 8以下)
不过每次只要手机重启了,就要连接到电脑上去激活,比较麻烦

黑阈还提供了黑阈激活器的方案,手机进入设置-开发者选项(设置里没有百度),打开USB调试,将一个U盘大小的设备插在USB电源上,另一端插上数据线,数据线连接手机。
如果你是第一次连接激活器,手机会提示ADB授权,点击确定后,稍等片刻即可激活黑阈。

个人很好奇激活器的内部原理,昨日突发奇想,也想整一个

说干就干,拿出我的rasyberry 3b+

首先我们要先安装ADB tools

sudo apt-get install adb

安装完成后输入

adb

若屏幕上输出了帮助信息,则说明ADB安装成功

接下来我们要编写一套udev rules
首先查看我的手机的一些特征

pi@raspberrypi:~ $ udevadm monitor

monitor will print the received events for:
UDEV - the event which udev sends out after rule processing
KERNEL - the kernel uevent

在 udevadm monitor 命令运行时,插入手机
屏幕上会滚动一些ADD信息,这就是你刚刚插入的设备的信息

KERNEL[160.873180] add      /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2 (usb)
KERNEL[160.873457] add      /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.0 (usb)
KERNEL[160.873710] add      /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2/1-1.2:1.1 (usb)

复制第一个设备的路径地址
输入pi@raspberrypi:~ $ udevadm info -ap /devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2
来列出设备的详细属性

Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.

  looking at device '/devices/platform/soc/3f980000.usb/usb1/1-1/1-1.2':
    KERNEL=="1-1.2"
    SUBSYSTEM=="usb"
    DRIVER=="usb"
    ATTR{authorized}=="1"
    ATTR{avoid_reset_quirk}=="0"
    ATTR{bConfigurationValue}=="1"
    ATTR{bDeviceClass}=="00"
    ATTR{bDeviceProtocol}=="00"
    ATTR{bDeviceSubClass}=="00"
    ATTR{bMaxPacketSize0}=="64"
    ATTR{bMaxPower}=="500mA"
    ATTR{bNumConfigurations}=="1"
    ATTR{bNumInterfaces}==" 2"
    ATTR{bcdDevice}=="0310"
    ATTR{bmAttributes}=="80"
    ATTR{busnum}=="1"
    ATTR{configuration}==""
    ATTR{devnum}=="7"
    ATTR{devpath}=="1.2"
    ATTR{devspec}=="  (null)"
    ATTR{idProduct}=="51d9"  //产品ID
    ATTR{idVendor}=="0fce"   //供应商ID
    ATTR{ltm_capable}=="no"
    ATTR{manufacturer}=="Sony"
    ATTR{maxchild}=="0"
    ATTR{product}=="SO-01H"
    ATTR{quirks}=="0x0"
    ATTR{removable}=="removable"
    ATTR{serial}=="BH905DDM4S" //唯一序号
    ATTR{speed}=="480"
    ATTR{urbnum}=="126"
    ATTR{version}==" 2.00"

ATTR{idProduct}=="51d9"  //产品ID
ATTR{idVendor}=="0fce"   //供应商ID

现在我已经知道我的设备的供应商ID和产品ID,下面要编辑udev rules文件了

pi@raspberrypi:/etc/udev/rules.d $ ls
99-com.rules
pi@raspberrypi:/etc/udev/rules.d $ 

可以列出当前目录下的所有rules文件
下面我们要创建一个rules文件

udev 规则是定义在一个以 .rules
为扩展名的文件中。那些文件主要放在两个位置:/usr/lib/udev/rules.d,这个目录用于存放系统安装的规则;/etc/udev/rules.d/
这个目录是保留给自定义规则的。

定义那些规则的文件的命名惯例是使用一个数字作为前缀(比如,50-udev-default.rules),并且以它们在目录中的词汇顺序进行处理的。在
/etc/udev/rules.d 中安装的文件,会覆盖安装在系统默认路径中的同名文件。
引用:https://zhuanlan.zhihu.com/p/33932734

sudo vi 100-echo-usb-event.rules

输入

SUBSYSTEM=="usb",ACTION=="add",ATTRS{idVendor}=="0fce",ATTR{idProduct}=="51d9",,RUN+="/usr/local/bin/echo_usb_add.sh"

特别说明,不要无脑照抄,你如果直接复制我的这个,累死你也激活不了的…除非把我手机买了…
udev reuls使用键 == 值对的规则来填写,非数字值应用""引号扩上

操作符的说明

操作符说明
== 和 !=== 是相等操作符,而 != 是不等于操作符。通过使用它们,我们可以确认规则上应用的键是否匹配各自的值。
= 和 :== 是赋值操作符,是用于为一个键赋值。当我们想要赋值,并且想确保它不会被其它规则所覆盖,我们就需要使用 := 操作符来代替,使用这个操作符分配的值,它就不能被改变。
+= 和 -=+= 和 -= 操作符各自用于从一个指定的键定义的值列表中增加或者移除一个值。

键值对的说明

KEYVALUE
SUBSYSTEM - 匹配设备的子系统例:usb、ide
ACTION - 何时触发规则例:add(连接)、remove(断开)
ATTR{} - 大括号中填写要匹配的sysfs规则例:ATTR{idProduct}==“51d9” //产品ID
RUN - 填写你触发规则时运行的脚本例:/home/pi/xxx.sh

另外

想了解更多花活,参考跟我一起写udev规则

接下来该在脚本里填写的路径下创建一个激活黑阈的脚本了
我填写的是/usr/local/bin/echo_usb_add.sh
所以 sudo vi /usr/local/bin/echo_usb_add.sh 新建一个shell脚本

#!/bin/bash

echoLog(){
	logger -s $*
}

echoLog "检测到插入了手机,开始激活黑阈服务"
echoLog "激活中..."
sleep 3
result=$(adb -d shell sh /data/data/me.piebridge.brevent/brevent.sh)
echoLog $result
echoLog "激活黑阈-事件结束"

等等,为什么用到了sleep?
因为手机插上后,马上就进行adb命令激活,会失败的
为保证成功,我保守起见加了一个3秒的sleep,3秒钟后才会开始激活的操作
你可以结合自身情况,缩短这个延时

之后保存吧!给这个脚本设置好文件权限sudo chmod 777 /usr/local/bin/echo_usb_add.sh

好,大功告成,现在该设置你的手机了

现在我手机上的黑阈没有被激活
在这里插入图片描述
打开开发者选项 - 打开USB调试,插入吧,如果你是第一次的话,手机会提醒你。
在这里插入图片描述
好,输入

pi@raspberrypi:/usr/local/bin $ adb devices
List of devices attached
BH905DDM4S	device

看到这个 BH905DDM4S 没有?这是我的手机序号,不是你的,你要是没有,说明adb没有识别到你的手机
下面,手动测试脚本能否激活黑阈了

pi@raspberrypi:~ $ cd /usr/local/bin/
pi@raspberrypi:/usr/local/bin $ ./echo_usb_add.sh 
<13>May 19 21:32:28 pi: 检测到插入了手机,开始激活黑阈服务
<13>May 19 21:32:28 pi: 激活中...
<13>May 19 21:32:31 pi: 激活黑阈-事件结束
pi@raspberrypi:/usr/local/bin $ 

激活成功激活失败都这么显示的,你可以根据手机的反馈来判断黑阈是否激活成功
如果找不出原因可以查查日志呢vi /var/log/syslog
或者tail -f /var/log/syslog然后插上手机,实时看一下日志
在这里插入图片描述
提示窗口没了,并且显示应用列表了,就说明黑阈激活成功了,或者你可以疯狂的按手机的HOME键,手机会有悬浮通知的
在这里插入图片描述
稳妥,现在可以重启你的树莓派或输入udevadm control —reload
开机后无需登录,插上数据线就行!
Enjoy you 全自动黑阈激活器

相关链接/教程

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值