Search code examples
androidxmlmauiandroid-manifestbranding

Brand-Specific `AndroidManifest.xml` Not Being Merged in .NET MAUI Project


I'm working on a personal project where I need to use different AndroidManifest.xml files for different brands of the app. Each brand has its own manifest file located in a separate directory. However, despite configuring the .csproj to include the correct AndroidManifest.xml for the active brand, the build process only includes the base AndroidManifest.xml, and the brand-specific manifest is not being merged.

Project Setup:

  • Base Manifest Location: Platforms/Android/AndroidManifest.xml
  • Brand-Specific Manifest Location: Stuff/Brand1/Android/AndroidManifest.xml
  • Development Environment: Visual Studio 2022, .NET MAUI

What I’ve Tried:

  1. Several variations of modifying the .csproj file as such:

    <ItemGroup>
        <None Remove="Platforms/Android/AndroidManifest.xml" />
        <AndroidManifest Include="Stuff/Brand1/Android/AndroidManifest.xml">
            <LogicalName>Platforms/Android/AndroidManifest.xml</LogicalName>
        </AndroidManifest>
    </ItemGroup>
    

    OR

    <ItemGroup Condition="$(cfg.Contains('-Brand1'))">
        <None Remove="Platforms/Android/AndroidManifest.xml" />
        <AndroidManifest Include="Stuff/Brand1/Android/AndroidManifest.xml">
            <LogicalName>Platforms/Android/AndroidManifest.xml</LogicalName>
        </AndroidManifest>
    </ItemGroup>
    

    Conditionals do work in .csproj as I am using them for other brand-specific settings.

  2. Clean and Rebuild: I’ve performed a clean build multiple times, but the brand-specific manifest is still not being merged.

  3. Checked Merged Manifest: After the build, I checked the obj/Debug/android/manifest/AndroidManifest.xml, and it only contains the base manifest.

  4. Build Output Logs: I reviewed the build logs but didn’t see any obvious errors or warnings related to the manifest merging process.

The Problem:

Despite these efforts, the brand-specific AndroidManifest.xml isn’t being picked up or merged during the build. As a result, 3rd party configurations, which are specific to the brand, are missing in the final build.

Questions:

  1. How can I ensure that the brand-specific AndroidManifest.xml is correctly included and merged during the build process?
  2. Is there something I might be missing in the .csproj configuration that could be causing this issue?
  3. Are there any additional steps or settings in .NET MAUI that I need to configure to support brand-specific manifests?

Any insights or suggestions would be greatly appreciated!

Thank you in advance for your help.

BONUS
Would also be nice to know if:

<meta-data
    android:value="${ApplicationId}.MYCLASS"/>

is valid syntax within the AndroidManifest.xml.


Solution

    1. Add Android Manifests as so.

    enter image description here

    1. Have no Manifest present at Platforms\Android\AndroidManifest.xml

    2. Update .csproj file to set the manifest for chosen Build Configurations

    <PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Release|net8.0-android34.0|AnyCPU'">
        <AndroidManifest>Platforms\Android\Public\AndroidManifest.xml</AndroidManifest>    
    </PropertyGroup>
    
    <PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='ReleaseE|net8.0-android34.0|AnyCPU'">  
     <AndroidManifest>Platforms\Android\Enterprise\AndroidManifest.xml</AndroidManifest>     
    </PropertyGroup>