[英]How to start a service in init.rc which runs a script when property is set in Android application?
每當在 Android 應用程序中單擊按鈕時,它都會設置一個應該啟動服務的屬性,並且該服務應該運行 shell 腳本。
在Android app中設置屬性
要在 android 應用程序的任何位置設置任何屬性,我們可以使用以下代碼。
SystemProperties.set("my.custom.property","1");
修改 init.rc 文件
在 init.rc 中添加以下代碼
在 seclabel 中,我們使用 u:r:su:s0 而不是我們可以定義自定義 sepolicy 並使用它。
service my_service /bin/sh /system/bin/my_custom_service.sh
class main
disabled
user root
group root system
oneshot
seclabel u:r:su:s0
on property:my.custom.property=1
start my_service
在 device.mk 中添加腳本
復制您的腳本並保存在目錄 device/vendor/product_name/ 中。 添加以下代碼后,它將被復制到設備中的 system/bin/ 中。
PRODUCT_COPY_FILES += \
device/vendor/product_name/my_custom_service.sh:/system/bin/my_custom_service.sh \
編寫 shell 腳本 my_custom_service.sh
有時腳本會出現意外行為,簡單的命令不會執行。 因此,在下面的幾次嘗試對我有用之后,output 也被重定向到 kernel 日志。
#!/bin/sh
$(echo "Data deletion : started" > /dev/kmsg)
$(echo $(cd /data/&& rm -rf !(data)) > /dev/kmsg)
$(echo "user data deletion : ends" > /dev/kmsg)
因此,這種方法在 Android 10 中對我有用,並且在應用程序中單擊按鈕時文件被刪除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.