[技术]安卓手机(Android)通电自动开机(关机状态下)教程

作者: hackliu 分类: 技术文章 发布时间: 2022-01-06 16:52

目的需求:在手机关机状态下,若是通电,则自动开机.

使用场景:手机做4G路由器热点使用;备用手机常年通电做转发短信未接来电;做车载导航行车记录仪等;

方法思路:确定手机关机状态下充电时会调用什么脚本命令,然后在脚本命令中添加入重启指令。

步骤预览:

  1. 提取手机boot.img镜像

  2. 解包boot.img镜像

  3. 修改init.rc文本

  4. 打包boot.img

  5. 刷入修改后的boot.img到手机

  6. 完成,测试

实践环境:

  • 手机: 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线,数秒后自动开机.

  • 完成.

参考资料

  1. 安卓6.0+关机状态下通电自动开机方案

  2. 把你的旧手机改造成车载导航

  3. 车子点火手机自动开机(关机状态下)的方法

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

邮箱地址不会被公开。 必填项已用*标注