Unity 3D中无法移除SCHEDULE_EXACT_ALARM与USE_EXACT_ALARM权限求助
排查方案:构建阶段动态添加权限未按预期移除的问题
1. 清理构建缓存
构建阶段的脚本输出可能被缓存留存,先彻底清理后重新构建:
- 执行Gradle命令:
./gradlew clean build --no-build-cache - 在Android Studio中点击
File > Invalidate Caches... > Invalidate and Restart
2. 验证构建脚本的条件变量取值
构建阶段代码无法断点,但可以通过日志确认变量是否符合预期:
- 在权限添加逻辑的代码块前后加入日志输出,比如Gradle脚本中:
println "DEBUG: 当前设置开关状态:${yourSettingVariable}" if (yourSettingVariable) { // 添加权限的逻辑 println "DEBUG: 已添加精确闹钟权限" } else { println "DEBUG: 未添加精确闹钟权限" } - 执行构建命令,查看控制台日志,确认变量是否和你设置的禁用状态一致。
3. 检查合并后的Manifest
权限可能来自其他依赖或模块,并非你的脚本添加:
- 打开
app > Build > Outputs > Manifests目录,找到对应构建变体的merged_manifest.xml - 搜索
SCHEDULE_EXACT_ALARM和USE_EXACT_ALARM,查看权限的tools:node属性及来源(注释会标注来自哪个库或Manifest文件)
4. 确认构建变体的配置
如果存在多Flavor或多Build Type,可能当前构建的变体未正确禁用设置:
- 检查
build.gradle中对应变体的配置,确认开关变量在该变体下是否设为false,比如:productFlavors { free { buildConfigField "boolean", "ENABLE_EXACT_ALARM", "false" } paid { buildConfigField "boolean", "ENABLE_EXACT_ALARM", "true" } } - 确认当前构建的是禁用权限的变体。
5. 补全权限移除逻辑
如果脚本仅处理添加逻辑,未处理移除,之前添加的权限不会自动消失:
- 确保开关禁用时,脚本通过
tools:node="remove"移除权限,比如在Gradle中配置占位符:android { defaultConfig { manifestPlaceholders = [removeExactAlarmPermissions: "false"] } productFlavors { disabledAlarm { manifestPlaceholders = [removeExactAlarmPermissions: "true"] } } } - 然后在Manifest中对应权限标签添加占位符:
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" tools:node="${removeExactAlarmPermissions}" /> <uses-permission android:name="android.permission.USE_EXACT_ALARM" tools:node="${removeExactAlarmPermissions}" />
内容的提问来源于stack exchange,提问作者Yurii Zabotkin
相关产品推荐
相关产品推荐

