ESC
科技 1 分钟阅读

不再拆机飞线:借助 ACC 实现旧手机直供电「改造」

本文介绍通过开源模块ACC对旧手机进行直供电改造,无需拆机飞线。文章讲解了ACC基于读写系统底层充电参数控制充电的原理,需root并安装Magisk,推荐使用Termux命令行配置,并详细说明acc -t测试充电开关的运作逻辑与报告解读。

来源:少数派

多年的折腾经验教会我,想用好一个新工具,得先通读一遍「说明书」,尽量做到「知其所以然」,是避免弯路的最佳途径。

所幸,在该项目的 GitHub 主页上作者对它的运作原理做了详细的说明,让我不必大费周章地去他处查找。通过阅读,我得以了解到 ACC 是通过读写系统底层的充电参数,来接管手机硬件原本的充电行为,进而实现对充电的精准控制。

简而言之,如果说原生系统的充电逻辑是「傻瓜式」——插上充电器就开始充电,充满了就停——那装上 ACC 就相当于给手机系统加装了一个「充电开关」。我们可以自由设置手机的充电过程(例如电量降到 40% 就启动充电,升到 60% 就自动停止等),甚至可以更进一步让电流绕过电池直接为主板供电。这也正是我想要实现的「直供电」模式。

在对 ACC 有了基本的了解之后,接下来就是将它安装到手机中,并配置好相关工具。其中第一步是获得手机系统的 root 权限。

受限于文章篇幅,且 root 的方式往往会因手机品牌、型号的差异而不同,所以这一步我建议参考极客湾的视频:《玩机必看!带你入坑安卓刷机,小白也能看懂的 ROOT 基础指南来啦!》来进行操作。我也是参考着视频一步步操作之后,成功获得了手里这台小米 Note 3 的 root 权限,并顺利安装上了 Magisk(它是一个 root 后,能让手机安全安装各种功能模块的框架)。

重启后 ACC 模块默认会随着 Magisk 的启动自动在后台运行。需要注意的是,由于它本身是一个纯后台服务,因此主屏幕上不会出现任何启动图标。如果你偏好图形化界面,可以考虑单独安装 ACCA 或 ACC Settings 这两个第三方客户端。不过由于二者均已停止维护,对新版 ACC 的兼容性较弱,因此强烈推荐直接使用命令行工具 Termux 来设置 ACC。

Termux 的安装过程与安装其它 APK 无异,同样在项目的 Releases 页面下载对应型号的 .apk 包即可。

Termux 安装完成后就可以通过它来执行命令来设置 ACC 了。不过在此之前,建议先执行一次pkg update && pkg upgrade -y命令,确保软件源与依赖都是最新的(此步骤为可选操作,非必要)。

如果过程中提示更新失败,大概率是因为国内网络直连受限,通常将软件源切换至国内镜像即可解决。具体操作如下:

acc -t 运行该命令后,ACC 会自动开始测试可以适配手机的充电开关(测试时间有点长,请耐心等待)。测试完成后,除了会在当前终端窗口中显示结果外,还会在 sdcard/Download 目录下自动生成一份 .log 文件。

许多人可能会和我一样,初次看到测试结果的时候脑袋完全是发懵的:这么长的结果哪些是可用的?我该怎么选择?

Switch works ✅ battIdleMode=true 但若是你想更深入地了解这份测试报告背后的含义,就不得不了解一下acc -t这条命令背后的运作原理了:

Android 手机的充电控制本质上依赖一个基本逻辑:系统向充电控制器发送「开始充电」或「停止充电」的指令。但由于安卓生态的高度碎片化,不同的设备制造商(OEM)、不同的芯片组(SoC)、不同的 Android 版本的「充电控制」指令各不相同,所以并不存在一条能「通杀」所有机型的统一指令。

那怎么办呢?ACC 的解决方案是内置了一个作者从大量设备中收集而来的充电控制参数列表,而acc -t这个命令,就是用来逐一验证列表中开关是否有效的命令。测试过程与结果会完整记录在测试报告中,以下面我测试出的这段为例:

6/33: battery/constant_charge_current_max 3300000 0 off (0) -6mA Idle on (3300000) -6mA Idle on (3300000) -866mA Charging Switch works ✅ battIdleMode=true 首行显示的是充电开关的参数说明:

在第四行中,ACC 再次尝试向系统发送开启充电开关的指令。此时,后两个结果出现了变化:

基于这个变化,ACC 在第五行给出 Switch works ✅ 的结论。并在第六行认为该开关支持 battIdleMode=true(即支持直供电/电池空闲模式)。

由于测试报告里可用的充电开关往往不止一个,例如在我的结果中,除了上面例子中的开关外,还有以下两个开关同样支持直供电: