Android 给第三方应用授予所需权限

本文介绍了如何为手动安装的应用和预置的系统应用程序授予所需的权限,包括在DefaultPermissionGrantPolicy.java中添加权限的步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、给手动安装的应用授予所需权限

android7.1
frameworks/base/services/core/java/com/android/server/pm/PackageManagerService.java
private void handlePackagePostInstall(PackageInstalledInfo res, boolean grantPermissions,
            boolean killApp, String[] grantedPermissions,
            boolean launchedForRestore, String installerPackage,
            IPackageInstallObserver2 installObserver) {
	//add start
	if ((grantPermissions || res.name.equals("包名")){
		grantRequestedRuntimePermissions(res.pkg, res.newUsers, grantedPermissions);
	}
	//add end
}
android 9
private void handlePackagePostInstall(PackageInstalledInfo res, boolean grantPermissions,
            boolean killApp, boolean virtualPreload, String[] grantedPermissions,
            boolean launchedForRestore, String installerPackage,
            IPackageInstallObserver2 installObserver) {
     //add start
	if (grantPermissions || res.name.equals("包名")) {
		final int callingUid = Binder.getCallingUid();
        mPermissionManager.grantRequestedRuntimePermissions(
        res.pkg, res.newUsers, grantedPermissions, callingUid,
                        mPermissionCallback);
   }
}

2、给预置的系统app授予所需权限

android7.1
frameworks/base/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
android9.0
frameworks/base/services/core/java/com/android/server/pm/permission/DefaultPermissionGrantPolicy.java
private void grantDefaultSystemHandlerPermissions(int userId) {
	......
	synchronized (mService.mPackages) {
		//add start
		PackageParser.Package customPackage = getPackageLPr("包名");
		if ((customPackage != null) && doesPackageSupportRuntimePermissions(customPackage)) {
			grantRuntimePermissionsLPw(customPackage, STORAGE_PERMISSIONS, userId);
            grantRuntimePermissionsLPw(customPackage, CAMERA_PERMISSIONS, userId);
            grantRuntimePermissionsLPw(customPackage, MICROPHONE_PERMISSIONS, userId);
		}
		//add end
	}
}
    

3、给预置应用授予的权限,在DefaultPermissionGrantPolicy.java没有时,需要添加权限

1、frameworks/base/core/res/AndroidManifest.xml
添加权限组
<permission-group android:name="android.permission-group.SYSTEM_ALERT_WINDOW"
	android:icon="@drawable/perm_group_contacts"
    android:label="@string/permlab_systemAlertWindow"
	android:description="@string/permdesc_systemAlertWindow"
    android:priority="1200" />
添加组成员
<permission android:name="android.permission.SYSTEM_ALERT_WINDOW"
	android:permissionGroup="android.permission-group.SYSTEM_ALERT_WINDOW"
    android:label="@string/permlab_systemAlertWindow"
    android:description="@string/permdesc_systemAlertWindow"
    android:protectionLevel="signature|preinstalled|appop|pre23|development" />

2、frameworks/base/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
private static final Set<String> SYSTEM_ALERT_WINDOW = new ArraySet<>();
static {
    SYSTEM_ALERT_WINDOW.add(Manifest.permission.SYSTEM_ALERT_WINDOW);
}

3、packages/apps/PackageInstaller/src/com/android/packageinstaller/permission/utils/Utils.java
public static final String[] MODERN_PERMISSION_GROUPS = {
+	Manifest.permission_group.SYSTEM_ALERT_WINDOW,
}

4、执行make update-api
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值