OnePlus 7 Pro 被我玩到电池爆炸后选用直供电的心路历程

OnePlus 7 Pro 被我玩到电池爆炸后选用直供电的心路历程

OnePlus 7 Pro 被我玩到电池爆炸后选用直供电的心路历程

#android,#无电池,#直供电,#adb,#fastboot,#magisk-module,#magisk,

我的一加7pro手机被我玩的电池爆炸了,就是发光冒烟别眨眼的那种啪,然后我就不想换电池了想改直供电,于是在淘宝上购买了oppo通用直供电电线
0
1
2
3

但直供电会有问题,这个编译可以低成本解决吗?

  • 充电宝供电需要重启两次才能开机
  • 手机熄屏会关机
  • 手机系统会模拟掉电
  • 关机状态连接电源和数据线会反复重启
  • 进入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 数据线,在直供电状态下会循环重启,这个没法解决
    真是太好了🥹,电量不掉了,无线也可以调试了,真是太好了🥹

4

参考

magisk module引导

Comments