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