Android8.1關(guān)于應(yīng)用授權(quán)彈框的問題-創(chuàng)新互聯(lián)

Android 8.1 關(guān)于應(yīng)用授權(quán)彈框的問題

cpp的native服務(wù),例如
services/surfaceflinger/SurfaceFlinger.cpp 和services/sensorservice/SensorService.cpp
會使用
PermissionCache::checkPermission 或者 namespace android 下的checkPermission
這些都最終使用namespace android 下的checkPermission,即android::checkPermission
而native/libs/binder/IServiceManager.cpp 中在namespace android下定義了此checkPermission 函數(shù) bool checkPermission(const String16& permission, pid_t pid, uid_t uid)
進(jìn)而調(diào)用到所有 sp<IPermissionController> pc的pc->checkPermission(permission, pid, uid) , 即允許多個IPermissionController, IPermissionController可以注冊的。關(guān)于注冊可以參考base/core/java/android/os/ServiceManagerNative.java中的case IServiceManager.SET_PERMISSION_CONTROLLER_TRANSACTION: setPermissionController(controller);。 即允許增加PermissionController。

成都創(chuàng)新互聯(lián)公司堅持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站建設(shè)、做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時代的金林網(wǎng)站設(shè)計、移動媒體設(shè)計的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!

接上,其中定義在native/libs/binder/IPermissionController.cpp中 class BpPermissionController : public BpInterface<IPermissionController> binder通信,進(jìn)而調(diào)用到
BnPermissionController的bool res = checkPermission(permission, pid, uid);
這個,
作為一個IPermissionController接口實(shí)現(xiàn)之一,base/services/core/java/com/android/server/am/ActivityManagerService.java 中的static class PermissionController extends IPermissionController.Stub 就有checkPermission的實(shí)現(xiàn)。他調(diào)用到mActivityManagerService.checkPermission,即ActivityManagerService::checkPermission
這個又調(diào)用到checkComponentPermission,進(jìn)而調(diào)用ActivityManager.checkComponentPermission,即./base/core/java/android/app/ActivityManager.java的checkComponentPermission()
此函數(shù)有一個實(shí)現(xiàn):
if (appId == Process.ROOT_UID || appId == Process.SYSTEM_UID) {
return PackageManager.PERMISSION_GRANTED;
}
所以系統(tǒng)app,就直接允許了。

否則調(diào)用AppGlobals.getPackageManager()
.checkUidPermission(permission, uid);
會調(diào)用到base/services/core/java/com/android/server/pm/PackageManagerService.java的checkUidPermission

而strings.xml中的<string name="permgroupdesc_location">access this device\'s location</string>之類的安裝或者允許應(yīng)用時的彈框(讓用戶授權(quán)的)
被AndroidManifest.xml中使用
例如:
<!-- Used for permissions that allow accessing the device location. -->
<permission-group android:name="android.permission-group.LOCATION"android:icon="@drawable/perm_group_location"
br/>android:icon="@drawable/perm_group_location"
br/>android:description="@string/permgroupdesc_location"
你搜索permission-group,可以找到:
base/core/res/res/values/attrs_manifest.xml 中有描述如何解析base/core/res/AndroidManifest.xml,例如<declare-styleable name="AndroidManifestPermission" parent="AndroidManifest">
其中base/core/java/android/content/pm/PackageParser.java 就是分析base/core/res/AndroidManifest.xml內(nèi)容的代碼。
parseBaseApkCommon函數(shù), 這個函數(shù)由parsePackage()調(diào)用。

base/services/core/java/com/android/server/pm/PackageManagerService.java 這個 會調(diào)用到 上面的 parsePackage 從而 彈出授權(quán)框。

所以關(guān)于對于沒有touch的等輸入的設(shè)備,去掉所有授權(quán),直接允許授權(quán),的修改方法:
修改ActivityManager.java的checkComponentPermission函數(shù),直接return PackageManager.PERMISSION_GRANTED;
if (true)
return PackageManager.PERMISSION_GRANTED; //allow everything because we have no input device.

./base/core/java/android/content/PermissionChecker.java 的checkPermission 函數(shù),也是直接 return PERMISSION_GRANTED;
if (true)
return PERMISSION_GRANTED;

需要注意的是,上面直接return PERMISSION_GRANTED只會使普通應(yīng)用安裝時不彈框,但是實(shí)際setting查看應(yīng)用權(quán)限,其實(shí)沒有獲取授權(quán)。
真正獲取授權(quán),還是應(yīng)該改為另外如下實(shí)現(xiàn)方式:
1)方式一:
packages/apps/PackageInstaller/src/com/android/packageinstaller/permission/ui/handheld/ReviewPermissionsFragment.java

packages/apps/PackageInstaller/src/com/android/packageinstaller/permission/ui/wear/ReviewPermissionsWearFragment.java
模擬onClick中confirm執(zhí)行的
confirmPermissionsReview();
executeCallback(true);
activity.finish();
操作,并隱藏掉框的show,直接執(zhí)行上面的操作。

2)方式二:
adb install -g xxx.apk 安裝后,從data/system/users/0/runtime-permissions.xml 取得runtime-permissions.xml,后面寫個腳本,并判斷是否第一次啟動,如果是,則覆蓋data/system/users/0/runtime-permissions.xml,并重啟系統(tǒng),即可授權(quán)了。后面啟動不用再覆蓋和重啟了。

3)修改PackageManagerService.java的
checkPermission
checkUidPermission
修改此兩個函數(shù),然后
if (true)
return PERMISSION_GRANTED;

另外我的相關(guān)培訓(xùn)視頻請看:
歡迎觀看我發(fā)布的各個課程: https://edu.51cto.com/lecturer/8896847.html

我的新的更多優(yōu)惠的打包課程鏈接如下:
https://edu.51cto.com/sd/0a9d4

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點(diǎn)與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。

網(wǎng)站名稱:Android8.1關(guān)于應(yīng)用授權(quán)彈框的問題-創(chuàng)新互聯(lián)
URL地址:http://muchs.cn/article10/ddppdo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊、網(wǎng)站改版企業(yè)網(wǎng)站制作、Google建站公司、網(wǎng)站設(shè)計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司