OnePlus 7 Pro 被我玩到电池爆炸后选用直供电的心路历程
#android,#无电池,#直供电,#adb,#fastboot,#magisk-module,#magisk,
我的一加7pro手机被我玩的电池爆炸了,就是发光冒烟别眨眼的那种啪,然后我就不想换电池了想改直供电,于是在淘宝上购买了oppo通用直供电电线
但直供电会有问题,这个编译可以低成本解决吗?
- 充电宝供电需要重启两次才能开机
- 手机熄屏会关机
- 手机系统会模拟掉电
- 关机状态连接电源和数据线会反复重启
- 进入fastboot或者从fastboot重启时连接数据线会反复重启,需要拔掉数据线仅在直供电的情况下才能手动重启成功
遇到的问题解析:
| 问题 | 根本原因 | 能否低成本解决 |
|---|---|---|
| 1. 充电宝供电需重启两次才能开机 | 启动初期电压不稳定/电池状态不满足启动条件 | 不知道可能换个电流大的充电器可以?充电器是 5V,3A; 充电宝的话是5V,4.5A 可以正常开机 |
| 2. 熄屏会关机 | 电池状态为"无",触发低电量或电源中断保护 | 开发者模式开启屏幕常亮,锁屏设置永不熄屏? |
| 3. 系统模拟掉电(比如电量跳变、关机) | 电池电量逻辑或热管理导致异常掉电 | 可通过adb修改电池管理策略,还要解决重启自启动问题? |
| 4. 关机状态接电源会反复重启 | PMIC 电源循环 / 无电池电压反馈导致异常 | 多为硬件行为,不一定能完全解决 |
| 5. Fastboot 接线会循环重启 | bootloader 层电源检测失败 | 属于 bootloader 阶段,无法控制 |
大部分问题都无法解决,真是太好了🥹
我本以为要编译内核模拟假电池呢,那太累了,我也不懂电池检测逻辑啊,真是太好了🥹
就在我痛苦的浏览内核的时候,我突然想到 Magisk app 启动后会自动运行模块,太好了思路有了,真是太好了🥹
我立刻有了一个思路在本地创建了一个目录 batteryhack 里面两个文件,一个是自定义模块信息,另一个是执行的脚本,然后开机自启动,嘿嘿真是我都快疯了,真是太好了🥹
- 开启 Settings -> System -> Developer options -> USB debugging
- 连接电脑,看到手机有提示就直接 allow 允许授权
- adb shell 进入手机 shell ,编写脚本
adb shell
mkdir -pv /sdcard/batteryhack
# pushd /sdcard/batteryhack 2>/dev/null
cd /sdcard/batteryhack
创建 module.prop 文件
# 自定义模块信息
cat << '469138946ba5fa' | tee module.prop
id=batteryhack
name=Battery Hack
version=1.0
versionCode=1
author=469138946ba5fa
description=模拟充电 + 开机自动开无线 ADB@5555
469138946ba5fa
创建 service.sh 文件
# 自定义直供电无电池配置
cat << '469138946ba5fa' | tee service.sh
#!/system/bin/sh
while [ "$(getprop sys.boot_completed)" != "1" ]; do sleep 1; done
IF="wlan0"
wait_for_ip() {
local timeout=${1:-60}
local elapsed=0
while [ $elapsed -lt $timeout ]; do
IP=$(ip -f inet addr show "$IF" 2>/dev/null | awk '/inet / {print $2}' | cut -d/ -f1)
[ -n "$IP" ] && return 0
sleep 1
elapsed=$((elapsed + 1))
done
return 1
}
wait_for_ip 60
# --- 添加这八行来强制导入 ADB 公钥,维持权限授予 ---
# 通过 `adb shell cat /data/misc/adb/adb_keys` 即可获取一个标准的 ADB 公钥
# 将 YOUR_PUBLIC_KEY_CONTENT 替换为一个标准的 ADB 公钥,比如 QAAAA......EAAQA= username@domain
#ADB_KEYS_FILE="/data/misc/adb/adb_keys"
#mount -o rw,remount /data
#cat > $ADB_KEYS_FILE << '469138946ba5fa'
#YOUR_PUBLIC_KEY_CONTENT
#469138946ba5fa
#chmod 644 $ADB_KEYS_FILE
#chown system:shell $ADB_KEYS_FILE
#restorecon $ADB_KEYS_FILE
# ------------------------------------
# 模拟电池状态
dumpsys battery set present 1
dumpsys battery set status 2
dumpsys battery set level 98
dumpsys battery set ac 1
# 开启常亮
settings put global stay_on_while_plugged_in 3
settings put system screen_off_timeout 2147483647
# 设置 root ADB + 无线调试
resetprop -n ro.debuggable 1
resetprop -n service.adb.root 1
resetprop -n persist.adb.tcp.port 5555
setprop service.adb.tcp.port 5555
stop adbd
start adbd
# 持续保证 battery 状态 + ADB 状态(每 60s 和 600s)
(
while true; do
dumpsys battery set present 1
dumpsys battery set status 2
dumpsys battery set ac 1
sleep 60
done
) &
(
while true; do
sleep 600
ADB_STATE="$(getprop init.svc.adbd)"
ADB_ROOT="$(getprop service.adb.root)"
if [ "$ADB_STATE" != "running" ] || [ "$ADB_ROOT" != "1" ]; then
# --- 添加这三行来强制导入 ADB 公钥,维持权限授予 ---
# 通过 `adb shell cat /data/misc/adb/adb_keys` 即可获取一个标准的 ADB 公钥
# 将 YOUR_PUBLIC_KEY_CONTENT 替换为一个标准的 ADB 公钥
#AUTHORIZED_KEY="YOUR_PUBLIC_KEY_CONTENT"
#echo -e "$AUTHORIZED_KEY" > /data/misc/adb/adb_keys
#chmod 644 /data/misc/adb/adb_keys
# ------------------------------------
resetprop -n service.adb.root 1
resetprop -n persist.adb.tcp.port 5555
setprop service.adb.tcp.port 5555
stop adbd
start adbd
fi
done
) &
exit 0
469138946ba5fa
返回目录 /sdcard/ 复制 batteryhack 到 /data/adb/modules
# 返回目录
# popd
cd /sdcard/
# 然后通过su权限将文件夹放到 magisk 模块目录 /data/adb/modules
su - root sh -c 'cp -frv /sdcard/batteryhack /data/adb/modules/'
su - root sh -c 'chmod 644 /data/adb/modules/batteryhack/module.prop'
su - root sh -c 'chmod 755 /data/adb/modules/batteryhack/service.sh'
# 退出 adb shell
exit
很好接下来
- 开启 Settings -> System -> Developer options -> Stay awake
- 开启 Settings -> System -> Developer options -> Rooted debugging
- 开启 Settings -> System -> Developer options -> Disable adb authorization timeout
拔掉 typec 数据线重启手机测试看看,因为插上 typec 数据线,在直供电状态下会循环重启,这个没法解决
真是太好了🥹,电量不掉了,无线也可以调试了,真是太好了🥹
Comments
Post a Comment