权限 shareuser certificat Runtime.exec

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 範例。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值