Вопрос или проблема
Я новичок в приложениях 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.
Решение
-
Изменение 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">
-
Проверка зависимостей:
Ваша проблема может также быть вызвана конфликтующими версиями библиотек. Убедитесь, что все зависимости совместимы друг с другом. Рассмотрите возможность обновления всех пакетов через NuGet до последней стабильной версии. Это может решить проблемы с конфликтами атрибутов в AndroidManifest.xml.
Вы можете открыть файл
.csproj
и проверить, указаны ли в нем устаревшие версии пакетов. Для этого можно использовать следующую команду в NuGet Пакет Менеджере:Update-Package
-
Очистка и пересборка проекта:
После внесения изменений большого количества данных важно очистить и пересобрать проект, чтобы увидеть, были ли решены проблемы. Для этого выполните следующие шаги:
- Перейдите в меню "Build".
- Выберите "Clean Solution".
- Затем выберите "Rebuild Solution".
-
Перепроверка конфигурации:
Если ошибка не устранена, перепроверьте все настройки вашего проекта. Убедитесь, что все параметры сборки, целевая версия Android и зависимости правильно настроены.
-
Альтернативные решения:
- Если указание
tools:replace
не работает, рассмотрите возможность создания нового проекта и поэтапного добавления пакетов, чтобы определить, какой из них вызывает конфликт. - Проверьте, нет ли открытых вопросов на GitHub или форумах Xamarin, связанных с вашим проблемой.
- Если указание
Заключение
Объединение манифестов в Xamarin может быть довольно сложной задачей для новичков и даже опытных разработчиков. Следуя приведенным выше рекомендациям, вы сможете решить проблемы, связанные с конфликтами в AndroidManifest.xml. Если проблема сохраняется, рассмотрите возможность обращения к сообществу разработчиков Xamarin или официальной поддержке для получения дополнительной помощи.