Поделиться через


Элементы сборки

Элементы сборки управляют созданием проекта приложения или библиотеки .NET для Android.

AndroidAdditionalJavaManifest

<AndroidAdditionalJavaManifest> используется в сочетании с разрешением зависимостей Java.

Он используется для указания дополнительных POM-файлов, необходимых для проверки зависимостей. Часто это родительские или импортированные POM-файлы, на которые ссылается POM-файл библиотеки Java.

<ItemGroup>
  <AndroidAdditionalJavaManifest Include="mylib-parent.pom" JavaArtifact="com.example:mylib-parent" JavaVersion="1.0.0" />
</ItemGroup>

Требуются следующие метаданные MSBuild:

  • %(JavaArtifact): идентификатор группы и артефакта библиотеки Java, соответствующий спецификации POM-файла в форме {GroupId}:{ArtifactId}.
  • %(JavaVersion): версия библиотеки Java, соответствующая указанному файлу POM.

Дополнительные сведения см. в документации по разрешению зависимостей Java.

Это действие сборки было введено в .NET 9.

AndroidAsset

Поддерживает ресурсы Android, то есть файлы, которые включаются в папку assets в проекте Android на Java.

Начиная с .NET 9 @(AndroidAsset) действие сборки также поддерживает дополнительные метаданные для создания пакетов ресурсов. Метаданные %(AndroidAsset.AssetPack) можно использовать для автоматического создания пакета ресурсов этого имени. Эта функция поддерживается только в том случае, если $(AndroidPackageFormat) задано значение .aab. В следующем примере будет размещаться movie2.mp4 и movie3.mp4 в отдельных пакетах ресурсов.

<ItemGroup>
   <AndroidAsset Update="Asset/movie.mp4" />
   <AndroidAsset Update="Asset/movie2.mp4" AssetPack="assets1" />
   <AndroidAsset Update="Asset/movie3.mp4" AssetPack="assets2" />
</ItemGroup>

Эту функцию можно использовать для включения больших файлов в приложение, которые обычно превышают максимальный размер пакета Google Play.

Если у вас есть большое количество ресурсов, это может быть более эффективным, чтобы использовать base пакет ресурсов. В этом сценарии вы обновляете все ресурсы, чтобы находиться в одном пакете ресурсов, а затем использовать AssetPack="base" метаданные для объявления конкретных ресурсов в базовом файле aab. С помощью этого можно использовать подстановочные знаки для перемещения большинства ресурсов в пакет ресурсов.

<ItemGroup>
   <AndroidAsset Update="Assets/*" AssetPack="assets1" />
   <AndroidAsset Update="Assets/movie.mp4" AssetPack="base" />
   <AndroidAsset Update="Assets/some.png" AssetPack="base" />
</ItemGroup>

В этом примере movie.mp4 и some.png в конечном итоге будет в base файле aab, а все остальные ресурсы будут в конечном итоге в assets1 пакете ресурсов.

Дополнительные метаданные поддерживаются только в .NET для Android 9 и более поздних версий.

AndroidAarLibrary

Действие сборки AndroidAarLibrary следует использовать для прямой ссылки на файлы .aar. Действие сборки будет наиболее часто использоваться компонентами Xamarin. А именно, чтобы включить ссылки на .aar файлы, необходимые для работы Google Play и других служб.

Файлы с этим действием сборки будут обрабатываться так же, как внедренные ресурсы, расположенные в проектах библиотек. Файлы .aar будут извлекаться в промежуточный каталог. Затем все активы, ресурсы и файлы .jar будут включены в соответствующие группы элементов.

AndroidAotProfile

Используется для предоставления профиля AOT, который будет применяться для профильного AOT.

Его также можно использовать из Visual Studio, задав для действия сборки AndroidAotProfile файл, содержащий профиль AOT.

AndroidAppBundleMetaDataFile

Указывает файл, который будет включен в пакет приложений Android в качестве метаданных. Формат значения флага определяет <bundle-path>:<physical-file> bundle-path расположение файла в каталоге метаданных пакета приложений и physical-file представляет собой существующий файл, содержащий необработанные данные для хранения.

<ItemGroup>
  <AndroidAppBundleMetaDataFile
    Include="com.android.tools.build.obfuscation/proguard.map:$(OutputPath)mapping.txt"
  />
</ItemGroup>

Дополнительные сведения см . в документации по пакету .

AndroidBoundLayout

Указывает, что файл макета должен создавать код для него в случае, если $(AndroidGenerateLayoutBindings) для свойства задано значение false. Во всех остальных аспектах он идентичен AndroidResource.

Это действие может использоваться только с файлами макета:

<AndroidBoundLayout Include="Resources\layout\Main.axml" />

AndroidEnvironment

Файлы с действием сборки AndroidEnvironment используются для инициализации переменных среды и свойств системы во время запуска процесса. Действие сборки AndroidEnvironment может быть применено к нескольким файлам, и они будут оцениваться без какого либо порядка (поэтому не указывайте одну и ту же переменную среды или системное свойство в нескольких файлах).

AndroidJavaLibrary

Файлы с действием сборки AndroidJavaLibrary — это архивы Java ( .jar файлы), которые будут включены в окончательный пакет Android.

AndroidIgnoredJavaDependency

<AndroidIgnoredJavaDependency> используется в сочетании с разрешением зависимостей Java.

Он используется для указания зависимости Java, которую следует игнорировать. Это можно использовать, если зависимость будет выполнена таким образом, чтобы разрешение зависимостей Java не было обнаружено.

<!-- Include format is {GroupId}:{ArtifactId} -->
<ItemGroup>
  <AndroidIgnoredJavaDependency Include="com.google.errorprone:error_prone_annotations" Version="2.15.0" />
</ItemGroup>

Требуются следующие метаданные MSBuild:

  • %(Version): версия библиотеки Java, соответствующая указанному %(Include).

Дополнительные сведения см. в документации по разрешению зависимостей Java.

Это действие сборки было введено в .NET 9.

AndroidJavaSource

Файлы с действием сборки AndroidJavaSource — это исходный код Java, который будет включен в окончательный пакет Android.

Начиная с .NET 7 все **\*.java файлы в каталоге проекта автоматически имеют действие AndroidJavaSourceсборки и будут привязаны до сборки сборки. Позволяет коду C# легко использовать типы и члены, присутствующих в файлах **\*.java .

Установите значение %(AndroidJavaSource.Bind) False, чтобы отключить это поведение.

AndroidLibrary

AndroidLibrary — это новое действие сборки для упрощения процесса включения файлов .jar и .aar в проекты.

Можно указать любой проект:

<ItemGroup>
  <AndroidLibrary Include="foo.jar" />
  <AndroidLibrary Include="bar.aar" />
</ItemGroup>

Результат приведенного выше фрагмента кода имеет разные последствия для каждого типа проекта .NET для Android:

  • Проекты библиотеки приложений и классов:
  • Проекты привязки Java:

Это упрощение означает, что вы можете использовать AndroidLibrary везде.

AndroidLintConfig

Действие сборки AndroidLintConfig следует использовать в сочетании со свойством Свойство $(AndroidLintEnabled). Файлы с этим действием сборки объединяются друг с другом и передаются инструментам Android lint. Они должны быть XML-файлами, содержащими сведения о тестах для включения и отключения.

Дополнительные сведения см. в документации по lint.

AndroidManifestOverlay

AndroidManifestOverlay Действие сборки можно использовать для предоставления AndroidManifest.xml файлов средству слияния манифестов. Файлы с этим действием сборки будут переданы в слияние манифестов вместе с основными AndroidManifest.xml файлами и файлами манифеста из ссылок. Затем они будут объединены в окончательный манифест.

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

<manifest xmlns:android="http://schemas.android.com/apk/res/android">
  <uses-permission android:name="android.permission.CAMERA" />
</manifest>

Чтобы добавить наложение манифеста для отладочной сборки, можно использовать следующее:

<ItemGroup>
  <AndroidManifestOverlay Include="DebugPermissions.xml" Condition=" '$(Configuration)' == 'Debug' " />
</ItemGroup>

AndroidInstallModules

Указывает модули, которые устанавливаются командой bundletool при установке пакетов.

AndroidMavenLibrary

<AndroidMavenLibrary> позволяет указать артефакт Maven, который будет автоматически скачан и добавлен в проект привязки .NET для Android. Это может быть полезно для упрощения обслуживания привязок .NET для Android для артефактов, размещенных в Maven.

<!-- Include format is {GroupId}:{ArtifactId} -->
<ItemGroup>
  <AndroidMavenLibrary Include="com.squareup.okhttp3:okhttp" Version="4.9.3" />
</ItemGroup>

Поддерживаются следующие метаданные MSBuild:

  • %(Version): требуемая версия библиотеки Java, %(Include)на которую ссылается.
  • %(Repository): необязательный репозиторий Maven для использования. Поддерживаемые значения: Central (по умолчанию) Googleили https URL-адрес репозитория Maven.

Элемент <AndroidMavenLibrary> преобразуется AndroidLibraryв , поэтому любые метаданные, поддерживаемые как %(Bind) или %(Pack) также поддерживаются<AndroidLibrary>.

Дополнительные сведения см. в документации по AndroidMavenLibrary.

Это действие сборки было введено в .NET 9.

AndroidNativeLibrary

Собственные библиотеки можно добавить в сборку, указав для них действие сборки AndroidNativeLibrary.

Обратите внимание, что так как Android поддерживает несколько двоичных интерфейсов приложений (ABIs), система сборки должна знать, что для собственной библиотеки создается ABI. Можно указать ABI двумя способами:

  1. Сканирование пути.
  2. %(Abi) Использование метаданных элемента.

При сканировании пути имя родительского каталога собственной библиотеки используется для указания целевого ABI библиотеки. Таким образом при добавлении lib/armeabi-v7a/libfoo.so к сборке ABI будет сканироваться как armeabi-v7a.

Имя атрибута элемента

Abi — задает ABI собственной библиотеки.

<ItemGroup>
  <AndroidNativeLibrary Include="path/to/libfoo.so">
    <Abi>armeabi-v7a</Abi>
  </AndroidNativeLibrary>
</ItemGroup>

AndroidPackagingOptionsExclude

Набор элементов, совместимых с глобовым двоичным объектом, который позволит исключить элементы из окончательного пакета. Значения по умолчанию приведены следующим образом.

<ItemGroup>
	<AndroidPackagingOptionsExclude Include="DebugProbesKt.bin" />
	<AndroidPackagingOptionsExclude Include="$([MSBuild]::Escape('*.kotlin_*')" />
</ItemGroup>

Элементы могут использовать символы больших двоичных объектов файлов для подстановочных знаков, таких как * и ?. Однако эти элементы должны быть закодированы или использовать $([MSBuild]::Escape(''))URL-адрес. Это так MSBuild не пытается интерпретировать их как фактические подстановочные знаки файлов.

Например.

<ItemGroup>
	<AndroidPackagingOptionsExclude Include="%2A.foo_%2A" />
  <AndroidPackagingOptionsExclude Include="$([MSBuild]::Escape('*.foo')" />
</ItemGroup>

ПРИМЕЧАНИЕ. *? И . будет заменен в BuildApk задаче соответствующими глобами файлов.

Если глобб файла по умолчанию слишком ограничивающий, его можно удалить, добавив в csproj следующую команду.

<ItemGroup>
	<AndroidPackagingOptionsExclude Remove="$([MSBuild]::Escape('*.kotlin_*')" />
</ItemGroup>

Добавлено в .NET 7.

AndroidPackagingOptionsInclude

Набор совместимых с файлами элементов, совместимых с файлами, который позволит включить элементы из окончательного пакета. Значения по умолчанию приведены следующим образом.

<ItemGroup>
	<AndroidPackagingOptionsInclude Include="$([MSBuild]::Escape('*.kotlin_builtins')" />
</ItemGroup>

Элементы могут использовать символы больших двоичных объектов файлов для подстановочных знаков, таких как * и ?. Однако эти элементы ДОЛЖНЫ использовать кодировку URL-адресов или $([MSBuild]::Escape('))". Это так MSBuild не пытается интерпретировать их как фактические подстановочные знаки файлов. Например.

<ItemGroup>
	<AndroidPackagingOptionsInclude Include="%2A.foo_%2A" />
  <AndroidPackagingOptionsInclude Include="$([MSBuild]::Escape('*.foo')" />
</ItemGroup>

ПРИМЕЧАНИЕ. *? И . будет заменен в BuildApk задаче соответствующими глобами файлов.

Добавлено в .NET 9.

AndroidResource

Все файлы с действием AndroidResource компилируются в ресурсы Android во время процесса сборки и становятся доступными с помощью $(AndroidResgenFile).

<ItemGroup>
  <AndroidResource Include="Resources\values\strings.xml" />
</ItemGroup>

Более опытным пользователям может потребоваться использовать разные ресурсы в разных конфигурациях, но с тем же эффективным путем. Этого можно достичь за счет наличия нескольких каталогов ресурсов и файлов с одинаковыми относительными путями в этих каталогах и благодаря использованию условий MSBuild для условного включения разных файлов в различные конфигурации. Например:

<ItemGroup Condition=" '$(Configuration)' != 'Debug' ">
  <AndroidResource Include="Resources\values\strings.xml" />
</ItemGroup>
<ItemGroup  Condition=" '$(Configuration)' == 'Debug' ">
  <AndroidResource Include="Resources-Debug\values\strings.xml"/>
</ItemGroup>
<PropertyGroup>
  <MonoAndroidResourcePrefix>Resources;Resources-Debug</MonoAndroidResourcePrefix>
</PropertyGroup>

LogicalName — явно указывает путь к ресурсу. Позволяет "псевдонимировать" файлы, чтобы они были доступны в виде нескольких разных имен ресурсов.

<ItemGroup Condition="'$(Configuration)'!='Debug'">
  <AndroidResource Include="Resources/values/strings.xml"/>
</ItemGroup>
<ItemGroup Condition="'$(Configuration)'=='Debug'">
  <AndroidResource Include="Resources-Debug/values/strings.xml">
    <LogicalName>values/strings.xml</LogicalName>
  </AndroidResource>
</ItemGroup>

Содержимое

Обычное действие сборки Content не поддерживается (потому что мы не выяснили, как его поддерживать без затратного шага первого запуска).

Попытка использовать действие сборки @(Content) приведет к предупреждению XA0101 .

EmbeddedJar

В проекте привязки .NET для Android действие сборки EmbeddedJar привязывает библиотеку Java/Kotlin и внедряет .jar файл в библиотеку. Когда проект приложения .NET для Android использует библиотеку, он будет иметь доступ к API Java/Kotlin из C# и включить код Java/Kotlin в окончательное приложение Android.

Вместо этого следует использовать действие сборки AndroidLibrary в качестве альтернативы, например:

<Project>
  <ItemGroup>
    <AndroidLibrary Include="Library.jar" />
  </ItemGroup>
</Project>

EmbeddedNativeLibrary

В библиотеке классов .NET для Android или проекте привязки Java действие сборки EmbeddedNativeLibrary объединяет собственную библиотеку, lib/armeabi-v7a/libfoo.so например в библиотеку. Когда приложение .NET для Android использует библиотеку, libfoo.so файл будет включен в окончательное приложение Android.

Действие сборки AndroidNativeLibrary можно использовать в качестве альтернативы.

EmbeddedReferenceJar

В проекте привязки .NET для Android действие сборки EmbeddedReferenceJar внедряет файл в библиотеку, но не создает привязку C#, так как EmbeddedJar делает..jar Когда проект приложения .NET для Android использует библиотеку, он будет включать код Java/Kotlin в окончательное приложение Android.

Действие сборки AndroidLibrary можно использовать в качестве альтернативы, например<AndroidLibrary Include="..." Bind="false" />:

<Project>
  <ItemGroup>
    <!-- A .jar file to bind & embed -->
    <AndroidLibrary Include="Library.jar" />
    <!-- A .jar file to only embed -->
    <AndroidLibrary Include="Dependency.jar" Bind="false" />
  </ItemGroup>
</Project>

JavaSourceJar

В проекте привязки .NET для Android действие сборки JavaSourceJar используется в .jar файлах, содержащих исходный код Java, которые содержат комментарии документации Javadoc.

Вместо этого Javadoc будет преобразован в комментарии xml-документации C# в созданном исходном коде привязки.

$(AndroidJavadocVerbosity) определяет, насколько "подробным" или "полным" будет импортированный Javadoc.

Поддерживаются следующие метаданные MSBuild:

  • %(CopyrightFile): путь к файлу, содержащему сведения об авторских правах для содержимого Javadoc, которое будет добавлено ко всей импортированной документации.

  • %(UrlPrefix): префикс URL-адреса для поддержки ссылки на интерактивную документацию в импортированной документации.

  • %(UrlStyle): стиль URL-адресов, создаваемых при связывании с интерактивной документацией. В настоящее время поддерживается только один стиль: developer.android.com/reference@2020-Nov.

  • %(DocRootUrl): префикс URL-адреса, используемый вместо всех {@docroot} экземпляров в импортированной документации.

LibraryProjectZip

Действие сборки LibraryProjectZip привязывает библиотеку Java/Kotlin и внедряет .zip файл в .aar библиотеку. Когда проект приложения .NET для Android использует библиотеку, он будет иметь доступ к API Java/Kotlin из C# и включить код Java/Kotlin в окончательное приложение Android.

LinkDescription

Файлы с действием сборки LinkDescription используются для управления поведением компоновщика.

ProguardConfiguration

Файлы с действием сборки ProguardConfiguration содержат параметры, которые используются для управления поведением proguard. Дополнительные сведения об этом действии см. в разделе ProGuard.

Эти файлы игнорируются, если свойство MSBuild $(EnableProguard) Свойство MSBuild имеет значение True.