[技术]安卓手机(Android)通电自动开机(关机状态下)教程
目的需求:在手机关机状态下,若是通电,则自动开机.
使用场景:手机做4G路由器热点使用;备用手机常年通电做转发短信未接来电;做车载导航行车记录仪等;
方法思路:确定手机关机状态下充电时会调用什么脚本命令,然后在脚本命令中添加入重启指令。
步骤预览:
-
提取手机boot.img镜像
-
解包boot.img镜像
-
修改init.rc文本
-
打包boot.img
-
刷入修改后的boot.img到手机
-
完成,测试
实践环境:
-
手机: Redmi Note5; Android 版本 9; MIUI 版本10 9.9.3开发版;
-
电脑: windows10
-
工具: ADB, Fastboot, Bootimg
-
链接:https://pan.baidu.com/s/1cS7hPbuNwi8GZi_awOgfyw
-
提取码:hhe8
-
1. 提取手机boot.img镜像
-
1.1. 手机打开USB调试(开发者选项)
-
1.2. 手机USB连接电脑
-
1.3. 在CMD窗口cd到adb.exe的路径,输入“adb devices”来检测一下链接状况。
-
C:\platform-tools>adb devices List of devices attached 63d76abf device #连接成功
-
1.4. 输入“adb shell”,回车,再输入“su”回车,这注意看,提示符应该已经从$符号变成了#号。
-
1.5. 输入命令搜索"find /dev/block/platform/ -name by-name"来找到"by-name"文件夹路径
2|:/dev # find /dev/block/platform/ -name by-name find /dev/block/platform/ -name by-name find /dev/block/platform/ -name by-name /dev/block/platform/soc/c0c4000.sdhci/by-name //找到需要的路径
-
1.6. 输入命令列出搜索到的文件夹"ls -al /dev/block/platform/soc/c0c4000.sdhci/by-name",找到boot对应文件名称为"mmcblk0p58"
ls -al /dev/block/platform/soc/c0c4000.sdhci/by-name total 0 drwxr-xr-x 2 root root 1320 1970-01-01 08:02 . drwxr-xr-x 3 root root 1380 1970-01-01 08:02 .. lrwxrwxrwx 1 root root 21 1970-01-01 08:02 abl -> /dev/block/mmcblk0p25 lrwxrwxrwx 1 root root 21 1970-01-01 08:02 ablbak -> /dev/block/mmcblk0p26 lrwxrwxrwx 1 root root 21 1970-01-01 08:02 apdp -> /dev/block/mmcblk0p11 lrwxrwxrwx 1 root root 21 1970-01-01 08:02 bk1 -> /dev/block/mmcblk0p49 lrwxrwxrwx 1 root root 21 1970-01-01 08:02 bk2 -> /dev/block/mmcblk0p51 lrwxrwxrwx 1 root root 21 1970-01-01 08:02 bluetooth -> /dev/block/mmcblk0p38 lrwxrwxrwx 1 root root 21 1970-01-01 08:02 boot -> /dev/block/mmcblk0p58 //找到boot对应文件名称为"mmcblk0p58"
-
1.7. 开始提取,输入“dd if=/dev/block/mmcblk0p58 of=/sdcard/boot.img”,这里的"mmcblk0p58"就是刚才上面找到的boot对应文件.
-
1.8. 把提取的"boot.img"文件拷贝到电脑
-
2. 解包boot.img镜像
-
2.1. 电脑上把拷贝的boot.img和bootimg.exe放在相同目录下。最好单独建个目录,把这两个文件放进去,因为后续会产生很多文件,以免混乱。
-
2.2 . CMD到bootimg.exe目录下执行“bootimg –unpack-bootimg” 解包 //路径不能有中文.否则报错
C:\platform-tools\bootimg>bootimg --unpack-bootimg arguments: [bootimg file] bootimg file: boot.img output: kernel[.gz] ramdisk[.gz] second[.gz] base: 0x0 ramdisk_addr: 0x1000000 second_addr: 0xf00000 tags_addr: 0x100 page_size: 4096 name: "" cmdline: "console=ttyMSM0,115200,n8 androidboot.console=ttyMSM0 earlycon=msm_serial_dm,0xc170000 androidboot.hardware=qcom user_debug=31 msm_rtb.filter=0x37 ehci-hcd.park=3 lpm_levels.sleep_disabled=1 sched_enable_hmp=1 sched_enable_power_aware=1 service_locator.enable=1 swiotlb=1 firmware_class.path=/vendor/firmware_mnt/image loop.max_part=7 buildvariant=user" padding_size=4096 arguments: [ramdisk file] [directory] ramdisk file: ramdisk.gz directory: initrd output: cpiolist.txt compress: True
-
3. 修改init.rc文本
-
3.1. 解包boot.img后会获得"initrd"文件夹,里面有我们需要修改的"init.rc"文件
-
3.2. 使用EmEditor修改init.rc文件,在"on charger"这一项目添加"setprop sys.powerctl reboot"
on charger class_start charger #这段自带不用删也可以,而且听说某些系统需要先进入charger流程,否则会卡第一屏 setprop sys.powerctl reboot #添加进这段
-
3.3. 修改init.rc完毕,保存.
4. 打包boot.img
-
4.1. 现在要把修改的文件重新打包成boot.img。还是回到刚才的cmd窗口。输入“bootimg –repack-bootimg”回车。程序会自动把文件打包回去。现在目录下就会变成3个文件,一个程序bootimg.exe,一个原始文件boot-old.img,一个新生成的文件boot-new.img。
-
5. 刷入修改后的boot.img到手机
-
5.1. 把boot-new.img拷贝到adb.exe所在的目录,并且重命名为boot.img,在此目录打开命令窗口。
-
5.2. 把手机进入到fastboot的状态。关机,同时按住音量减和电源键。这时你的手机会进入fastboot的状态,准备开始写入boot.img。
-
5.3. 在命令窗口输入“fastboot flash boot boot.img”回车,开始刷写boot.img。因为文件很小,几秒钟就提示完成了。
-
5.4. 输入“fastboot reboot”回车,会重启手机
-
6.完成,测试
-
6.1 操作完以上步骤,就实现了安卓关机状态通电自动开机.
-
6.2 测试1: 关机,保持usb线供电,数秒后自动开机.
-
6.3 测试2: 关机.拔掉usb线,然后插入usb线,数秒后自动开机.
-
完成.
sul
2022年3月27日 17:57
好像只能用http访问了,https访问会被万网阻止
hackliu
2022年6月18日 23:12
HTTPS证书过期了,懒得搞了