使用sh脚本和init.d启动apk文件时遇到的问题

12次阅读
没有评论

问题描述

尝试在一个Android设备启动时安装apk文件,并编写了shell脚本来实现此功能:

#!/system/bin/sh
pm install /data/local/tmp/MagiskManager-v7.1.1.apk

在adb shell中运行该脚本时,出现了错误。尽管将apk文件放置在/data/local/tmp目录下,问题仍然存在。init.d也未能成功执行该脚本。

解决方案

1. 检查文件路径和分区挂载状态

确保安装apk的命令在正确的时机执行。由于boot过程中的权限限制或其他因素(如数据分区尚未完全加载),可能会导致上述错误。因此,在执行文件操作之前,确认/data/local/tmp目录已被正确挂载。

解决步骤:

  • 在shell脚本中首先检查指定路径的挂载状态。
if [ -e /data/local/tmp ]; then
    echo "数据分区已挂载"
else
    echo "数据分区未挂载,请稍后再试。"
fi

2. 使用init.d服务

由于直接通过shell直接运行app可能遇到权限问题,可以考虑将脚本代码迁移到init.d服务中,确保在设备启动时执行正确的安装流程。

具体步骤:

  1. 创建一个名为99_install_apk的脚本文件(需要按照系统命名规则进行调整),内容如下:
#!/system/bin/sh
if [ -e /data/local/tmp/MagiskManager-v7.1.1.apk ]; then
    pm install /data/local/tmp/MagiskManager-v7.1.1.apk
else 
    echo "apk文件未找到,请检查路径。"
fi
  1. /system/etc/init.d/目录下创建同名的符号链接,指向该脚本。
ln -s /data/local/tmp/99_install_apk /system/etc/init.d/

3. 更新Magisk Manager版本 (建议使用更新版)

尽管原问题与apk安装本身无直接关系,但考虑到原文提及的设备老版运行时存在的反复重新启动后返回旧版本的问题,为了确保系统的安全性和兼容性,应当升级至最新稳定版。可以参照官方文档或GitHub资源进行升级操作。

4. 确保脚本和apk文件正确

再次检查apk文件是否放置在正确的位置,并且确保所有必要的权限已被授予,以便这些文件能够被安装程序访问。

注意事项:

  • 在执行此方案前,请备份重要数据,以免出现不可逆的操作。
  • 对于定制系统中的设置应用,确保存储完整签名版本,并适时更新至最新版以保证系统的运行性能与安全。
  • 若在具体环境中遇到其他限制,可能需要进一步分析其特性进行调整。

正文完