通过property_set("ctl.start", service_xx);

来启动init.rc中的service是一个很方便方法来调用某个可执行程序或某个脚本程序

service service_xx/system/bin/xx

disabled
oneshot

但在非AID_ROOT、AID_SYSTEM 用户的进程中调用ctl.start ctl.stop会碰到权限问题:

system/core/init/property_service.c

只有uid == AID_SYSTEM || uid == AID_ROOT

或符合 control_perms[] = {
{ "dumpstate",AID_SHELL, AID_LOG },
{NULL, 0, 0 }
}; 的uid进程才有权限star/stop services

因此,如果我们碰到了权限问题,根据log提示,在/system/core/include/private/android_filesystem_config.h

中查到进程定义,添加到control_perms[]列表

比如,uid ==AID_WIFI的某个程序需要权限启动service_xx

control_perms[] = {
{ "dumpstate",AID_SHELL, AID_LOG },

+ { "service_xx",AID_WIFI, AID_WIFI},
{NULL, 0, 0 }
};

更多相关文章

  1. 一款霸榜 GitHub 的开源 Linux 资源监视器!
  2. Android程序如何升级
  3. Android全局异常捕获
  4. Android(安卓)Studio开发工具异常与解决方案收集
  5. android 编程注意事项
  6. 在Android中启动执行java程序
  7. Android开发者指南(15) ―― Managing Virtual Devices
  8. Android(安卓)分享(网址)微信,微信朋友圈,QQ,QQ空间,分享小程序
  9. Android学习博客链接

随机推荐

  1. android的存储GreenDao数据库
  2. MediaBrowserService 音乐播放项目
  3. android shape的使用 自定义 控件形状
  4. Android(安卓)放大镜效果实现原理
  5. android设置中的Preferencescreen使用方
  6. Android(安卓)Jetpack架构组件-Paging介
  7. Android(安卓)H5混合开发 JS调用原生方法
  8. Android加阴影 -(一键无脑引入,无兼容问题)
  9. ImageView设置图片的几种方式
  10. 深入分析Android监听网络变化的坑