Xamarin – Проблема с объединением манифестов

Вопрос или проблема

Я новичок в приложениях Xamarin

Ниже приведены детали включенных пакетов

<ItemGroup>
 
    <PackageReference Include="Xamarin.Forms" Version="5.0.0.2662" />
    <PackageReference Include="Xamarin.Forms.Maps" Version="5.0.0.2515" />
    <PackageReference Include="Prism.Unity.Forms" Version="7.2.0.1422" />
    <PackageReference Include="Acr.UserDialogs" Version="7.1.0.514" />
    <PackageReference Include="Com.Airbnb.Xamarin.Forms.Lottie" Version="3.1.3" />
    <PackageReference Include="Plugin.Permissions" Version="6.0.1" />
    <PackageReference Include="Prism.Plugin.Popups" Version="7.2.0.1046" />
    <PackageReference Include="Scandit.BarcodePicker.Unified" Version="5.16.0.10" />
    <PackageReference Include="SlideOverKit" Version="2.1.6.2" />
    <PackageReference Include="sqlite-net-pcl" Version="1.7.335" />
    <PackageReference Include="SQLiteNetExtensions" Version="2.1.0" />
    <PackageReference Include="SQLitePCLRaw.bundle_green" Version="2.0.3" />
    <PackageReference Include="SQLitePCLRaw.core" Version="2.0.3" />
    <PackageReference Include="System.ComponentModel.Annotations" Version="4.7.0" />
    <PackageReference Include="Xam.Plugin.Connectivity" Version="3.2.0" />
    <PackageReference Include="Xam.Plugin.DeviceInfo" Version="4.1.1" />
    <PackageReference Include="Xamarin.FFImageLoading.Forms" Version="2.4.11.982" />
    <PackageReference Include="Xamarin.FFImageLoading.Svg.Forms" Version="2.4.11.982" />
    <PackageReference Include="AutoMapper" Version="10.0.0" />
    <PackageReference Include="ZXing.Net.Mobile" Version="2.4.1" />
    <PackageReference Include="ZXing.Net.Mobile.Forms" Version="2.4.1" />

   
    <PackageReference Include="LinkOS_Xamarin_SDK" Version="1.2.0" />
    <PackageReference Include="Mono.Data.Sqlite.Portable" Version="1.0.3.5" />
    <PackageReference Include="PCLCrypto" Version="2.0.147" />
    <PackageReference Include="SegmentedControl.FormsPlugin" Version="2.0.1" />
    <PackageReference Include="Xam.Plugin.Geolocator" Version="4.5.0.6" />
    <PackageReference Include="Xam.Plugins.Settings" Version="4.0.0.10-beta" />
    <PackageReference Include="Xamarin.Controls.SignaturePad.Forms" Version="3.0.0" />

    
    <PackageReference Include="DynamicStackLayout" Version="2017.12.4" />
    <PackageReference Include="Syncfusion.Xamarin.Pdf" Version="16.2.0.50" />
    <PackageReference Include="LiveXAML" Version="2.1.72" />
    <PackageReference Include="Forms9Patch" Version="1.6.4" />
    <PackageReference Include="SkiaSharp.Svg" Version="1.59.1" />
    <PackageReference Include="SkiaSharp.Views.Forms" Version="1.59.3" />
    <PackageReference Include="Xamarin.Google.Android.Material" Version="1.4.0.6" />
    <PackageReference Include="Xamarin.AndroidX.AppCompat" Version="1.6.1.7" />
    <PackageReference Include="Xamarin.AndroidX.Legacy.Support.V4" Version="1.0.0.20" />
    <PackageReference Include="Xamarin.AndroidX.CardView" Version="1.0.0.20" />
    <PackageReference Include="Xamarin.AndroidX.MediaRouter" Version="1.3.1.3" />
    <PackageReference Include="Xamarin.AndroidX.AppCompat.AppCompatResources">
      <Version>1.6.1.7</Version>
    </PackageReference>
    <PackageReference Include="Xamarin.AndroidX.Migration" Version="1.0.10" />
    <PackageReference Include="Honeywell.BarcodeReader">
      <Version>1.32.7.10</Version>
    </PackageReference>
</ItemGroup>

Ошибка при сборке:

/Users/myname/Documents/myname/MyApp/My.App.Mobile/My.App.Mobile.Android/obj/Release/AndroidManifest.xml(16,16): Ошибка AMM0000: /Users/myname/Documents/myname/MyApp/My.App.Mobile/My.App.Mobile.Android/obj/Release/lp/111/jl/AndroidManifest.xml Предупреждение:
    Пространство имен 'com.google.android.gms.base' используется в: AndroidManifest.xml, AndroidManifest.xml.
/Users/myname/Documents/myname/MyApp/My.App.Mobile/My.App.Mobile.Android/obj/Release/lp/180/jl/AndroidManifest.xml Предупреждение:
    Пространство имен 'com.google.android.gms.common' используется в: AndroidManifest.xml, AndroidManifest.xml.
/Users/myname/Documents/myname/MyApp/My.App.Mobile/My.App.Mobile.Android/obj/Release/lp/181/jl/AndroidManifest.xml Предупреждение:
    Пространство имен 'com.google.android.gms.tasks' используется в: AndroidManifest.xml, AndroidManifest.xml.
/Users/myname/Documents/myname/MyApp/My.App.Mobile/My.App.Mobile.Android/obj/Release/lp/183/jl/AndroidManifest.xml Предупреждение:
    Пространство имен 'com.google.android.gms.maps' используется в: AndroidManifest.xml, AndroidManifest.xml.

    Атрибут application@label значение=(My.App.Mobile.Android) из AndroidManifest.xml:26:16-58
    также присутствует в AndroidManifest.xml:16:9-41 значение=(@string/app_name).
    Предложение: добавьте 'tools:replace="android:label"' в элемент <application> в AndroidManifest.xml:26:3-49:17 для переопределения.
Каталог 'obj/Release/lp/111' принадлежит 'Xamarin.GooglePlayServices.Base.dll'.
Каталог 'obj/Release/lp/180' принадлежит 'playservicesbasement-17.1.0.aar'.
Каталог 'obj/Release/lp/181' принадлежит 'playservicestasks-17.0.0.aar'.
Каталог 'obj/Release/lp/183' принадлежит 'playservicesmaps-17.0.0.aar'. (AMM0000) (My.App.Mobile.Android) java

Что я пробовал

В AndroidManifest.xml, внутри тега <application>, я пытался добавить tools:replace="android:label", но после перестройки оно автоматически удаляется, и ошибка повторяется.

Ответ или решение

Проблема с объединением манифестов в Xamarin: Подробное руководство

Введение

При разработке приложений на Xamarin вы можете столкнуться с проблемами объединения манифестов, что может привести к ошибкам во время сборки. Эти проблемы часто возникают из-за конфликтов в атрибутах, таких как android:label, и использования различных библиотек, которые требуют определенных настроек в AndroidManifest.xml.

Описание проблемы

В вашем случае вы столкнулись с ошибкой, связанной с атрибутом android:label в AndroidManifest.xml, который определяется в нескольких местах и вызывает конфликт. Ошибка, которую вы видите, указывает на то, что значение application@label указано как в вашем собственном манифесте, так и в манифестах библиотек, таких как playservicesmaps, playservicetasks и т.д.

Код ошибки:

Attribute application@label value=(My.App.Mobile.Android) 
from AndroidManifest.xml:26:16-58 is also present at AndroidManifest.xml:16:9-41 value=(@string/app_name).
Suggestion: add 'tools:replace="android:label"' to application element at AndroidManifest.xml:26:3-49:17 to override.

Решение

  1. Изменение AndroidManifest.xml:

    Чтобы разрешить конфликт, вам нужно правильно настроить ваш AndroidManifest.xml. Внутри тега <application> добавьте атрибут tools:replace. Однако, поскольку вы упомянули, что это добавление автоматически удаляется при повторной сборке, важно, чтобы вы убедились, что правильный namespace для tools был добавлен в манифест.

    Убедитесь, что в верхней части вашего AndroidManifest.xml есть следующая строка:

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
             xmlns:tools="http://schemas.android.com/tools">

    Затем ваши изменения внутри <application> должны выглядеть следующим образом:

    <application
       android:label="@string/app_name"
       tools:replace="android:label">
  2. Проверка зависимостей:

    Ваша проблема может также быть вызвана конфликтующими версиями библиотек. Убедитесь, что все зависимости совместимы друг с другом. Рассмотрите возможность обновления всех пакетов через NuGet до последней стабильной версии. Это может решить проблемы с конфликтами атрибутов в AndroidManifest.xml.

    Вы можете открыть файл .csproj и проверить, указаны ли в нем устаревшие версии пакетов. Для этого можно использовать следующую команду в NuGet Пакет Менеджере:

    Update-Package
  3. Очистка и пересборка проекта:

    После внесения изменений большого количества данных важно очистить и пересобрать проект, чтобы увидеть, были ли решены проблемы. Для этого выполните следующие шаги:

    • Перейдите в меню "Build".
    • Выберите "Clean Solution".
    • Затем выберите "Rebuild Solution".
  4. Перепроверка конфигурации:

    Если ошибка не устранена, перепроверьте все настройки вашего проекта. Убедитесь, что все параметры сборки, целевая версия Android и зависимости правильно настроены.

  5. Альтернативные решения:

    • Если указание tools:replace не работает, рассмотрите возможность создания нового проекта и поэтапного добавления пакетов, чтобы определить, какой из них вызывает конфликт.
    • Проверьте, нет ли открытых вопросов на GitHub или форумах Xamarin, связанных с вашим проблемой.

Заключение

Объединение манифестов в Xamarin может быть довольно сложной задачей для новичков и даже опытных разработчиков. Следуя приведенным выше рекомендациям, вы сможете решить проблемы, связанные с конфликтами в AndroidManifest.xml. Если проблема сохраняется, рассмотрите возможность обращения к сообществу разработчиков Xamarin или официальной поддержке для получения дополнительной помощи.

Оцените материал
Добавить комментарий

Капча загружается...