如何在CM12.1的启动时运行脚本?


9

我能找到的与此相关的大多数问题都追溯到2011年左右,因此此后发生的变化也许并不奇怪。我尝试了很多事情,但没有任何结果。

中有一些脚本/system/etc/init.d(也显示在/etc/init.d我的设备下)。特别是,有一个00banner脚本应该记录欢迎消息。欢迎消息永远不会出现在logcat中。

我在这里放置了自己的脚本,最终将其简化为:

#!/system/bin/sh
log -t mytest Testing

没有。除非通过终端手动运行,否则从不出现在logcat中。然后就可以了。

这里还有一个90userinit文件,/data/local/userinit.sh如果存在则调用。我用与上面相同的内容创建了它。同样,logcat中什么也没有出现。确实,这并不奇怪,因为如果00banner不运行,那么也不会。

我搜索了名为“ init.rc”的任何东西,但设备上任何地方都找不到类似的东西。

我所有的脚本都有755个权限。

我还能尝试什么?(除了为我运行脚本的应用程序)


要运行哪个脚本,为什么?
unforgettableidSupportsMonica

不幸的是,我所做的少量挖掘导致“无法在自定义rom上使用”。显然,CM有自己的处理方式。不确定您是否想要弄乱它。但显然您可以构建自己的boot.img文件,并向其中添加自定义脚本。也许这对你有用。
jer3my 2015年

@ jer3my我非常高兴地接受这一点作为实际答案,如果您拥有我认为有说服力/权威的链接,则可以分配赏金。
RomanSt

我将在几秒钟内发布答案,还发现其他可能会对您有所帮助的东西。
jer3my 2015年

init.rc是initramfs的一部分,它在boot.img中是不包含在内的。您可以使用unmkbootimg之类的工具来提取它,对其进行编辑,然后使用mkbootimg对其进行重建,这两个工具在cm项目中可用,告诉我您使用的是什么正在使用,我会为您编译它们:D
lord-ralf-adolf

Answers:


5

有一种简单的方法可以向任何版本为4.0及更高版本的扎根android系统添加init.d支持,谷歌制作了一个脚本,该脚本在启动时以超级用户身份运行,该脚本install-recovery.sh用于在每次启动时重新刷新库存恢复,他们认为这是一个很好的选择防止自定义恢复的安全性,但它打开了一个新漏洞,用户可以利用该漏洞伪造init.d功能。 依赖关系:为了使此方法起作用,您需要以下内容

  1. 忙箱安装了run-parts符号链接到您的路径,例如/system/xbin
  2. 显然,您将需要一个/system能够安装为rw
  3. 内核版本无关紧要。

方法一:(最简单的方法!)

  1. 下载此APK(免费使用,请勿镜像,感谢XDA的@Ryuinferno)。
  2. 像任何普通应用一样安装apk。
  3. 启动应用程序。
  4. 点击激活!就这样,您就可以全部支持setinit.d了。您可以单击“测试”按钮或重新启动手机,以查看是否退出了init.d脚本。
  5. 您可以卸载不会影响init.d支持的应用程序

方法二:(难度:中等)

  1. 下载此zip并将其解压缩,然后将init.sh放在您的sdcard上(例如,/sdcard它可以从设备更改为其他设备。

  2. 现在打开终端,或adb shell从计算机上使用并运行脚本。
    su
    cp /sdcard/init.sh /data/tmp/init.sh
    chmod 777 /data/tmp/init.sh
    /data/tmp/init.sh

该脚本将运行,并要求您重新启动两次,即您已正式拥有init.d支持:D

参考: [MOD] [APK + SCRIPT + ZIP]为任何不需要自定义内核的电话启用Init.d !!!


由于zip文件托管在XDA上,因此必须遵循或了解某种教程。你能提到它的链接吗?我需要在其中搜索其他内容。:)
Firelord

1
@Firelord是的,该脚本不是我的脚本,它用于其他目的,我从这里开始查看单个帖子> forum.xda-developers.com/…,完整的教程是有关xposed和nexus 6 >> forum.xda的-developers.com/nexus-6/general/...
主-拉尔夫-阿道夫·

@Firelord找到答案中包含的新参考链接:)
lord-ralf-adolf

谢谢,除非有更简单的方法出现,否则我可能会给您赏金。但老实说,我认为添加一个shell脚本以在启动时运行就像在CM之类的东西上做过的最简单的事情。显然不是。它比编写可以完成我想要的功能的boot_completed应用程序要复杂得多,所以我将改为这样做。
RomanSt

@romkyns old cm默认情况下支持init.d,但是自从成为一家公司以来,他们的方式已经改变,尽管init.d问题在具有严格selinux策略的新棒棒糖版本上/ boot_completed也是您和您这样做的一种方式说会更简单
lord-ralf-adolf

2

编辑:我看到结束发布,这是一种方法,我将尝试在没有应用的情况下尽快添加(不在家中,使用移动设备发布),但是如果其他方法不起作用,则可以使用此方法。

您可以尝试使用名为Tasker的应用程序。

它的价格为3.29美元,需要root访问权,但它可以运行Shell脚本。另外,它具有试用版,因此您可以在购买前尝试。

首先创建任务。转到任务选项卡,点击+号,输入任务名称。现在再次输入+号,然后输入shellfilter。您将找到选项Run Shell,选择它,然后根据需要进行配置。

之后,返回第一个标签-个人资料,点击+号以创建新标签。选择事件作为类型,进入系统,然后选择设备启动。返回,然后将要求您选择任务。现在选择之前创建的任务,您就可以开始了!


1

这要求您刷新一个zip,但是您可以将脚本放在/ system / etc / startup中,然后它们应该会自动从手机启动。

http://forum.xda-developers.com/showthread.php?t=2664645

也是从我在问题下的评论。我尝试查看历史记录,但找不到人们声称CM具有自己的引导方式来运行脚本的链接。

编辑。经过进一步的挖掘,可以说不是CM,它对脚本也有自己的作用。它的内核。并非所有内核都支持android的init.d。如果发布您正在使用的设备。我可以四处寻找支持Ya引导时支持自定义脚本的内核。


0

在CM12.1的终端中执行脚本文件时,我也遇到同样的问题。解决方案是将脚本复制到/data文件夹并执行。因此,我认为CM 12仅允许从特定位置执行脚本。


0

简单方法(工作):

  1. 在脚本中准备您的启动后命令,例如/ system / xbin / post-boot(设置exec perm)

  2. 在/system/etc/init.qcom.post_boot.sh的末尾添加上述自定义脚本路径

例如:

回声/ system / xbin / post-boot >> /system/etc/init.qcom.post_boot.sh

做完了!

(如果找不到qcom post_boot(高通设备),请查找任何post_boot脚本)


-1

按照以下步骤在引导时运行脚本。(必需adb)

  1. 亚行根
  2. 亚行重新安装
  3. 亚行拉/init.rc
  4. 编辑init.rc添加行以执行类似sh test.sh的脚本
  5. 亚行推送init.rc /
  6. 亚行外壳
  7. chmod 755的init.rc
  8. adb重新启动

它对我有用。希望对您有帮助。


1
这种方法根本不起作用。初始rootfs的内容(如init.rc)是虚拟磁盘的一部分,该虚拟磁盘在每次引导时从设备闪存中恢复。您需要直接在设备闪存的正确分区修改RAMDISK
除以零

比您可以添加到/system/etc/init.qcom.wifi.sh
DreamCoder

1
此方法不起作用,init.d无法推送!它是initramfs的一部分,需要在boot.img上进行编辑,然后再进行刷新,而对于init.qcom.wifi.sh,它是特定于设备的,您不能以此为一般
准则
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.