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

如何在Xamarin构建过程中修改生成的AndroidManifest文件?

解决Xamarin构建过程中修改生成的AndroidManifest文件的方案

问题原因说明

你之前直接在Properties/AndroidManifest.xml中添加<service>标签报错APT2263,是因为该标签没有放置在<application>节点内部;即便放置正确,也可能因为DLL中已自动生成该service节点导致合并冲突。由于无法升级DLL,最可靠的方式是在构建过程中生成AndroidManifest之后、打包之前,直接修改obj目录下的生成文件。

解决方案:通过MSBuild自定义任务修改生成的Manifest

Xamarin.Android基于MSBuild构建,我们可以在项目的.csproj文件中添加自定义Target,自动执行修改操作:

方法1:使用PowerShell脚本修改(灵活性高)

  1. 右键你的Xamarin.Android项目,选择编辑项目文件打开.csproj
  2. 在文件末尾的</Project>标签之前,添加以下代码:
<Target Name="ModifyGeneratedAndroidManifest" AfterTargets="_GenerateAndroidManifest">
  <!-- 指定生成的Manifest文件路径 -->
  <PropertyGroup>
    <GeneratedManifestPath>$(IntermediateOutputPath)android\AndroidManifest.xml</GeneratedManifestPath>
  </PropertyGroup>
  <!-- 执行PowerShell脚本修改XML -->
  <Exec Command='powershell -Command "$xml = [xml](Get-Content ''$(GeneratedManifestPath)''); $nsManager = New-Object System.Xml.XmlNamespaceManager($xml.NameTable); $nsManager.AddNamespace(''android'', ''http://schemas.android.com/apk/res/android''); $serviceNode = $xml.SelectSingleNode(''/manifest/application/service[@android:name=''crc6494e14b9856016c30.PNFirebaseMessagingService'']'', $nsManager); if ($serviceNode -ne $null) { $serviceNode.SetAttribute(''exported'', ''http://schemas.android.com/apk/res/android'', ''true'') } $xml.Save(''$(GeneratedManifestPath)'')"' />
</Target>

方法2:使用MSBuild的XmlPoke任务(更轻量化)

如果你的环境中PowerShell执行受限,可以用MSBuild内置的XmlPoke任务,同样添加到.csproj文件末尾:

<Target Name="ModifyGeneratedAndroidManifest" AfterTargets="_GenerateAndroidManifest">
  <PropertyGroup>
    <GeneratedManifestPath>$(IntermediateOutputPath)android\AndroidManifest.xml</GeneratedManifestPath>
    <AndroidXmlNs>http://schemas.android.com/apk/res/android</AndroidXmlNs>
  </PropertyGroup>
  <!-- 为目标service节点添加android:exported="true"属性 -->
  <XmlPoke 
    XmlInputPath="$(GeneratedManifestPath)"
    Query="/manifest/application/service[@android:name='crc6494e14b9856016c30.PNFirebaseMessagingService']/@android:exported"
    Value="true"
    Namespaces="&lt;Namespace Prefix='android' Uri='$(AndroidXmlNs)' /&gt;" />
</Target>

验证操作

  1. 保存.csproj文件,重新构建项目
  2. 构建完成后,打开obj\Release\120\android\AndroidManifest.xml(路径根据你的配置调整),检查目标<service>节点是否已添加android:exported="true"属性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 23:55:17