Android权限不够问题
很多應用程序在調用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
轉載于:https://www.cnblogs.com/eustoma/archive/2011/05/27/2415870.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Android权限不够问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 用myeclipse搭建S2SH st
- 下一篇: 完整的Android 新浪微博api调用