AndroidManifest.xml中權限問題
来源:互联网 发布:perl dbd mysql 下载 编辑:程序博客网 时间:2024/06/05 20:06
最近需要利用Android internal API做一些事,在AndroidManifest.xml加上了
android:sharedUserId="android.uid.system"
但是在系統裡卻看不到我的AP,找了很久,發現還要在Android.mk裡再加上
LOCAL_CERTIFICATE := platform
這樣系統的權限才夠。
相關的解說可參考:
http://www.wretch.cc/blog/michaeloil/23398272
以下說明copy自
http://www.jollen.org/blog/2010/02/android-uid-system.html
原來,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;
}
...
}
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 的權限。
android:sharedUserId="android.uid.system"
但是在系統裡卻看不到我的AP,找了很久,發現還要在Android.mk裡再加上
LOCAL_CERTIFICATE := platform
這樣系統的權限才夠。
相關的解說可參考:
http://www.wretch.cc/blog/michaeloil/23398272
以下說明copy自
http://www.jollen.org/blog/2010/02/android-uid-system.html
原來,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;
}
...
}
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 的權限。
- AndroidManifest.xml中權限問題
- AndroidManifest.xml
- AndroidManifest.xml
- AndroidManifest.xml
- androidManifest.xml
- AndroidManifest.xml
- AndroidManifest.xml
- androidmanifest.xml
- AndroidManifest.xml
- AndroidManifest.xml
- AndroidManifest.xml
- AndroidManifest.xml
- AndroidManifest.xml
- AndroidManifest.xml
- AndroidManifest.xml
- AndroidManifest.xml
- AndroidManifest.xml
- AndroidManifest.xml
- linux shell
- linux全面笔记宝典
- CMMI总结
- 自己开发了个域名信息服务平台网站
- 关于Android3D旋转效果,不知道那位大神知道该怎么做啊.
- AndroidManifest.xml中權限問題
- 2012云计算与IT领域的八大预测
- Dynamic grouping
- 深入理解硬盘的 Linux 分区
- 应用安装到sd卡 收藏备用
- 主键的生成策略
- 宏展开的步骤
- Express absolute value in advanced settings in tFilterRow
- asp.net 三层架构(浅析)