我習慣在Linux引導時運行腳本,但是我不確定如何在Android中執行此操作。我想在啟動時啟動SSH守護進程,因此我將始終能夠連接。如何在Android啟動時運行任意腳本?最好在Dalvik之外進行此操作。
我習慣在Linux引導時運行腳本,但是我不確定如何在Android中執行此操作。我想在啟動時啟動SSH守護進程,因此我將始終能夠連接。如何在Android啟動時運行任意腳本?最好在Dalvik之外進行此操作。
環顧我的Android文件系統時,我發現它確實有一個 /etc/init.d /
目錄。在那兒偷看之後,我發現 /etc/init.d/20userinit
包含以下行:
if [-e /data/local/userinit.sh ];然後登錄-p -i -t userinit“執行/data/local/userinit.sh”; busybux chmod + x /data/local/userinit.sh; logwrapper / system / bin / sh /data/local/userinit.sh; setprop cm.userinit.active 1; fi;
當然,正是我所需要的,我在計算機上編寫了以下腳本,然後將其推送了到我的設備上:
#!/ system / bin / sh dropbear -s -g
(通過 scp userinit.sh推送到設備電話:/data/local/userinit.sh
,請注意:])
重新啟動設備,然後運行 ps | grep“ [d] ropbear”
,當然,它正在運行。太酷了!
/data/init.sh
在引導時運行,如果您具有root用戶,則可以根據需要對其進行編輯。注意;)
編輯::顯然,您可能還需要將編輯後的腳本拖入啟動映像中。有關如何執行此操作的信息,請參見: http://forum.xda-developers.com/showthread.php?t=443994
查看 / etc /
目錄。通常將其放在您可以作為RW掛載的 / system /
分區中:
$ ls -l / etclrwxrwxrwx 1 root root 2009年1月11日/ etc -> / system / etc $ su $ mount -o remount,rw / system $ chmod o + w / system / etc#for“ adb push”
上面的某些步驟可能被替換為:
$ adb root $ adb重新安裝
,然後重新安裝RO:
$ chmod ow / system / etc $ mount -o remount,ro / system
現在,您的任務是查找可執行文件或 * rc
文件,對其進行修改以實現目標:
$ find / etc -type f -perm + 110 $ find / etc -name“ * rc” $ find / etc -name“ init *” $ grep -R / data / etc $ grep -R / system / etc
有關每個候選者的Google信息,以了解如何使用此文件。
包括自定義腳本的最佳候選者為:
$ grep服務/init*.rc
由於每台設備的唯一性,您可能需要對搜索條件進行猜測...
例如,我發現 PATH
env var,現在每次執行 adb shell
時,我的PATH中都有Busybox符號鏈接!
另請參見困難的方式(如果您無法找到魔術文件): https://stackoverflow.com/questions/9768103/make-persistent-changes-to-init -rc
我嘗試了所有這些方法,但對我來說都不起作用。但是,什麼起作用是基於lord-ralf-adolf在這裡的回答如何在CM12.1的引導程序中運行腳本?
基本上,找到文件 /system/etc/install-recovery.sh
,然後在開始的 /data/init.sh &
然後
touch /data/init.shchmod 755 /data/init.sh
完成!您現在可以放任何東西想要在 /data/init.sh
中運行,它將在啟動時運行。如果文件 /system/etc/install-recovery.sh
不在您的系統中,則此答案不會為你工作。不要為創建它而煩惱。
如果已安裝 magisk ,則可以將.sh放在:
/sbin/.magisk/img/.core/service.d /
或
/sbin/.magisk/img/.core/post-fs-data.d /
不要忘記使其可執行: chmod + x your-script.sh
。
更多信息: https://github.com/topjohnwu/Magisk/blob/master/docs/guides.md#boot-scripts
在Android 5之前的版本中,當SELinux並非 enforced
時,情況很簡單。您可以將代碼放在任何腳本中,也可以將二進製文件替換為在啟動時以root特權執行的腳本。另一種方法是定義定制的 init
服務,以專門從某個目錄中批量執行腳本。
基於這些方法,定制ROM開發人員引入了不同的 pseudo- init .d
現象,例如 /etc/init.d /
, /etc/install-recovery.sh
, / etc / init .qcom.post_boot.sh
, / system / bin / debuggerd
, /data/init.sh
, /data/local/userinit.sh
, /data/local/init.d /
等。
但是,使用UID 0
運行但在受限制的SELinux上下文中的進程很無奈。在 init.rc
文件中使用 u:r:init:s0
上下文啟動的服務甚至無法從執行shell腳本
/ system / bin / ,因此需要修補SELinux策略以注入 unrestricted 上下文,例如Magisk 定義 u:r:magisk:s0
。之後,可以直接作為 init
服務或從類似 init.d
的目錄中運行腳本。
有關詳細信息,請參見如何在啟動時運行可執行文件並使其保持運行狀態?
簡單的方法(工作):
在腳本中準備開機自檢命令,例如/ system / xbin / post-boot(設置exec perm)
在/system/etc/init.qcom.post_boot.sh
例如:
完成!
(如果無法找到qcom post_boot(高通設備),查找所有post_boot腳本)