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

调试MSBUILD AndroidManifest合并 排查重复位置权限上传报错

环境信息
  • VS 2022 17.1.0
  • Xamarin Android SDK 12.2.0.4
问题背景

现有一个包含Android目标端的Xamarin Forms项目,近期将Android目标端的targetSdkVersion升级为31(对应Android 12)。尝试将构建生成的签名APK上传至Google Play时,收到如下报错:

权限android.permission.ACCESS_COARSE_LOCATION存在maxSdkVersion属性不一致的重复声明;权限android.permission.ACCESS_FINE_LOCATION存在maxSdkVersion属性不一致的重复声明。

提取VS2022构建输出的签名APK内的AndroidManifest.xml文件,可见如下冲突的权限声明条目:

<uses-permission
        android:name="android.permission.ACCESS_COARSE_LOCATION" />

    <uses-permission
        android:name="android.permission.ACCESS_FINE_LOCATION" />

    <uses-permission-sdk-23
        android:name="android.permission.ACCESS_COARSE_LOCATION"
        android:maxSdkVersion="30" />

    <uses-permission-sdk-23
        android:name="android.permission.ACCESS_FINE_LOCATION"
        android:maxSdkVersion="30" />

补充说明:当前已正式发布的线上版本targetSdkVersion为30(对应Android 11),该版本的合并后清单文件中同样存在上述重复权限条目,但Google Play未触发同类报错。

项目主AndroidManifest.xml相关配置片段如下:

<manifest
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:versionCode="1"
    android:versionName="3.7.0"
    android:installLocation="0"
    android:compileSdkVersion="31"
    android:compileSdkVersionCodename="12"
    package="com.OurCompany.OurApp"
    platformBuildVersionCode="31"
    platformBuildVersionName="12">

    <uses-sdk
        android:minSdkVersion="24"
        android:targetSdkVersion="31" />


OTHER VALUES REMOVED

 </manifest>
排查与修复方案
  • 定位冲突来源
    构建Android项目时,编译流程会自动生成完整的Manifest合并溯源报告,文件存放在Android项目目录下的obj\对应构建配置\12.0\android\manifest\merger文件夹中,文件名为manifest-merger-构建配置-report.txt(比如Release渠道包对应manifest-merger-release-report.txt)。打开文件后直接搜索ACCESS_COARSE_LOCATION、ACCESS_FINE_LOCATION关键词,每一条权限声明的来源都会明确标注:是主项目Manifest手动添加、哪个NuGet依赖包注入、还是SDK内置配置,可直接定位到冲突条目的具体来源。

  • 常见冲突原因
    附带android:maxSdkVersion="30"的两个位置权限声明,绝大多数是低版本Xamarin.Essentials、Xamarin.AndroidX.Core类库自动注入的。之前targetSdkVersion设为30时,maxSdkVersion=30的条目和无版本限制的权限条目不会触发Google Play校验规则;升级到targetSdkVersion 31后,Google Play会对覆盖到31版本的所有权限声明做一致性校验,因此抛出重复声明错误。

  • 修复操作
    如果冲突条目来自第三方依赖无法直接修改,可在主项目的AndroidManifest.xml中直接移除冲突的旧条目:

  1. 在manifest根节点补充tools命名空间声明:xmlns:tools="http://schemas.android.com/tools"
  2. 在manifest节点下(与uses-sdk同级)添加如下移除节点:
<uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION" tools:node="remove" />
<uses-permission-sdk-23 android:name="android.permission.ACCESS_FINE_LOCATION" tools:node="remove" />

重新构建后解压APK检查最终的AndroidManifest.xml,确认仅保留无maxSdkVersion限制的两个位置权限条目,即可正常上传Google Play。


内容的提问来源于stack exchange,提问作者Pat Long - Munkii Yebee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 09:48:15