色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術文章
文章詳情頁

Android 7.0 運行時權限彈窗問題的解決

瀏覽:167日期:2022-09-26 08:21:53

Android 7.0系統在運行應用的時候,對權限做了諸多限制,normal, dangerous, signature, signatureOrSystem ,取決于保護級別,在確定是否授予權限時,系統可能采取不同的操作。

normal 表示權限是低風險的,不會對系統、用戶或其他應用程序造成危害; dangerous 表示權限是高風險的,系統將可能要求用戶輸入相關信息,才會授予此權限; signature 表示只有當應用程序所用數字簽名與聲明引權限的應用程序所用數字簽名相同時,才能將權限授給它; signatureOrSystem 表示將權限授給具有相同數字簽名的應用程序或android 包類。這一保護級別適和于非常特殊的情況,比如多個供應商需要通過系統映像共享功能時

運行時權限彈窗問題是很多系統定制的客戶要求屏蔽的,一直以來沒有特別好的方法,下面我分享一下我自己驗證可行的方案

方案1,修改frameworks/base/services/core/java/com/android/server/pm/PackageManagerService和frameworks/base/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy文件,PackageManagerService文件修改代碼如下:

@Override public void systemReady() { ... synchronized (mPackages) { ... for (int userId : UserManagerService.getInstance().getUserIds()) {//if (!mSettings.areDefaultRuntimePermissionsGrantedLPr(userId)) {//注釋掉這個判斷 grantPermissionsUserIds = ArrayUtils.appendInt( grantPermissionsUserIds, userId);//} } }

DefaultPermissionGrantPolicy文件修改代碼如下:

private void grantPermissionsToSysComponentsAndPrivApps(int userId) { Log.i(TAG, 'Granting permissions to platform components for user ' + userId); synchronized (mService.mPackages) { for (PackageParser.Package pkg : mService.mPackages.values()) { // if (!isSysComponentOrPersistentPlatformSignedPrivAppLPr(pkg) //刪掉isSysComponentOrPersistentPlatformSignedPrivAppLPr判斷 if(!doesPackageSupportRuntimePermissions(pkg) || pkg.requestedPermissions.isEmpty()) { continue;}Set<String> permissions = new ArraySet<>();final int permissionCount = pkg.requestedPermissions.size();for (int i = 0; i < permissionCount; i++) { String permission = pkg.requestedPermissions.get(i); BasePermission bp = mService.mSettings.mPermissions.get(permission); if (bp != null && bp.isRuntime()) { permissions.add(permission); }}if (!permissions.isEmpty()) { grantRuntimePermissionsLPw(pkg, permissions, true, userId);} } } }

簡單說明下這個方案的修改原理,在PMS的systemReady方法中會遍歷所有擁有默認運行時權限應用,通過遍歷它們的UserId來賦予權限,注釋掉判斷是否為擁有運行時權限的應用方法后,會遍歷所有應用,遍歷應用且賦予權限的操作是在DefaultPermissionGrantPolicy中grantPermissionsToSysComponentsAndPrivApps方法,注釋掉判斷簽名應用和系統應用的方法,普通應用也可以獲取所有運行時權限,這樣所有應用都不會有運行時權限的彈窗了。

方案2,只修改frameworks/base/services/core/java/com/android/server/pm/PackageManagerService文件,修改grantPermissionsLPw方法,代碼如下:

private void grantPermissionsLPw(PackageParser.Package pkg, boolean replace, String packageOfInterest) { ... /*add for grant thirdparty app permssion S*/ final String thirdPkgName = SystemProperties.get('persist.thirdparty.packagenames',''); if(isSystemApp(pkg) || pkg.packageName.contains(thirdPkgName)){//xxx為包名 final int permCount = pkg.requestedPermissions.size(); for(int i = 0;i < permCount;i++){ final String name = pkg.requestedPermissions.get(i); final BasePermission bp = mSettings.mPermissions.get(name); if(bp != null && permissionsState.grantInstallPermission(bp) != PermissionsState.PERMISSION_OPERATION_FAILURE){changeInstallPermission = true; } } /*add for grant thirdparty app permission E*/ permissionsState.setGlobalGids(mGlobalGids); ... }

簡單解釋下第二中方案的思路,PMS在應用安裝的時候會根據應用是否為簽名應用、系統應用或三方應用來更新權限,這里可以做成白名單的形式,目前通過SystemProperties來獲取三方包名可以通過adb或者串口來測試三方應用權限是否可以正常獲取。兩種方案大家可以自由選擇。

到此這篇關于Android 7.0 運行時權限彈窗問題的解決的文章就介紹到這了,更多相關Android7.0 權限彈窗 內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Android
相關文章:
主站蜘蛛池模板: 久久精品中文字幕不卡一二区 | 亚洲品质自拍视频 | 亚洲综合一区二区三区 | 成人爽a毛片在线视频网站 成人爽爽大片在线观看 | 久久久这里只有精品加勒比 | 国产成人精品三区 | 亚洲精品天堂一区 | 在线91精品国产免费 | 午夜香港三级a三级三点 | 欧美一区二区三区在线视频 | 欧美videosex性欧美成人 | 一级毛片一级毛片一级毛片 | 亚洲精品456在线播放无广告 | 欧美成人午夜毛片免费影院 | 日本午夜高清视频 | 免费伦费一区二区三区四区 | a级午夜毛片免费一区二区 a级性生活视频 | 在线a亚洲视频播放在线观看 | 国产精品免费大片 | 中国女人真人一级毛片 | 国产精品亚洲欧美日韩区 | 亚洲免费视频网站 | 亚洲精品中文字幕在线 | 俺来也俺来也天天夜夜视频 | 国产日韩精品一区在线观看播放 | 波多野一区二区三区在线 | 国产亚洲男人的天堂在线观看 | 中文乱码一二三四有限公司 | 日韩高清在线二区 | 精品欧美亚洲韩国日本久久 | 国产一级黄色 | 精品特级一级毛片免费观看 | 免费一级欧美片在线观看 | 美女被免费网站在线视频软件 | 玖草在线观看 | 澳门毛片在线播放 | 亚洲国产成人在线视频 | 国产成人精品亚洲77美色 | 色播亚洲精品网站 亚洲第一 | 亚洲欧美日韩精品久久久 | 亚洲在线网址 |