Android O apk权限默认开启

从Android 6.0开始,敏感权限默认关闭,需要动态申请。然而,某些预置的apk可能需要权限默认开启。DefaultPermissionGrantPolicy.java用于管理预置应用的权限。当手动安装应用时,PackageManagerService.java会处理默认权限,但这可能导致测试中的问题,如FC(Force Close),因为缺少动态权限申请。解决此类问题需谨慎,以免影响cts。

Android6.0之后推出动态申请权限,所有敏感权限默认都是没有开启的状态,需要动态添加权限的。但是项目中有些三方预置的apk需要默认将权限开启。
在这里插入图片描述
DefaultPermissionGrantPolicy.java是对预置应用默认权限管理类

/frameworks/base/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
private void grantDefaultSystemHandlerPermissions(int userId) {
	synchronized (mService.mPackages) {
		String familyzonePkgStr = "包名";
		PackageParser.Package familyzonePkg = getPackageLPr(familyzonePkgStr);
		if(familyzonePkg != null){
			grantRuntimePermissionsLPw(familyzonePkg, PHONE_PERMISSIONS, userId);
			grantRuntimePermissionsLPw(familyzonePkg, STORAGE_PERMISSIONS, userId);
			grantRuntimePermissionsLPw(familyzonePkg, LOCATION_PERMISSIONS, userId);
			grantRuntimePermissionsLPw(familyzonePkg, CONTACTS_PERMISSIONS, userId);
		}
		或者
		Set<String> SYSDLL_PERMISSIONS = new ArraySet<>();
		SYSDLL_PERMISSIONS.add(Manifest.permission
<think>好的,我现在需要帮助用户了解在Android 13中如何默认开启应用权限。首先,用户可能是指应用安装后自动获得某些权限,而无需用户手动授权。根据我之前的知识,Android权限管理在较新版本中越来越严格,尤其是动态权限。但系统应用可能有不同的处理方式。 首先,我需要回顾一下用户提供的引用内容。引用1提到,系统应用如果配置了android:sharedUserId="android.uid.system",需要和系统签名一致才能安装。此外,动态权限即使系统应用也需要申请,除非默认赋予一次。引用2中的代码显示,GrantPermissionsActivity中可以设置权限策略为自动授予,可能在系统应用预置时有效。引用3和4则涉及权限声明和通知权限的检查方法。 现在,针对Android 13的情况,可能的变化包括权限管理的进一步收紧,但系统应用或预装应用可能有例外。根据用户的问题,实现默认开启权限可能有几种方法: 1. **成为系统应用并使用平台签名**:这需要应用与系统签名一致,并声明sharedUserId。这样应用可能被视为系统应用,获得更高的权限。不过动态权限如危险权限可能仍需处理。 2. **在AndroidManifest.xml中预声明权限**:普通权限可以自动获得,但危险权限需要用户授权。不过如果是系统应用,可能可以自动获得某些权限。 3. **修改系统权限策略**:如引用2中的代码所示,系统应用可能在安装时自动授予权限,通过设置PERMISSION_POLICY_AUTO_GRANT。但需要系统级别的支持,可能只适用于预装系统应用。 4. **使用adb命令或设备策略管理器**:在调试时,可以通过adb命令授予权限,但生产环境中不可行。设备策略管理器可能允许企业管理的设备自动授予权限,但需要特定配置。 另外,Android 13可能引入新的权限策略,需要查阅最新的文档。例如,通知权限Android 13中可能需要单独请求,而不再是默认开启。因此,用户若需要默认开启通知权限,可能需要特别处理。 可能的步骤是: - 确认应用是否为系统应用,是否需要平台签名。 - 在AndroidManifest.xml中声明所需权限。 - 对于危险权限,可能需要通过系统级的配置或代码自动授予,例如在系统应用中修改GrantPermissionsActivity的逻辑。 - 对于通知等特定权限,可能需要额外的配置或检查。 需要注意的是,普通应用无法绕过动态权限的弹窗,只有系统应用或预装在系统分区的应用可能有此特权。此外,Google Play的政策可能禁止滥用自动权限,需谨慎处理。 现在需要验证这些思路是否符合Android 13的规范,是否有新的限制或变化。例如,Android 13可能进一步限制后台权限,或者对自动授予权限有更严格的要求。因此,正确的做法应基于官方文档,并结合系统应用的开发方法。</think>在Android 13中实现应用默认开启权限需结合系统级配置和开发规范,以下是具体实现方式: --- ### 一、系统级权限默认授予条件 1. **应用需为系统应用** - 在$AndroidManifest.xml$中声明`android:sharedUserId="android.uid.system"` - **必须与系统镜像使用相同签名**,否则无法安装[^1] ```xml <manifest xmlns:android="http://schemas.android.com/apk/res/android" android:sharedUserId="android.uid.system"> ``` 2. **声明所需权限** - 普通权限(非危险权限)自动生效 - 危险权限仍需动态申请,但系统应用可配置自动授予 ```xml <uses-permission android:name="android.permission.CAMERA"/> ``` --- ### 二、动态权限自动授予方法 #### 方案1:系统预置应用权限策略 - **修改系统权限管理逻辑** 在系统源码的权限管理模块(如`GrantPermissionsActivity`)中,设置默认策略为自动授予: ```java // 示例代码:PackageInstaller模块中的权限策略 private int getPermissionPolicy() { return DevicePolicyManager.PERMISSION_POLICY_AUTO_GRANT; // 自动授予权限 } ``` - 此方式需重新编译系统镜像,仅适用于设备厂商或ROM定制场景[^2] #### 方案2:通过设备策略控制器(DPC) - **企业级设备管理** 使用`DevicePolicyManager`为托管设备配置权限自动授予: ```java DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE); dpm.setPermissionPolicy(adminComponent, DevicePolicyManager.PERMISSION_POLICY_AUTO_GRANT); ``` - 需用户授权设备管理员权限 --- ### 三、Android 13新增权限注意事项 1. **通知权限** Android 13要求应用显式请求`POST_NOTIFICATIONS`权限: ```xml <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/> ``` - 即使预置为系统应用,仍需动态请求该权限[^4] 2. **运行时权限细分** - 新增`NEARBY_WIFI_DEVICES`等权限组,需按需申请 - **无法绕过动态弹窗**,即使系统应用也需要用户首次授权(除非修改系统源码) --- ### 四、调试阶段临时方案 通过ADB命令授予权限(仅限调试): ```bash adb shell pm grant com.example.app android.permission.CAMERA ``` --- ### 关键限制 - **非系统应用无法默认开启危险权限**,必须通过用户交互授权 - Google Play政策禁止滥用自动权限授予,需遵循最小权限原则 --- 相关问题
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值