You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android中通过设置属性触发init.rc中的服务执行Shell脚本

实现Android应用触发init.rc服务执行Shell脚本的方法

1. 配置init.rc中的监听服务

首先在init.rc或对应分区的init.xxx.rc(如vendor分区的配置文件)中定义服务与属性监听规则:

# 定义要执行的服务
service custom_script_service /system/bin/sh /vendor/bin/my_task.sh
    class main
    user root
    group root
    disabled  # 默认禁用,仅触发时启动
    oneshot   # 脚本执行完成后自动退出

# 监听属性变化触发服务
on property:app.trigger.custom=1
    start custom_script_service
    # 重置属性避免重复触发
    setprop app.trigger.custom 0

说明:

  • disabled:确保服务不会随系统启动自动运行
  • oneshot:适合一次性执行的脚本场景,若需常驻可移除该属性
  • on property:xxx=yyy:当指定属性被设为对应值时,触发后续启动命令

2. 准备目标Shell脚本

编写业务逻辑脚本(示例为/vendor/bin/my_task.sh),并配置可执行权限:

脚本示例:

#!/system/bin/sh
# 写入自定义业务逻辑
echo "Service triggered at $(date)" > /data/local/tmp/trigger_log.txt
# 其他命令示例:am start -n com.example.app/.MainActivity

权限配置:

编译阶段可通过Android.mk配置:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := my_task.sh
LOCAL_MODULE_CLASS := EXECUTABLES
LOCAL_SRC_FILES := my_task.sh
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR_EXECUTABLES)
include $(BUILD_PREBUILT)

或刷入设备后手动设置:

chmod 755 /vendor/bin/my_task.sh

3. Android应用中触发属性设置

在按钮点击事件中调用系统API设置触发属性,注意应用需为系统应用或持有平台签名:

点击事件代码:

button.setOnClickListener(v -> {
    try {
        // 设置触发属性,需导入android.os.SystemProperties
        SystemProperties.set("app.trigger.custom", "1");
        Toast.makeText(this, "服务已触发", Toast.LENGTH_SHORT).show();
    } catch (Exception e) {
        e.printStackTrace();
        Toast.makeText(this, "触发失败", Toast.LENGTH_SHORT).show();
    }
});

权限与身份配置:

在AndroidManifest.xml中添加系统权限:

<uses-permission android:name="android.permission.SET_DEBUG_APP" />

同时将应用部署到/system/app或/vendor/app目录,确保以系统应用身份运行。

4. 核心注意事项

  • 属性命名需遵循反向域名规范(如com.myapp.trigger),避免与系统属性冲突
  • 脚本需放置在系统可访问路径(如/system/bin、/vendor/bin),不可放在/data目录(init进程启动时/data可能未挂载)
  • 若脚本需常驻运行,移除oneshot属性并确保脚本内有循环逻辑,防止服务启动后立即退出

内容的提问来源于stack exchange,提问作者Nishant raj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 10:00:52