You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Manifest合并时如何保障位置/蓝牙权限为最大所需配置

Android Manifest 权限合并异常修复

问题成因

Android 清单合并工具处理同名称的<uses-permission>条目时,不会自动清除maxSdkVersion这类限制性属性:只要任意一个集成模块声明了该权限的版本上限,合并结果就会默认保留该上限配置,即便其他模块声明了无版本限制的同名权限,也不会自动覆盖这个限制。

保留maxSdkVersion="30"配置后,Android 12(API 31)及以上版本的设备安装应用时,系统不会授予ACCESS_FINE_LOCATION权限,会直接导致蓝牙信标扫描功能失效——按照Android权限规范,蓝牙信标扫描在所有SDK版本下都依赖精确定位权限。

修复方案

最稳妥、侵入性最低的修复方式是在**app主模块(最终打包的宿主模块)**的AndroidManifest.xml中显式配置合并规则,强制移除该权限的版本上限限制:

  • 先确认Manifest根节点已声明tools命名空间,没有的话补充上:
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        package="你的应用包名">
    
  • 在权限声明区域添加如下配置,显式指定合并时移除maxSdkVersion属性:
    <uses-permission
        android:name="android.permission.ACCESS_FINE_LOCATION"
        tools:remove="android:maxSdkVersion" />
    

验证方式

配置完成后重新构建应用,查看合并后的Manifest产物确认修复生效,产物默认路径为:
app/build/intermediates/merged_manifest/[对应构建变体]/AndroidManifest.xml
打开文件检查ACCESS_FINE_LOCATION对应的权限条目,确认不存在android:maxSdkVersion属性即为修复成功。

补充说明:如果有权限修改声明了maxSdkVersion="30"的模块源码,也可以直接调整该模块的权限配置,但该方案无法规避后续接入其他依赖时再次出现同类冲突的问题,主模块配置合并规则的方案通用性更强。

内容的提问来源于stack exchange,提问作者Steven Jeuris

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 17:01:40