1.通過系統簽名獲取權限
定制系統中,可以通過源碼的簽名文件對應用進行簽名,在應用的AndroidManifest.xml中配置好參數,如圖
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
coreApp="true"
package="com.xxx.xxx"
android:sharedUserId="android.uid.system"
android:versionCode="1"
android:versionName="1.0">
<uses-permission android:name="android.permission.ACCESS_CACHE_FILESYSTEM" />
<uses-permission android:name="android.permission.REBOOT" />
<uses-permission android:name="android.permission.WRITE_MEDIA_STORAGE" />
添加 android:sharedUserId=“android.uid.system”,然后將需要的敏感權限或系統級權限列出。
1.如果是將apk或app代碼放在系統源碼中編譯可自動簽名。
2.在源碼的build\target\product\security將簽名文件拷出,同時在out\host\linux-x86\framework目錄將signapk.jar文件拷出,放在同一個文件夾下
,修改 sign.bat處理文件,例如:
java -jar signapk.jar platform.x509.pem platform.pk8 簽名前.apk .\簽名后.apk
分別編輯對應的apk名稱,和簽名后的名稱,完成后雙擊運行sign.bat,就會生成簽名后的apk。
2.通過targetSDKVersion來靜態獲取敏感權限
Android6.0以后權限分為普通權限normal permission 和危險權限dangerous permission
將targetSDKVersion 設置到 23 以下 可在安裝時就獲取權限,對於部分定制系統(電視盒子,車載系統等)的應用來說,動態獲取權限是比較不方便和不理想的,在對新API接口依賴不大的應用采用這樣的方式可以方便第三方開發商調試。
Normal Permission:寫在xml文件里,那么App安裝時就會默認獲得這些權限,即使是在Android6.0系統的手機上,用戶也無法在安裝后動態取消這些normal權限,這和以前的權限系統是一樣的,不變。
Dangerous Permission:還是得寫在xml文件里,但是App安裝時具體如果執行授權分以下幾種情況:
1、targetSDKVersion < 23 & API(手機系統) < 6.0 :安裝時默認獲得權限,且用戶無法在安裝App之后取消權限。
3、targetSDKVersion < 23 & API(手機系統) >= 6.0 :安裝時默認獲得權限,但是用戶可以在安裝App完成后動態取消授權( 取消時手機會彈出提醒,告訴用戶這個是為舊版手機打造的應用,讓用戶謹慎操作 )。
2、targetSDKVersion >= 23 & API(手機系統) < 6.0 :安裝時默認獲得權限,且用戶無法在安裝App之后取消權限。
4、targetSDKVersion >= 23 & API(手機系統) >= 6.0 :安裝時不會獲得權限,可以在運行時向用戶申請權限。用戶授權以后仍然可以在設置界面中取消授權,用戶主動在設置界面取消后,在app運行過程中可能會出現crash。
對於部分系統權限,需要在源碼中進行修改權限等級或權限功能,然后在列表中列出。
3、安卓所擁有的權限列表
1)系統自動授權,只需要在清單文件中添加權限即可。
ACCESS_LOCATION_EXTRA_COMMANDS
ACCESS_NETWORK_STATE
ACCESS_NOTIFICATION_POLICY
ACCESS_WIFI_STATE
BLUETOOTH
BLUETOOTH_ADMIN
BROADCAST_STICKY
CHANGE_NETWORK_STATE
CHANGE_WIFI_MULTICAST_STATE
CHANGE_WIFI_STATE
DISABLE_KEYGUARD
EXPAND_STATUS_BAR
GET_PACKAGE_SIZE
INSTALL_SHORTCUT
INTERNET
KILL_BACKGROUND_PROCESSES
MODIFY_AUDIO_SETTINGS
NFC
READ_SYNC_SETTINGS
READ_SYNC_STATS
RECEIVE_BOOT_COMPLETED
REORDER_TASKS
REQUEST_INSTALL_PACKAGES
SET_ALARM
SET_TIME_ZONE
SET_WALLPAPER
SET_WALLPAPER_HINTS
TRANSMIT_IR
UNINSTALL_SHORTCUT
USE_FINGERPRINT
VIBRATE
WAKE_LOCK
WRITE_SYNC_SETTINGS
1)需要動態申請,同一組的任何一個權限被授權了,其他權限也自動被授權。
CALENDAR(日歷)
READ_CALENDAR
WRITE_CALENDAR
CAMERA(相機)
CAMERA
CONTACTS(聯系人)
READ_CONTACTS
WRITE_CONTACTS
GET_ACCOUNTS
LOCATION(位置)
ACCESS_FINE_LOCATION
ACCESS_COARSE_LOCATION
MICROPHONE(麥克風)
RECORD_AUDIO
PHONE(手機)
READ_PHONE_STATE
READ_PHONE_NUMBERS
CALL_PHONE
READ_CALL_LOG
WRITE_CALL_LOG
ADD_VOICEMAIL
USE_SIP
PROCESS_OUTGOING_CALLS
PROCESS_OUTGOING_CALLS
SENSORS(傳感器)
BODY_SENSORS
SMS(短信)
SEND_SMS
RECEIVE_SMS
READ_SMS
RECEIVE_WAP_PUSH
RECEIVE_MMS
STORAGE(存儲卡)
READ_EXTERNAL_STORAGE
WRITE_EXTERNAL_STORAGE
- 特殊權限
有一些權限與普通權限和危險權限都不同。SYSTEM_ALERT_WINDOW 和 WRITE_SETTINGS 特別敏感,因此大多數應用不應該使用它們。如果某應用需要其中一種權限,必須在清單中聲明該權限,並且發送請求用戶授權的 intent。系統將向用戶顯示詳細管理屏幕,以響應該 intent。
如需了解有關如何請求這些權限的詳情,請參閱 SYSTEM_ALERT_WINDOW 和 WRITE_SETTINGS 參考條目。
來源:https://blog.csdn.net/qq_33826580/article/details/88117057
https://www.jianshu.com/p/24f79a70025b
特此感謝