Android权限不够问题
2011-05-27 07:53
357 查看
很多应用程序在调用Runtime.exec的时候或者创建服务的时候都会遇到权限不够的情况。可采用以下解决方案:
AndroidManifest.xml:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mokoid.LedTest"
android:sharedUserId="android.uid.system">
原来,ServiceManager 会去检查应用的权限,Android系统会根据User ID做权限管理,在frmeworks/base/cmds/servicemanager/service_manager.c 里有如下代码:
int svc_can_register(unsigned uid, uint16_t *name)
修改 allowed数组即可
如果在应用层出现问题,则需要涉及到权限管理的两个文件: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文件,但是需要修改原始的 Android 代码。所以我们可以采用这种做法。
http://apps.hi.baidu.com/share/detail/33541825
AndroidManifest.xml:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.mokoid.LedTest"
android:sharedUserId="android.uid.system">
原来,ServiceManager 会去检查应用的权限,Android系统会根据User ID做权限管理,在frmeworks/base/cmds/servicemanager/service_manager.c 里有如下代码:
int svc_can_register(unsigned uid, uint16_t *name)
修改 allowed数组即可
如果在应用层出现问题,则需要涉及到权限管理的两个文件: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文件,但是需要修改原始的 Android 代码。所以我们可以采用这种做法。
http://apps.hi.baidu.com/share/detail/33541825
相关文章推荐
- UBUNTU下android安装更新包的问题(File not found:... android-sdk-linux_x86/temp (权限不够))
- Android权限不够问题
- Android权限不够问题
- Android 获得权限问题
- Android设置权限问题
- 在android 6.0以上无法获取READ_PHONE_STATE权限的SecurityException的问题
- Android定制权限重名引起的问题
- android关于权限的问题
- Android权限问题整理
- 关于android开发中使用系统权限报错的问题
- Android 6.0+的权限问题
- Android 关于7.0权限相册不能选择 或者联系人不能选择的问题
- android下SD卡与U盘无读写权限问题的解决办法
- 安装Pig遇到的问题:Exception in thread "main" java.io.IOException: 权限不够
- caused by android.system.errnoexception open failed eacces (permission denied)解决方案,安卓6.0(API23)权限问题
- vim编辑后权限不够保存问题解决方案
- android 6.0 开发中 遇到权限授予方式变更的问题
- android 6.0 权限分配问题 高德地图 位置权限
- Android对外置sd卡的权限问题(上)
- 前一段时间编译xmms后运行遇到libmpg123.so权限不够,不能播放mp3的问题