http://topic.csdn.net/u/20100120/13/376b0dd0-3d38-4587-94f6-1759123cdbcc.html?73205

在 [Mokoid ] 的 LedTest 範例裡,找到 [AndroidManifest.xml ] 檔案。這個檔案為應用程式的「交貨清單」;在開發 LedTest 的過程中,我們加入了一個屬性如下:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.mokoid.LedTest"android:sharedUserId="android.uid.system"
>

原來,ServiceManager 會去檢查應用程式的權限;Android 作業系統會根據 UID 做權限管制,這裡所講的 UID 就是 Linux 系統管理面所討論的 User ID,即使用者 ID。在 [frmeworks/base/cmds/servicemanager/service_manager.c ] 裡,找到這段實作:

int svc_can_register(unsigned uid, uint16_t *name)
{unsigned n;

if ((uid == 0) || (uid == AID_SYSTEM))return 1;

for (n = 0; n < sizeof(allowed) / sizeof(allowed[0]); n++)if ((uid == allowed[n].uid) && str16eq(name, allowed[n].name))return 1;

return 0;
}

int do_add_service(struct binder_state *bs,uint16_t *s, unsigned len,void *ptr, unsigned uid)
{struct svcinfo *si;
//    LOGI("add_service('%s',%p) uid=%d/n", str8(s), ptr, uid);

if (!ptr || (len == 0) || (len > 127))return -1;

if (!svc_can_register(uid, s)) {LOGE("add_service('%s',%p) uid=%d - PERMISSION DENIED/n",str8(s), ptr, uid);return -1;}...

涉及到权限管理的两个文件
:

AndroidManifest.xml 和 Android.mk

AndroidManifest.xml

声明权限:

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

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

声明用户组  

<manifest xmlns:android="http://schemas.android.com/apk/res/android
"

package="com.android.inputmethod.pinyin"

android:sharedUserId="android.uid.system">  

Android.mk

中通过证书来声明权限。

LOCAL_CERTIFICATE := platform

需要和manifest中的android:sharedUserId="android.uid.system"对应起来。

platform 权限问题,最好运行
在自己编译
的系统
上,才可以有次特权。

如果修改了应用
的权限。因为老的应用和数据
有关联,因此,

重新下载
应用并且需要尝试做一个恢复出厂设置
或者通过应用管理器删除应用关联的所有数据。

system uid = 1000 是特殊权限进程。

}

AID_SYSTEM 被定義為 1000,即 system server 的 UID。從上述的實作可以了解,ServiceManager 會去檢查應用程式的 UID,當 UID 不符規定時,便無法執行 do_add_service()。

也就是:當應用程式的 UID 不是 1000 時,是沒有權限新增 Android Service 的。所以,在 AndroidManifest.xml 裡加上 android:sharedUserId 屬性的目的在於此:將應用程式的 UID 定義為 android.uid.system 即 1000,程式即可具備新增 Android Service 的權限。

以 Mokoid 所提供的範例為例,「因為我們是在 Android 應用程式裡啟動 Android Service」,因此要特別留意這個部份。典型的新增 Android Service 做法是修改 frameworks/base/services/java/com/android/server/SystemServer.java 檔案,但是,「因為 3M 分支維護策略的理念是儘量避免更動原始的 Android 程式碼」,所以我們採取這種「Start LedService in a seperated process.」的做法。細節請參考 Mokoid 範例。

权限 shareuser certificat Runtime.exec相关推荐

  1. 权限执行[Android开发常见问题-4] RunTime.exec()如何以root权限执行多条指令?

    每日一贴,今天的内容关键字为权限执行 RunTime.exec()这个接口可以说是给我们开发者供给了一个很好的直观操纵底层操纵系统的机遇,但是这个接口的使用还有很多需要注意的问题.由于要完全的分析这个 ...

  2. Runtime.exec 调用OS命令特例

    1. 运行带有重定向的命令. String[] shellCommand = {"/bin/ksh", "-c", "/usr/lib/sendmai ...

  3. [转]Java中Runtime.exec的一些事

    0 预备知识 1 不正确的调用exitValue 2不正确的调用waitFor 3 一种可接受的调用方式 4 调用认为是可执行程序的时候容易发生的错误 5 window执行的良好示例 6 不良好的重定 ...

  4. java runtime shell_java Runtime.exec()执行shell/cmd命令:常见的几种陷阱与一种完善实现...

    Runtime.getRuntime().exec()执行JVM之外的程序:常见的几种陷阱 前言 日常java开发中,有时需要通过java运行其它应用功程序,比如shell命令等.jdk的Runtim ...

  5. java中exec命令,使用Java中的Runtime.exec()執行Windows命令

    Runtime.getRuntime().exec()方法主要用於執行外部的程序或命令.Runtime.getRuntime().exec共有六個重載方法 : 其中public Process exe ...

  6. java runtime 返回值_Java Runtime.exec()注意事项 | 学步园

    转载自:http://blog.csdn.net/flying881114/archive/2011/03/23/6272472.aspx 0. Runtime.exec()用来执行外部程序或命令 1 ...

  7. ※※Java调用Runtime.exec()要注意的问题

    ※※Java调用Runtime.exec()要注意的问题 标签:execJavaRuntime 字体:[默认中大] http://it.superkoo.com/#/topic/479/ 最近开发一个 ...

  8. runtime无法执行grep_如何使管道使用Runtime.exec()?

    慕运维8079593 我在Linux中遇到了一个类似的问题,只不过是"ps-ef_grep找进程".至少使用"ls"可以替换与语言无关(尽管速度较慢)的Java ...

  9. Java Runtime.exec()的使用

    Sun的doc里其实说明还有其他的用法: exec(String[] cmdarray, String[] envp, File dir)Executes the specified command ...

最新文章

  1. 7.08 计算累计差
  2. Centos firewall基本操作
  3. idea 2018.2.2安装
  4. 有关dwr推送的笔记
  5. Java-NIO(三):直接缓冲区与非直接缓冲区
  6. LdCms.NetCore轻量级的网站内容管理系统
  7. Android 系统性能优化(39)---Android内存优化之三:打开MAT中的Bitmap原图
  8. 在Sharepoint Designer 2007 中加入定制的工作流动作
  9. 传统行业生意,现在想要发财
  10. 关于oracle样例数据库emp、dept、salgrade的mysql脚本复杂查询分析
  11. matlab图片测量尺寸_基于视觉的零件尺寸测量方法
  12. 【科研人必备】各大英文期刊投稿必备搜索/文章相关推荐投稿搜索方法
  13. 批量将一个 PDF 文件按固定页数拆分成多个小的 PDF 文件
  14. catchlog是什么软件_如何处理异常? catch Exception OR catch Throwable
  15. cmd 查看端口占用并且结束进程【建议收藏】
  16. RxJava过滤操作符 debounce
  17. 中国建筑装饰装修——刘昊威设计作品:切尔西·扬画廊
  18. vue项目设置服务器地址,vue项目配置后端服务器地址
  19. 海豚php增加后台页面,Ajax功能配置步骤 · 从DolphinPHP(海豚PHP)中把ZBuilder移植到oscshop2.0教程 · 看云...
  20. 小程序:七巧板拼图世界图案大全

热门文章

  1. 西安计算机二级12月,2017年12月计算机二级MS Office习题答案(一)
  2. 单片机c语言不能编译,用keil4编译C语言代码,编译通过,但是链接时无法产生.hex文件。...
  3. VC6编辑直接采用Linux换行符,Tips: VC++篇
  4. autocad支持python吗_利用python控制Autocad:pyautocad方式
  5. 黑马博客——详细步骤(四)项目功能的实现之数据分页
  6. 网易云课堂微专业测试工程师 来源bilibili
  7. 软件测试基础:自动化测试、安全测试、性能测试
  8. python编程从入门到实践书中出错的地方_读书笔记「Python编程:从入门到实践」_10.文件和异常...
  9. python dict批量选择_用python实现word内容批量替换
  10. redhat linux 7 安装,Redhat Linux 7.3 快速安装指引 *