Свойства сборки

Свойства MSBuild управляют поведением целевых объектов.

Они указываются в файле проекта, например MyApp.csproj, в MSBuild PropertyGroup.

Примечание.

В .NET для Android технически нет различий между приложением и проектом привязок, поэтому свойства будут работать в обоих. На практике настоятельно рекомендуется создавать отдельные проекты приложений и привязок. Свойства, которые в основном используются в проектах привязок, описаны в справочном руководстве по свойствам проекта MSBuild.

Область действия среды выполнения

Обычные приложения Android ориентированы на CoreCLR начиная с .NET 11. Приложения Android, предназначенные для .NET 10 и более ранних версий, используют Mono по умолчанию. Установка параметра $(PublishAot) в значение true выбирает среду выполнения NativeAOT для поддерживаемых публикаций или оптимизированных сборок и имеет приоритет над $(UseMonoRuntime).

$(UseMonoRuntime)=true не является обходным путём в .NET 11. SDK .NET 11 не принимает его и выдаёт ошибку NETSDK1242. Используйте рекомендации по Mono для .NET 10 и более ранних версий, только если вы ориентируетесь на платформу, в которой поддерживается Mono.

AdbTarget

Свойство $(AdbTarget) указывает целевое устройство Android, на котором может быть установлен или удален пакет Android. Значение этого свойства совпадает со значением параметра adb целевого устройства.

AfterGenerateAndroidManifest

Цели MSBuild, указанные в данном свойстве, будут выполняться непосредственно после внутренней цели _GenerateJavaStubs, где создается файл AndroidManifest.xml в $(IntermediateOutputPath). Если вы хотите внести изменения в созданный файл AndroidManifest.xml, это можно сделать с помощью этой точки расширения.

AndroidAapt2CompileExtraArgs

Задает параметры командной строки для передачи команде компиляции aapt2 compile при обработке активов и ресурсов Android.

AndroidAapt2LinkExtraArgs

Задает параметры командной строки для передачи команде link aapt2 при обработке ресурсов и активов Android.

AndroidAddKeepAlives

Логическое свойство, определяющее, будет ли компоновщик вставлять вызовы GC.KeepAlive() в рамках проектов привязки для предотвращения преждевременного сбора объектов.

Значение по умолчанию — True для сборок с конфигурацией Release.

Для несокращённых сборок, использующих карту типов trimmable, вызовы GC.KeepAlive() вставляются только тогда, когда $(AndroidEnableLegacyCompatibilityAssemblyFixups) также True. Урезанные сборки с картой типов trimmable не вставляют такие вызовы.

AndroidAotAdditionalArguments

Строковое свойство, позволяющее передавать параметры компилятору Mono во время Aot задачи для проектов, у которых $(AndroidEnableProfiledAot) или $(AotAssemblies) установлены в true. Строковое значение этого свойства добавляется в файл ответов при вызове кросс-компилятора Mono.

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

Свойство $(AndroidAotAdditionalArguments) отличается от связанного $(AndroidExtraAotOptions) свойства; $(AndroidAotAdditionalArguments) передает полные автономные параметры, разделенные пробелами, например --verbose или --debug компилятору AOT, в то время как $(AndroidExtraAotOptions) содержит аргументы, разделенные запятыми, которые являются частью --aot параметра компилятора AOT.

AndroidAotCustomProfilePath

Файл, который aprofutil должен создать для хранения данных профилировщика.

AndroidAotProfiles

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

AndroidAotProfilerPort

Порт, к которому aprofutil должен подключаться при получении данных профилирования.

AndroidAotEnableLazyLoad

Включите ленивую загрузку сборок AOT-д (отложенную), вместо предварительной загрузки их при запуске. Значение по умолчанию — True для релизных сборок с любой формой AOT включена.

Представлено в .NET 6.

AndroidApkDigestAlgorithm

Значение типа string, определяющее алгоритм дайджеста, используемый с jarsigner -digestalg.

Значение по умолчанию — SHA-256.

AndroidApkSignerAdditionalArguments (дополнительные аргументы AndroidApkSigner)

Строковое свойство, позволяющее разработчику предоставлять аргументы средству apksigner .

AndroidApkSigningAlgorithm

Строковое значение, указывающее алгоритм подписи для использования jarsigner -sigalg.

Значение по умолчанию — SHA256withRSA.

AndroidApplication

Логическое значение, указывающее, для чего предназначен проект: для приложения Android (True) или для библиотеки Android (False или не задано).

Только один проект со значением <AndroidApplication>True</AndroidApplication> может присутствовать в пакете Android. (К сожалению, это требование не проверяется, что может привести к тонким и странным ошибкам в отношении ресурсов Android.)

AndroidApplicationJavaClass

Полное имя класса Java для использования вместо android.app.Application, когда класс наследуется от Android.App.Application.

Свойство $(AndroidApplicationJavaClass) обычно задается другими свойствами, такими как $(AndroidEnableMultiDex) свойство MSBuild.

AndroidAvoidEmitForPerformance

Логическое свойство, определяющее, следует ли избегать System.Reflection.Emit для повышения производительности запуска. По умолчанию это свойство имеет значение True.

System.Reflection.Emit Использование имеет заметное влияние на производительность запуска в Android. Это поведение отключено по умолчанию для следующих переключателей функций:

  • Switch.System.Reflection.ForceInterpretedInvoke: после второго вызова MethodInfo.Invoke() или ConstructorInfo.Invoke(), генерируется код, чтобы повысить производительность повторяющихся вызовов.

  • Microsoft.Extensions.DependencyInjection.DisableDynamicEngine: после второго вызова для получения сервиса из контейнера внедрения зависимостей осуществляется генерация кода для оптимизации повторяющихся вызовов.

В большинстве приложений Android желательно отключить это поведение.

Дополнительные сведения о доступных коммутаторах функций см. в документации по библиотекам базовых классов.

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

AndroidBinUtilsPath

Путь к каталогу, содержащему средства binutils для Android, такие как встроенный компоновщик ld и встроенный ассемблер as. Эти средства включены в рабочую нагрузку .NET для Android.

Значение по умолчанию — $(MonoAndroidBinDirectory)\binutils\bin\.

AndroidBoundExceptionType

Строковое значение, указывающее, как следует распространять исключения, когда предоставленный тип .NET для Android реализует тип или интерфейс .NET с точки зрения типов Java, например Android.Runtime.InputStreamInvoker и System.IO.Stream, или Android.Runtime.JavaDictionary и System.Collections.IDictionary.

  • Java: исходный тип исключения Java распространяется как есть.

    Java означает, что, например, InputStreamInvoker неправильно реализует System.IO.Stream API, так как Java.IO.IOException может быть выброшено из Stream.Read() вместо System.IO.IOException.

  • System: исходный тип исключения Java перехватывается и упаковывается в соответствующий тип исключения .NET.

    System означает, что, например, InputStreamInvoker правильно реализует System.IO.Stream, и Stream.Read() не будет выбрасывать Java.IO.IOException экземпляры. (Вместо этого может быть выброшено System.IO.IOException, содержащий Java.IO.IOException в качестве значения Exception.InnerException.)

    По умолчанию устанавливается значение System.

ИнтерфейсыAndroidСвязанныхСконстантами

Логическое свойство, которое определяет, будут ли поддержаны константы интерфейсов, или же будет использован обходной метод создания класса IMyInterfaceConsts.

Значение по умолчанию — True.

ИнтерфейсыAndroidСодержатСтатическиеИМетодыПоУмолчанию

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

Значение по умолчанию используется True в .NET 6 и False для устаревших версий.

AndroidBoundInterfacesContainTypes

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

Значение по умолчанию используется True в .NET 6 и False для устаревших версий.

AndroidBuildApplicationPackage

Логическое значение, указывающее, следует ли создавать и подписывать пакет (APK-файл). Установка этого значения True эквивалентна использованию SignAndroidPackage Целевой объект сборки.

По умолчанию это свойство имеет значение False.

AndroidBundleConfigurationFile (Файл конфигурации AndroidBundle)

Указывает имя файла, используемого в качестве файла конфигурации при создании пакета приложения Android. Этот файл управляет некоторыми аспектами генерации APK из пакета, например, указывает, по каким параметрам пакет делится для создания APK. .NET для Android настраивает некоторые из этих параметров автоматически, включая список расширений файлов, которые нужно оставить несжатыми.

Это свойство используется, только если $(AndroidPackageFormat) имеет значение aab.

AndroidBundleToolExtraArgs

Задает параметры командной строки для передачи команде bundletool при сборке пакетов приложений.

AndroidClassParser

Строковое свойство, которое управляет разбором файлов .jar. Возможные значения включают:

  • class-parse: использует class-parse.exe для непосредственного синтаксического анализа байт-кода Java без использования виртуальной машины Java.

  • jar2xml: это значение устарело и больше не поддерживается.

AndroidCodegenTarget

Строковое свойство, которое управляет целевым объектом ABI создания кода. Возможные значения включают:

  • XamarinAndroid: это значение устарело и больше не поддерживается.

  • XAJavaInterop1: использует Java.Interop для вызова JNI. Сборки привязки с XAJavaInterop1 можно создавать и выполнять только с помощью Xamarin.Android 6.1 или более поздней версии. Xamarin.Android 6.1 и более поздних версий связывает Mono.Android.dll с этим значением.

  • JavaInterop1: экспериментальное значение, в настоящее время используется по умолчанию для среды выполнения NativeAOT.

Значение по умолчанию — XAJavaInterop1.

AndroidCreatePackagePerAbi

Логическое свойство, определяющее, должен ли быть создан набор файлов - по одному на каждый ABI, указанный в $(AndroidSupportedAbis), - вместо поддержки всех ABI в одном .apk.

См. также руководство Создание пакетов APK для конкретного ABI.

AndroidCreateProguardMappingFile

Логическое свойство, которое управляет созданием файла сопоставления proguard в рамках процесса сборки.

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

<AndroidCreateProguardMappingFile>True</AndroidCreateProguardMappingFile>

При создании .aab файлов файл сопоставления автоматически включается в пакет. Нет необходимости отправлять его в Google Play Store вручную. При работе с .apk файлами AndroidProguardMappingFile необходимо загружать вручную.

Значение по умолчанию равно True, если используется $(AndroidLinkTool)=r8.

AndroidDebugKeyAlgorithm

Указывает алгоритм по умолчанию для debug.keystore. Значение по умолчанию — RSA.

AndroidDebugKeyValidity

Указывает срок действия по умолчанию для debug.keystore. Значение по умолчанию — 10950 или 30 * 36530 years .

AndroidDebugStoreType

Указывает формат файла хранилища ключей, используемый для debug.keystore. По умолчанию имеет значение pkcs12.

AndroidDeviceUserId

Разрешает развертывание и отладку приложения с использованием гостевой или рабочей учетной записи. Значением является значение uid, полученное из следующей команды adb:

adb shell pm list users

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

Users:
	UserInfo{0:Owner:c13} running
	UserInfo{10:Guest:404}

uid — первое целочисленное значение. В приведенных выше выходных данных они 0 и 10.

AndroidDexTool

Свойство перечисляемого типа с допустимым значением d8. Ранее значение dx было поддерживается в Xamarin.Android.

Указывает, какой компилятор Android dex используется во время процесса сборки .NET для Android. Значение по умолчанию — d8. Ознакомьтесь с нашей документацией по D8 и R8.

AndroidEnableDesugar

Булевое свойство, которое определяет, включен ли desugar. В настоящее время Android не поддерживает все функции Java 8, а цепочка инструментов по умолчанию реализует новые языковые функции, выполняя преобразования байт-кода, вызываемые desugarв выходных данных компилятора javac . Значение по умолчанию — False, если используется $(AndroidDexTool)=dx, и True, если используется $(AndroidDexTool)=d8.

AndroidEnableFastDeployment

Логическое свойство, определяющее, включено ли быстрое развертывание. «Быстрое развертывание» размещает сборки вне пакета приложения, что может сократить время развертывания и повторной сборки.

Значение по умолчанию — True для отладочных сборок и False для сборок выпуска. Задание этого свойства эквивалентно настройке обратного $(EmbedAssembliesIntoApk)значения. Если оба свойства заданы, $(EmbedAssembliesIntoApk) имеет приоритет.

AndroidEnableGooglePlayStoreChecks

Логическое свойство, позволяющее разработчикам отключить следующие проверки Google Play Store: XA1004, XA1005 и XA1006. Отключение этих проверок полезно для разработчиков, которые не нацелены на Google Play Store и не хотят запускать эти проверки.

AndroidEnableLegacyCompatibilityAssemblyFixups

Логическое свойство, управляющее тем, изменяют ли нетриммированные сборки сборки, на которые имеются ссылки, для поддержки устаревшей привязки и поведения дизайнера ресурсов. Эти изменения включают добавление отсутствующих абстрактных методов интерфейса, обновление устаревших ссылок на класс Resource.Designer и вставку вызовов GC.KeepAlive() в более старые сборки привязки Xamarin.Android. Обрезанные сборки с использованием карты типов trimmable не выполняют эти исправления совместимости, и установка этого свойства в значение True не включает их для обрезанных сборок.

Значение по умолчанию — False, если $(AndroidTypeMapImplementation) равно trimmable, и True в противном случае.

AndroidEnableMarshalMethods

Логическое свойство, определяющее, включены ли методы маршала LLVM. Методы маршалирования LLVM — это оптимизация запуска приложения, которая использует собственные точки входа для регистрации методов Java native .

Это свойство имеет значение False по умолчанию.

Для этого свойства нельзя задать значение true, если $(PublishReadyToRun) имеет значение true.

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

AndroidEnableMultiDex

Логическое свойство, которое определяет, будет ли использована поддержка multi-dex в окончательном файле .apk.

По умолчанию это свойство имеет значение False.

AndroidEnableProfiler

Для приложений Mono это синоним свойства $(EnableDiagnostics) . Если это true, то диагностический компонент Mono, libmono-component-diagnostics_tracing.so, входит в состав приложения.

Для приложений CoreCLR в .NET 11 и более поздних версиях это свойство включает настройку диагностического порта CoreCLR, которую используют такие инструменты, как dotnet-trace и dotnet-gcdump; но оно не добавляет диагностический компонент Mono. NativeAOT — это отдельная среда выполнения, выбранная с помощью $(PublishAot) этого свойства, и это свойство документирует только поддерживаемое поведение упаковки и конфигурации Android.

По умолчанию это свойство имеет значение False.

AndroidEnableObsoleteOverrideInheritance

Логическое свойство, определяющее, наследуют ли автоматически привязанные методы атрибуты [Obsolete] от методов, которые они переопределяют.

Поддержка этого свойства добавлена в .NET 8.

По умолчанию это свойство имеет значение True.

AndroidEnablePreloadAssemblies

Логическое свойство, которое определяет, загружаются ли все управляемые сборки, упакованные в пакет приложения, во время запуска процесса или нет.

Если задано значение True, все сборки, объединенные в пакет приложения, будут загружены во время запуска процесса до вызова кода приложения.

Если задано значение False, сборки загружаются только по мере необходимости. Загрузка сборок по мере необходимости позволяет приложениям запускаться быстрее, а также соответствует семантике .NET для настольных компьютеров. Чтобы увидеть экономию времени, установите системное свойство debug.mono.log, чтобы включить timing, и найдите сообщение Finished loading assemblies: preloaded в adb logcat.

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

По умолчанию это значение равно False.

AndroidEnableProfiledAot

Логическое свойство, которое определяет, используются ли профили AOT (Ahead-of-Time) во время компиляции.

Профили перечислены. @(AndroidAotProfile) Группа элементов. Эта ItemGroup содержит профили по умолчанию. Ее можно заменить, удалив существующие профили и добавив свои профили AOT.

По умолчанию это свойство имеет значение False.

AndroidEnableRestrictToAttributes

Свойство типа перечисления с допустимыми значениями obsolete и disable.

Если задано значение obsolete, типы и члены, помеченные заметкой androidx.annotation.RestrictTo Java, или находящиеся в неэкспортированных пакетах Java, будут помечены атрибутом в привязке C#.

Этот [Obsolete] атрибут содержит описательное сообщение, объясняющее, что владелец пакета Java считает API "внутренним" и предупреждает о его использовании.

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

Если задано значение disable, API будет создан как обычный без дополнительных атрибутов. (Это то же поведение, что и до .NET 8.)

Добавление [Obsolete] атрибутов вместо автоматического удаления API было сделано для сохранения совместимости API с существующими пакетами. Если вы предпочитаете вместо этого удалять элементы, которые имеют @RestrictTo аннотацию или находятся в неэкспортируемых пакетах Java, вы можете использовать файлы преобразования в дополнение к этому свойству, чтобы предотвратить привязку этих типов:

<remove-node path="//*[@annotated-visibility]" />

Поддержка этого свойства добавлена в .NET 8.

Это свойство задано obsolete по умолчанию.

AndroidEnableSGenConcurrent

Логическое свойство, которое определяет, будет ли использоваться или нет параллельный сборщик мусора Mono.

По умолчанию это свойство имеет значение False.

AndroidErrorOnCustomJavaObject (Ошибка Android на пользовательском Java-объекте)

Логическое свойство, которое определяет, могут ли типы реализовываться Android.Runtime.IJavaObjectбез одновременного наследования от Java.Lang.Object или Java.Lang.Throwable:

class BadType : IJavaObject {
    public IntPtr Handle {
        get {return IntPtr.Zero;}
    }

    public void Dispose()
    {
    }
}

Если значение равно true, такие типы будут вызывать ошибку XA4212. Если значение false, будет сформировано предупреждение XA4212.

По умолчанию это свойство имеет значение True.

AndroidExplicitCrunch

Это свойство больше не поддерживается.

AndroidExtraAotOptions

Строковое свойство, позволяющее передавать параметры компилятору Mono во время Aot задачи для проектов, у которых $(AndroidEnableProfiledAot) или $(AotAssemblies) установлены в true. Строковое значение этого свойства добавляется в файл ответов при вызове кросс-компилятора Mono.

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

Свойство $(AndroidExtraAotOptions) отличается от связанного $(AndroidAotAdditionalArguments) свойства; $(AndroidAotAdditionalArguments) помещает аргументы, разделенные запятыми, в --aot параметр компилятора Mono. В свою очередь, $(AndroidExtraAotOptions) передает в компилятор разделенные пробелами полные автономные параметры, такие как --verbose или --debug.

AndroidFastDeploymentType

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

AndroidFragmentType

Указывает полный тип по умолчанию, используемый для всех элементов макета <fragment> при создании кода привязок макета. Значение по умолчанию — стандартный тип Android Android.App.Fragment .

AndroidGenerateJniMarshalMethods

Эта экспериментальная функция была удалена в .NET 11. Установка этого свойства не имеет никакого эффекта.

AndroidGenerateJniMarshalMethodsAdditionalArguments

Эта экспериментальная функция была удалена в .NET 11. Установка свойства не имеет никакого эффекта.

AndroidGenerateLayoutBindings

Включает создание кода программной части макета, если присвоить значение true, или полностью отключает его, если задать значение false.

Значение по умолчанию — false.

AndroidGenerateResourceDesigner

Значение по умолчанию — true. Если задано значение false, отключает создание Resource.designer.cs.

AndroidHttpClientHandlerType

Примечание.

Это свойство не поддерживается в .NET 11. Удалите его из файла проекта и используйте UseNativeHttpHandler вместо этого.

AndroidIgnoreAllJniPreload

Логическое значение, которое, если задано true, освобождает все собственные библиотеки JNI от предварительной загрузки при запуске приложения. По умолчанию все такие библиотеки загружаются средой выполнения рано во время запуска приложения, чтобы обеспечить правильную инициализацию. Однако в некоторых случаях это не может быть требуемое поведение, и это свойство позволяет эффективно отключить его.

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

См. также @(AndroidNativeLibraryNoJniPreload) для более детализированного способа исключения библиотек из механизма предварительной загрузки.

AndroidIncludeWrapSh

Логическое значение, указывающее, следует ли упаковать скриптwrap.sh оболочки Android в APK. Значение по умолчанию, false так как скрипт-оболочка может значительно повлиять на способ запуска приложения и работы, и скрипт должен быть включен только при необходимости, например при отладке или изменении поведения запуска приложения или среды выполнения.

Скрипт добавляется в проект с помощью действия сборки. @(AndroidNativeLibrary) Действие сборки, так как оно помещается в тот же каталог, что и собственные библиотеки для конкретной архитектуры, и должно быть названо wrap.sh.

Самый простой способ указать путь к скрипту wrap.sh — это разместить его в каталоге, имя которого совпадает с конечной архитектурой. Это сработает только в том случае, если у вас только один вариант wrap.sh для архитектуры:

<AndroidNativeLibrary Include="path/to/arm64-v8a/wrap.sh" />

Однако, если проект нуждается в более чем одном wrap.sh на каждую архитектуру для разных целей, этот подход работать не будет. Вместо этого в таких случаях для указания имени можно использовать метаданные LinkAndroidNativeLibrary:

<AndroidNativeLibrary Include="/path/to/my/arm64-wrap.sh">
  <Link>lib\arm64-v8a\wrap.sh</Link>
</AndroidNativeLibrary>

Если используются метаданные Link, путь, указанный в его значении, должен представлять собой допустимый путь к собственной библиотеке для конкретной архитектуры относительно корневого каталога APK. Формат пути — lib\ARCH\wrap.sh, где ARCH может быть одним из следующего:

  • arm64-v8a
  • armeabi-v7a
  • x86_64
  • x86

AndroidДобавитьНаборыРесурсовВПакет

Это свойство определяет, автоматически ли сборка пакетов активов включается в окончательный .aab файл. Будет установлено значение по умолчанию true.

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

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

AndroidInstallJavaDependencies

Значение по умолчанию для сборок командной строки — true. Если задано значение true, при запуске <InstallAndroidDependencies/> целевого объекта включается установка пакета SDK для Java.

Поддержка этого свойства добавлена в .NET 9.

AndroidInstrumentation

Строковое свойство, указывающее имя класса Android instrumentation runner, используемого для запуска приложения через dotnet run.

Если это свойство не задано, dotnet run определяет, что запускать, на основе созданного AndroidManifest.xml в промежуточных выходных данных:

  • Если $(AndroidUseInstrumentation) имеет значение true, используется первый элемент <instrumentation/>.
  • В противном случае вариант запуска <activity/> предпочтителен, и первый <instrumentation/> элемент используется, когда приложение объявляет о отсутствии запускаемого действия. Это делает возможным dotnet run приложение, единственной точкой входа которого является подкласс Android.App.Instrumentation, например хост BenchmarkDotNet.

Если приложение не объявляет ни то, ни другое, сборка завершается с ошибкой XA1043. Если $(AndroidUseInstrumentation) имеет значение <instrumentation/>, но приложение не объявляет true, сборка завершается с ошибкой XA1048.

При запуске инструментального теста dotnet run запускает Instrumentation.Finish() и завершается с ненулевым кодом выхода, если инструментальный тест аварийно завершается или вызывает Result.Canceled с adb shell am instrument -w -r. Установка значения false на $(WaitForExit) приводит к пропуску -w, поэтому dotnet run возвращается сразу после запуска инструментирования, и ни о каких результатах не сообщается.

Все аргументы после -- передаются средству инструментирования как дополнительные параметры am instrument. Аргументы формы KEY=VALUE становятся -e KEY VALUE, и все остальные аргументы объединяются в один -e args "..." дополнительный:

dotnet run -- --filter *MyBenchmark*

доставляется Instrumentation.OnCreate(Bundle?) как arguments.GetString("args").

Представлено в .NET 11.

AndroidJavadocVerbosity

Задаёт, насколько "подробными" должны быть XML-комментарии документации C# при импорте документации Javadoc в проектах привязки.

Требуется использование @(JavaSourceJar) действие сборки.

Свойство $(AndroidJavadocVerbosity) подобно перечислению, с возможными значениями full или intellisense.

Значение по умолчанию — intellisense.

AndroidKeyStore

Логическое значение, указывающее, нужно ли использовать пользовательские сведения о подписи. Значение по умолчанию — False. Это означает, что для подписания пакетов будет использоваться ключ подписи отладки по умолчанию.

AndroidLaunchActivity

Активность Android для запуска.

AndroidLinkMode

Указывает, какой тип компоновки должен быть применен для сборок, содержащихся в пакете Android. Используется только в проектах приложений Android. Значение по умолчанию: SdkOnly. Допустимые значения:

  • Отсутствует: связывание не будет выполнено.

  • SdkOnly: компоновка будет выполнена только для библиотеки базовых классов, но не сборок пользователя.

  • Full: связывание будет выполнено для библиотек базовых классов и пользовательских сборок.

    Примечание.

    Использование для свойства AndroidLinkMode значения Full часто приводит к ненадлежащей работе приложений, особенно при использовании отражения. Не делайте этого, если не действительно уверены, что знаете, что делаете.

<AndroidLinkMode>SdkOnly</AndroidLinkMode>

AndroidLinkResources

Когда true, система сборки будет связывать вложенные типы класса Resource.Designer.cs Resource во всех сборках. Код IL, использующий эти типы, будет обновлен для использования значений напрямую, а не для доступа к полям.

Связывание вложенных типов может иметь небольшое влияние на уменьшение размера apk, а также может помочь с производительностью запуска. Связаны только сборки Release.

Экспериментальное. Предназначено только для работы с кодом, таким как

var view = FindViewById(Resources.Ids.foo);

Любые другие сценарии (например, отражение) не будут поддерживаться.

AndroidLinkSkip

Указывает список разделенных точкой с запятой (;) имен сборок, которые не должны быть связаны, без расширений имен файлов. Используется только в проектах приложений Android.

<AndroidLinkSkip>Assembly1;Assembly2</AndroidLinkSkip>

AndroidLinkTool

Свойство в стиле перечисления с допустимыми значениями proguard или r8. Указывает, какое средство для сокращения кода используется для кода Java. Значение по умолчанию — пустая строка или proguard если $(AndroidEnableProguard) это True. Ознакомьтесь с нашей документацией по D8 и R8.

AndroidLintEnabled

Логическое свойство, позволяющее разработчику запускать средство android lint в рамках процесса упаковки.

При $(AndroidLintEnabled)=True используются следующие свойства:

Можно также использовать следующие действия сборки:

См. справку по Lint, чтобы узнать больше об инструментах Android lint.

Проблемы, включенные в AndroidLint (AndroidLintEnabledIssues)

Строковое свойство в виде списка ошибок линтера, разделенных запятыми, которые необходимо включить.

Используется только в том случае, если $(AndroidLintEnabled)=True.

Отключённые проверки Android Lint

Строковое свойство, которое представляет собой список ошибок линтинга, разделённых запятыми, для отключения.

Используется только в том случае, если $(AndroidLintEnabled)=True.

ПроблемыПроверкиLintДляAndroid

Строковое свойство, которое представляет собой список проблем с запятыми для проверки.

Используется только в том случае, если $(AndroidLintEnabled)=True.

Примечание. Проверяться будут только эти проблемы.

AndroidManagedSymbols

Логическое свойство, которое определяет, создаются ли точки последовательности, чтобы можно было извлечь имя файла и номер строки из трассировки стека Release.

AndroidManifest

Определяет имя файла, которое будет использоваться в качестве шаблона для AndroidManifest.xml приложения. Во время сборки необходимые значения будут объединены для создания фактического файла AndroidManifest.xml. $(AndroidManifest) должен содержать имя пакета в атрибуте /manifest/@package.

AndroidManifestMerger

Указывает реализацию для слияния файлов AndroidManifest.xml. Это перечислимое свойство, где legacy выбирает исходную реализацию C#, а manifestmerger.jar выбирает реализацию Java от Google.

По умолчанию сейчас используется значение manifestmerger.jar. Если вы хотите использовать старую версию, добавьте следующую версию в csproj

<AndroidManifestMerger>legacy</AndroidManifestMerger>

Слияние Google позволяет поддерживать xmlns:tools="http://schemas.android.com/tools", как описано в документации Android.

AndroidManifestMergerExtraArgs

Строковое свойство для предоставления аргументов инструменту документации Android.

Если вы хотите получить подробные выходные данные из этого инструмента, вы можете добавить следующее в .csproj.

<AndroidManifestMergerExtraArgs>--log VERBOSE</AndroidManifestMergerExtraArgs>

AndroidManifestType

Свойство в стиле перечисления с допустимыми значениями Xamarin или GoogleV2. Это управляет тем, какой репозиторий используется InstallAndroidDependencies цель - определить, какие пакеты и версии пакетов Android доступны и могут быть установлены.

Xamarin — это репозиторий утвержденного списка (рекомендуемый) в диспетчере пакетов SDK Visual Studio.

GoogleV2— это репозиторий «Полный список (неподдерживаемый)» в составе диспетчера SDK Visual Studio.

Если $(AndroidManifestType) значение не задано, Xamarin используется.

AndroidManifestSource

Строковое свойство, указывающее абсолютный URI или существующий путь к локальному файлу манифеста репозитория, используемого системой InstallAndroidDependencies целевой объект. Если это свойство не задано, используется манифест репозитория по умолчанию, выбранный с помощью $(AndroidManifestType).

Например:

<AndroidManifestSource>https://example.com/AndroidManifestFeed.xml</AndroidManifestSource>

ЗаполнителиAndroidManifest

Разделенный точками с запятой список заменяемых пар "ключ-значение" для AndroidManifest.xml, где каждая пара имеет формат key=value.

Например, значение свойства assemblyName=$(AssemblyName) определяет заполнитель ${assemblyName}, который затем может появиться в AndroidManifest.xml:

<application android:label="${assemblyName}"

Это позволяет вставлять переменные из процесса сборки в файл AndroidManifest.xml.

AndroidMultiDexClassListExtraArgs

Строковое свойство, позволяющее разработчикам передавать аргументы com.android.multidex.MainDexListBuilder при создании multidex.keep файла.

Один из частных случаев — появление следующей ошибки во время компиляции dx.

com.android.dex.DexException: Too many classes in --main-dex-list, main dex capacity exceeded

Если возникает эта ошибка, в файл .csproj можно добавить следующее:

<DxExtraArguments>--force-jumbo </DxExtraArguments>
<AndroidMultiDexClassListExtraArgs>--disable-annotation-resolution-workaround</AndroidMultiDexClassListExtraArgs>

что позволит шагу dx завершиться успешно.

AndroidNdkDirectory

Свойство $(AndroidNdkDirectory) задает пользовательский каталог установки Android NDK. Путь можно задать в файле проекта или в командной строке:

dotnet build -p:AndroidNdkDirectory=/path/to/android-ndk

Если это свойство не задано, .NET для Android находит NDK из настроенной среды разработки Android.

AndroidPackageFormat

Свойство в стиле перечисления с допустимыми значениями apk или aab. Указывает, нужно ли упаковать приложение Android в виде APK-файла или пакета приложений Android. Пакеты приложений — это новый формат для сборок Release, предназначенных для отправки на Google Play. Значение по умолчанию — apk.

Если параметр $(AndroidPackageFormat) имеет значение aab, то устанавливаются другие свойства MSBuild, которые необходимы для пакетов приложений Android:

Это свойство будет признано устаревшим для .NET 6. Пользователи должны переключиться на более новую AndroidPackageFormatsверсию.

ФорматыПакетовAndroid

Свойство, разделенное точкой с запятой, с допустимыми значениями apk и aab. Указывает, нужно ли упаковать приложение Android в виде APK-файла или пакета приложений Android. Пакеты приложений — это новый формат для сборок Release, предназначенных для отправки на Google Play.

При создании релизной сборки может потребоваться создать как aab, так и apk для распространения в различные магазины.

Установка AndroidPackageFormats в aab;apk приведет к генерации обоих. Установка AndroidPackageFormats либо на aab, либо на apk приведет к созданию только одного файла.

Значение по умолчанию — aab;apk только для Release сборок. Использование apk для отладки выполняется быстрее, но aab также поддерживает быстрое развертывание при необходимости (например, при тестировании пакетов ресурсов).

AndroidPackageNamingPolicy

Свойство, использующее перечисление, для указания имен пакетов Java генерируемого исходного кода Java.

Единственным поддерживаемым значением является LowercaseCrc64.

AndroidPrepareForBuildDependsOn

Свойство с разделителями с запятой, которое можно использовать для расширения процесса сборки Android. Целевые объекты MSBuild, добавленные в это свойство, будут выполняться в начале сборки для типов проектов приложений и библиотек. Это свойство пусто по умолчанию.

Пример:

<PropertyGroup>
  <AndroidPrepareForBuildDependsOn>MyCustomTarget</AndroidPrepareForBuildDependsOn>
</PropertyGroup>

<Target Name="MyCustomTarget" >
  <Message Text="Running target: 'MyCustomTarget'" Importance="high"  />
</Target>

AndroidProguardMappingFile

Задает правило ProGuard -printmapping для r8. Это означает, что файл mapping.txt будет создан в папке $(OutputPath). Этот файл можно затем использовать при отправке пакетов в Магазин Google PlayPlay.

По умолчанию этот файл создается автоматически при использовании AndroidLinkTool=r8 и создаст следующий файл $(OutputPath)mapping.txt.

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

<AndroidCreateProguardMappingFile>False</AndroidCreateProguardMappingFile>

или используйте -p:AndroidCreateProguardMappingFile=False в командной строке.

AndroidD8IgnoreWarnings

Указывает --map-diagnostics warning info, который передается в d8. Значение по умолчанию равно True, но может быть установлено False для обеспечения более строгого поведения. Дополнительные сведения см. в исходном коде D8 и R8.

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

AndroidR8IgnoreWarnings

Задает правило ProGuard -ignorewarnings для r8. Это позволяет r8 продолжать компиляцию DEX, даже если обнаружены определенные предупреждения. Значение по умолчанию равно True, но может быть установлено False для обеспечения более строгого поведения. Дополнительные сведения см. в руководстве по ProGuard.

Начиная с .NET 8, указывает --map-diagnostics warning info. Дополнительные сведения см. в исходном коде D8 и R8.

AndroidR8JarPath

Путь к r8.jar для использования с DEX-компилятором и средством сжатия кода r8. Значение по умолчанию — это путь к установочному пакету .NET для Android. Дополнительные сведения см. в документации по D8 и R8.

AndroidR8ObfuscationMode

Свойство типа enum, указывающее, как r8 обфусцирует имена Java, когда значение $(AndroidLinkTool) равно r8. Поддерживаемые значения:

  • private-membersсохраняет имена классов и интерфейсов Java и общедоступные или защищенные имена элементов. Частные и закрытые члены пакета можно скрыть, а оптимизация R8 включена.
  • disabled отключает обфускацию, сохраняет все имена Java и использует настройки Android R8 по умолчанию без оптимизации.

Это свойство не отключает сжатие кода R8.

Это свойство было введено в выпуске обслуживания .NET 10. По умолчанию используется значение disabled в .NET 10 и значение private-members в .NET 11 и более поздних версиях.

AndroidResgenExtraArgs

Задает параметры командной строки для передачи команде aapt при обработке активов и ресурсов Android.

AndroidResgenFile

Задает имя создаваемого файла ресурсов. По умолчанию шаблон задает Resource.designer.cs.

AndroidResourceDesignerClassModifier

Задает модификатор класса для созданного промежуточного Resource класса. Допустимые значения — public и internal.

По умолчанию это будет public.

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

AndroidSdkBuildToolsVersion

Пакет средств сборки SDK для Android, который, помимо прочих, включает средства aapt и zipalign. Одновременно могут быть установлены несколько различных версий пакета средств сборки. Пакет средств сборки, выбранный для упаковки, создается путем проверки и использования "предпочтительной" версии, если она присутствует. Если такая версия отсутствует, то используется установленный пакет средств сборки последней версии.

Свойство MSBuild $(AndroidSdkBuildToolsVersion) содержит предпочтительную версию средств сборки. Система сборки .NET для Android предоставляет значение Xamarin.Android.Common.targets по умолчанию, и это значение может быть переопределено в файле проекта для выбора альтернативной версии инструментов сборки, если (например) последняя версия aapt завершает работу с ошибкой, а предыдущая версия aapt известна как рабочая.

AndroidSigningKeyAlias

Указывает псевдоним для ключа в хранилище ключей. Это значение keytool -alias, используемое при создании хранилища ключей.

AndroidSigningKeyPass

Указывает пароль для ключа в файле хранилища ключей. Это значение вводится, когда keytool запрашивает ввести пароль ключа для $(AndroidSigningKeyAlias).

Это свойство также поддерживает env: и file: префиксы, которые можно использовать для указания переменной среды или файла, содержащего пароль. Эти варианты позволяют избежать отображения пароля в журналах сборки.

Например, так можно применить переменную среды с именем AndroidSigningPassword:

<PropertyGroup>
  <AndroidSigningKeyPass>env:AndroidSigningPassword</AndroidSigningKeyPass>
</PropertyGroup>

Для использования файла, расположенного в C:\Users\user1\AndroidSigningPassword.txt:

<PropertyGroup>
  <AndroidSigningKeyPass>file:C:\Users\user1\AndroidSigningPassword.txt</AndroidSigningKeyPass>
</PropertyGroup>

Примечание.

Префикс env: не поддерживается, если для $(AndroidPackageFormat) задано значение aab.

AndroidSigningKeyStore

Указывает имя файла хранилища ключей, созданного с помощью keytool. Это соответствует значению, указанному для параметра keytool -keystore.

AndroidSigningStorePass

Задает пароль к $(AndroidSigningKeyStore). Это значение, предоставляемое для keytool при создании файла хранилища ключей и запросе ввести пароль хранилища ключей.

Это свойство также поддерживает env: и file: префиксы, которые можно использовать для указания переменной среды или файла, содержащего пароль. Эти варианты позволяют избежать отображения пароля в журналах сборки.

Например, так можно применить переменную среды с именем AndroidSigningPassword:

<PropertyGroup>
  <AndroidSigningStorePass>env:AndroidSigningPassword</AndroidSigningStorePass>
</PropertyGroup>

Для использования файла, расположенного в C:\Users\user1\AndroidSigningPassword.txt:

<PropertyGroup>
  <AndroidSigningStorePass>file:C:\Users\user1\AndroidSigningPassword.txt</AndroidSigningStorePass>
</PropertyGroup>

Примечание.

Префикс env: не поддерживается, если для $(AndroidPackageFormat) задано значение aab.

AndroidSigningPlatformKey

Указывает файл ключа, используемый для подписывания apk. Это используется только при создании system приложений.

AndroidSigningPlatformCert

Указывает файл сертификата, используемый для подписи apk. Это используется только при создании system приложений.

AndroidStripILAfterAOT

Логическое свойство, указывающее, будут ли удалены тела методов скомпилированных AOT методов.

Значением по умолчанию является false, а тела AOT-скомпилированных методов не будут удалены.

Если задано значение true, $(AndroidEnableProfiledAot) по умолчанию задано значение false . Это означает, что в сборках конфигурации выпуска, в которых $(RunAOTCompilation) по умолчанию является true, функция AOT включена для всего. Это может привести к увеличению размера приложения. Это поведение можно переопределить, явно установив $(AndroidEnableProfiledAot) на true в файле проекта.

Экспериментальная поддержка этого свойства была добавлена в .NET 8, удалена в .NET 10.

AndroidStripNativeLibraries

Логическое свойство, которое указывает процессу упаковки удалять символы отладки из нативных общих библиотек (.so файлов).

Значение по умолчанию — false, а символы отладки, если таковые имеются, будут сохранены при упаковке.

AndroidSupportedAbis

Строковое свойство, которое содержит разделенный точками с запятой (;) список ABI, которые должны быть включены в файл .apk.

Допустимые значения:

  • armeabi-v7a
  • x86
  • arm64-v8a
  • x86_64

AndroidTlsProvider

Это свойство устарело и не должно использоваться.

AndroidTypeMapImplementation

Свойство типа enum, которое выбирает реализацию карты типов. Допустимые значения — llvm-ir и trimmable.

Значение по умолчанию — trimmable, если true равно $(PublishAot), и llvm-ir в противном случае.

AndroidUseApkSigner

Логическое свойство, позволяющее разработчику использовать apksigner вместо jarsigner.

AndroidUseDefaultAotProfile

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

Чтобы подавить профиль AOT по умолчанию, присвойте этому свойству значение false.

AndroidUseDesignerAssembly

Логическое свойство, которое определяет, будет ли система сборки генерировать файл _Microsoft.Android.Resource.Designer.dll вместо файла Resource.Designer.cs. Преимуществами этого являются небольшие приложения и более быстрое время запуска.

Значение по умолчанию в .NET 8 — true.

В качестве автора Nuget рекомендуется отправить три версии сборки, если требуется обеспечить обратную совместимость. Один для MonoAndroid, один для net6.0-android и один для net8.0-android. Это можно сделать с помощью Xamarin.Legacy.Sdk. Это необходимо только в том случае, если проект библиотеки Nuget использует AndroidResource элементы в проекте или через зависимость.

<TargetFrameworks>monoandroid90;net6.0-android;net8.0-android</TargetFrameworks>

Кроме того, отключите этот параметр до тех пор, пока Classic и net7.0-android не будут устаревшими.

Проекты .NET 8, которые решили отключить этот параметр, не смогут использовать ссылки, которые используют его. Если вы попытаетесь использовать сборку, которая включает эту функцию в проекте, который не работает, вы получите ошибку сборки XA1034 .

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

AndroidUseInstrumentation

Логическое свойство, указывающее, что приложение запускается через свой элемент <instrumentation/>, а не через <activity/>, например тестовый узел или узел BenchmarkDotNet.

Когда true, dotnet run определяет $(AndroidInstrumentation) из сгенерированного AndroidManifest.xml и запускает его с помощью adb shell am instrument, даже если приложение также объявляет запускаемую activity.

Значение по умолчанию — true, если $(EnableMSTestRunner) равно true, и false в противном случае. Обратите внимание, что приложение, у которого нет запускаемого <activity/>, запускается через свой <instrumentation/> независимо от этого свойства.

Представлено в .NET 11.

AndroidUseInterpreter

Логическое свойство, которое приводит к тому, что MonoVM .apk содержит интерпретатор Mono, а не обычный JIT. Это параметр только mono и не является параметром CoreCLR. Android не имеет интерпретатора в .NET 11 и более поздних версий.

Экспериментальное.

AndroidUseLegacyVersionCode

Логическое свойство, позволяющее разработчику вернуть вычисление versionCode к старому поведению, предшествовавшему Xamarin.Android 8.2. Это свойство могут использовать ТОЛЬКО разработчики, приложения которых находятся в Google Play. Настоятельно рекомендуется использовать новое свойство $(AndroidVersionCodePattern).

AndroidUseManagedDesignTimeResourceGenerator

Логическое свойство, которое позволяет переключать сборки на стадии проектирования для использования синтаксического анализатора управляемых ресурсов, а не aapt.

AndroidUseNegotiateAuthentication

Логическое свойство, которое обеспечивает поддержку проверки подлинности NTLMv2/Negotiate в AndroidMessageHandler. Значение по умолчанию равно False.

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

AndroidUseSharedRuntime

Это свойство устарело и не должно использоваться.

AndroidVersionCode

Свойство MSBuild, которое можно использовать в качестве альтернативы /manifest/@android:versionCode в AndroidManifest.xml файле. Чтобы включить эту функцию, необходимо также включить <GenerateApplicationManifest>true</GenerateApplicationManifest>. Это будет по умолчанию в .NET 6.

Это свойство игнорируется, если $(AndroidCreatePackagePerAbi) и $(AndroidVersionCodePattern) используется.

@android:versionCode — это целочисленное значение, которое необходимо увеличить для каждого выпуска Google Play. Дополнительные сведения о требованиях см. в документации по Android.

AndroidVersionCodePattern

Строковое свойство, которое позволяет разработчику настраивать versionCode в манифесте. См. раздел Создание кода версии для APK для получения информации об определении versionCode.

Например, если abi имеет значение armeabi, а versionCode в манифесте — 123, тогда {abi}{versionCode} выдает код версии 1123, если $(AndroidCreatePackagePerAbi) имеет значение True, в противном случае будет создано значение 123. Если abi — x86_64, а versionCode в манифесте — 44, будет получено значение 544, если $(AndroidCreatePackagePerAbi) — True, в противном случае значением будет 44.

Если мы используем строку форматирования с левым дополнением {abi}{versionCode:0000}, это создаст 50044, потому что мы добавляем versionCode слева к 0. Кроме того, можно использовать десятичное заполнение, например , {abi}{versionCode:D4} то же самое, что и в предыдущем примере.

Поддерживаются только строки формата дополнения "0" и "Dx", потому что значение ДОЛЖНО быть целым числом.

Предварительно определенные ключевые элементы

  • abi — вставляет целевой abi для приложения

    • 2 – armeabi-v7a
    • 3 – x86
    • 4 – arm64-v8a
    • 5 – x86_64
  • minSDK — вставляет минимальное поддерживаемое значение SDK из AndroidManifest.xml или 11, если он не определен.

  • versionCode — использует код версии непосредственно из Properties\AndroidManifest.xml.

Можно определить настраиваемые элементы с помощью свойства $(AndroidVersionCodeProperties) (определение приводится ниже).

По умолчанию будет указано значение {abi}{versionCode:D6}. Если разработчик хочет сохранить предыдущее поведение, можно переопределить значение по умолчанию, задав для свойства $(AndroidUseLegacyVersionCode) значение true

AndroidVersionCodeProperties

Строковое свойство, позволяющее разработчику определять пользовательские элементы для использования с $(AndroidVersionCodePattern). Они имеют форму пары key=value. Все элементы в value должны быть целыми числами. Например: screen=23;target=$(_AndroidApiLevel). Как видно, вы можете использовать существующие или пользовательские свойства MSBuild в строке.

ApplicationId

Свойство MSBuild, которое можно использовать в качестве альтернативы /manifest/@package в AndroidManifest.xml файле. Чтобы включить эту функцию, необходимо также включить <GenerateApplicationManifest>true</GenerateApplicationManifest>. Это будет по умолчанию в .NET 6.

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

НазваниеПриложения

Свойство MSBuild, которое можно использовать в качестве альтернативы /manifest/application/@android:label в AndroidManifest.xml файле. Чтобы включить эту функцию, необходимо также включить <GenerateApplicationManifest>true</GenerateApplicationManifest>. Это будет по умолчанию в .NET 6.

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

ВерсияПриложения

Свойство MSBuild, которое можно использовать в качестве альтернативы /manifest/@android:versionName в AndroidManifest.xml файле. Чтобы включить эту функцию, необходимо также включить <GenerateApplicationManifest>true</GenerateApplicationManifest>. Это будет по умолчанию в .NET 6.

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

AotAssemblies

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

Не рекомендуется использовать в .NET 7. Вместо этого перейдите к новому $(RunAOTCompilation) свойству MSBuild, так как поддержка $(AotAssemblies) будет удалена в будущем выпуске.

AProfUtilExtraOptions

Дополнительные параметры, которые следует передать в aprofutil.

BeforeBuildAndroidAssetPacks

Целевые объекты MSBuild, перечисленные в этом свойстве AssetPack , будут выполняться непосредственно перед созданием элементов.

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

BeforeGenerateAndroidManifest

Целевые объекты MSBuild, перечисленные в этом свойстве, будут запускаться непосредственно перед _GenerateJavaStubs.

Настройка

Указывает конфигурацию сборки, например "отладка" или "выпуск". Свойство Configuration используется для определения значений по умолчанию для других свойств, которые определяют поведение целевого объекта. В вашей среде IDE можно создать дополнительные конфигурации.

По умолчанию конфигурация Debug приведет к тому, Install и SignAndroidPackage предназначен для создания меньшего пакета Android, который требует наличия других файлов и пакетов для работы.

Конфигурация по умолчанию Release приведет к Install и SignAndroidPackage предназначен для создания пакета Android, который является автономным и может использоваться без установки других пакетов или файлов.

Символы отладки

Логическое значение, определяющее, является ли пакет Android отлаживаемым в сочетании со свойством $(DebugType) . Отладочный пакет содержит отладочные символы, задает //application/@android:debuggable атрибутtrueи автоматически добавляет INTERNET разрешение, чтобы отладчик смог присоединиться к процессу. Приложение отлаживается, если DebugSymbols имеет значение True, аDebugType является пустой строкой или имеет значение Full.

Тип отладки

Определяет тип отладочных символов, которые следует создать как часть сборки, что также влияет на возможность отладки приложения. Возможные значения включают:

  • Full: Генерируются полные символы. Если свойство DebugSymbols Свойство MSBuild также True, тогда пакет приложения можно отлаживать.

  • PdbOnly: создаются символы формата PDB. Пакет приложения не является отлаживаемым.

Если свойство DebugType не задано или является пустой строкой, тогда свойство DebugSymbols определяет, является ли это приложение отлаживаемым.

Device

Указывает, какое устройство или эмулятор Android следует выбрать при использовании dotnet run --device <Device> или целей MSBuild, взаимодействующих с устройствами (например, Run, Install, или Uninstall).

Значение должно быть полным серийным номером устройства или идентификатором, возвращаемым adb devices. Например, если серийный объект устройства имеет значение emulator-5554, необходимо использовать -p:Device=emulator-5554.

При установке это свойство используется для инициализации свойства AdbTarget значением -s "<Device>".

Дополнительные сведения о выборе устройства см. в спецификации выбора устройств пакета SDK для .NET.

ДиагностическийАдрес

Значение, предоставленное dotnet-dsrouter, например, компонент IP-адреса 127.0.0.1 или $(DiagnosticConfiguration).

Если это свойство не пусто и для $(AndroidEnableProfiler) явно не задано значение false, оно неявно включает диагностику Android. Для CoreCLR результирующая конечная точка TCP обычно хранится в цикле и используется dotnet-dsrouter. Для эмулятора Android используйте 10.0.2.2 для доступа к компьютеру разработки; для физического устройства используйте 127.0.0.1 с перенаправлением портов Android, включённым с помощью dotnet-dsrouter server-server --tcp-server 127.0.0.1:9000 --forward-port Android.

По умолчанию — 127.0.0.1.

Диагностическая конфигурация

Значение, предоставленное dotnet-dsrouter для DOTNET_DiagnosticPorts, например:

  • 127.0.0.1:9000,connect,suspend
  • 127.0.0.1:9000,connect,nosuspend

Если диагностика включена без явной конфигурации, производные значения по умолчанию — адрес127.0.0.1, порт 9000DiagnosticSuspend=falseиDiagnosticListenMode=connect.

Обратите внимание, что символ , должен быть экранирован с помощью %2c, если он передается в командную строку dotnet build.

dotnet build -c Release -p:DiagnosticConfiguration=127.0.0.1:9000%2cconnect%2csuspend

Это автоматически задает переменную среды, упаковаемую DOTNET_DiagnosticPorts внутри приложения. В режиме connect среда выполнения Android подключается к настроенной конечной точке TCP, а dotnet-dsrouter перенаправляет это соединение локальному средству диагностики. Конечная точка не выполняет проверку подлинности и незашифровывается, поэтому сохраняйте ее в локальном интерфейсе разработки.

Установка этого свойства или любого из свойств компонента, перечисленных ниже, неявно включает диагностику Android, если для $(AndroidEnableProfiler) явно не задано значение false.

DiagnosticListenMode

Значение, предоставленное dotnet-dsrouter, например, connect, компонент режима прослушивания $(DiagnosticConfiguration) или DOTNET_DiagnosticPorts.

Если это свойство не пусто и $(AndroidEnableProfiler) не задано явно как false, оно неявно включает диагностику Android.

По умолчанию — connect.

Диагностический порт

Значение, предоставленное dotnet-dsrouter, например 9000, портовый компонент $(DiagnosticConfiguration) или DOTNET_DiagnosticPorts.

Если это свойство не пусто и для $(AndroidEnableProfiler) явно не задано значение false, оно неявно включает диагностику Android.

По умолчанию — 9000.

DiagnosticSuspend

Логическое значение, предоставленное dotnet-dsrouter, например true/suspend, компонентом false/nosuspend, $(DiagnosticConfiguration) или DOTNET_DiagnosticPorts.

Если это свойство не пусто и для $(AndroidEnableProfiler) явно не задано значение false, оно неявно включает диагностику Android.

По умолчанию — false.

EmbedAssembliesIntoApk

Логическое свойство, которое определяет, следует ли внедрять сборки приложения в состав пакета приложения.

Это свойство является обратным $(AndroidEnableFastDeployment). В новых проектах следует использовать $(AndroidEnableFastDeployment) для управления быстрым развертыванием. Если оба свойства заданы, $(EmbedAssembliesIntoApk) имеет приоритет.

Это свойство должно иметь значение True для сборок выпуска и False для сборок отладки. В сборках отладки значение True понадобиться, если быстрое развертывание не поддерживается для целевого устройства.

Включить отправку отчетов о сбоях

Логическое свойство, устанавливающее переменную среды DOTNET_EnableCrashReport в значение 1 при использовании среды выполнения CoreCLR или NativeAOT. Это позволяет создавать отчет о сбоях при запуске приложения.

По умолчанию это свойство имеет значение False и игнорируется, когда $(UseMonoRuntime) имеет значение True.

ВключитьДиагностику

Свойство пакета SDK для Android или MSBuild, которое включает диагностику для выбранной среды выполнения. Это синоним $(AndroidEnableProfiler) для приложений Mono. Для CoreCLR он включает конфигурацию порта диагностики, используемую dotnet-trace и dotnet-gcdump.

$(EnableDiagnostics) не совпадает с переменной DOTNET_EnableDiagnosticsсреды выполнения CoreCLR. Первый из них обрабатывается целями Android SDK/MSBuild; второй считывается средой выполнения, если передаётся через переменную окружения.

По умолчанию это свойство имеет значение False.

EnableLLVM

Логическое свойство, которое определяет, будет ли использована Низкоуровневая Виртуальная Машина (LLVM) при предварительной компиляции сборок в родной код.

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

По умолчанию это свойство имеет значение False.

Это свойство игнорируется, если свойство MSBuild $(AotAssemblies) не равно True.

EnableMSTestRunner

Логическое свойство, которое включает средство запуска MSTest для тестовых проектов Android. Если задано значение true, dotnet run будет запускать приложение через am instrument вместо am start, что позволит передавать результаты тестов через протокол инструментирования Android.

По умолчанию это свойство имеет значение False.

Представлено в .NET 11.

EnableProguard

Логическое свойство, которое определяет, запускается ли ProGuard в рамках процесса упаковки для связывания кода Java.

По умолчанию это свойство имеет значение False.

Если установлено значение True, файлы @(ProguardConfiguration) будут использоваться для управления выполнением proguard.

EventSourceSupport

Если установлено значение false, это отключает поддержку EventSource в обрезанных приложениях .NET для Android. Отключение этой функции предотвращает работу таких средств диагностики .NET, как dotnet-counters, что позволяет уменьшить размер приложения.

false устанавливается по умолчанию в режиме Release, за исключением случаев, когда включены $(EnableDiagnostics) или $(AndroidEnableProfiler).

ГенерацияМанифестаПриложения

Включает или отключает следующие свойства MSBuild, которые выдают значения в окончательном AndroidManifest.xml файле:

Значение $(GenerateApplicationManifest) по умолчанию — true.

JavaMaximumHeapSize

Указывает значение параметра java-Xmx для использования при сборке файла .dex в процессе упаковки. Если он не указан, то параметр -Xmx задает для java значение 1G. Выяснилось, что это обычно требуется в Windows по сравнению с другими платформами.

Это свойство требуется указывать, если целевой объект _CompileDex вызывает ошибку java.lang.OutOfMemoryError.

Настройка значения путем изменения:

<JavaMaximumHeapSize>1G</JavaMaximumHeapSize>

JavaOptions

Задает параметры командной строки для передачи в Java при создании .dex файла.

JarsignerTimestampAuthorityCertificateAlias

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

<PropertyGroup>
    <JarsignerTimestampAuthorityCertificateAlias>Alias</JarsignerTimestampAuthorityCertificateAlias>
</PropertyGroup>

JarsignerTimestampAuthorityUrl

Это свойство позволяет указать URL-адрес службы в качестве источника для меток времени. Так вы сможете гарантировать, что сигнатура .apk содержит метку времени. Дополнительные сведения см. в документации по Java, посвященной поддержке меток времени для сигнатур.

<PropertyGroup>
    <JarsignerTimestampAuthorityUrl>http://example.tsa.url</JarsignerTimestampAuthorityUrl>
</PropertyGroup>

LinkerDumpDependencies

Булевское свойство, позволяющее создавать файл зависимостей компоновщика. Этот файл может использоваться в качестве входных данных для средства illinkanalyzer.

Файл зависимостей с именем linker-dependencies.xml.gz записывается в каталог проекта. В .NET5/6 он записывается рядом со связанными сборками в каталоге obj/<Configuration>/android<ABI>/linked.

Значение по умолчанию равно False.

MandroidI18n

Это свойство MSBuild устарело и больше не поддерживается.

MauiEnableFullReadyToRun

Логическое свойство для Android-приложений .NET MAUI, использующих CoreCLR и собираемых в конфигурации Release с включённым ReadyToRun. Если это свойство не задано или имеет значение false, MAUI использует частичный ReadyToRun, используя профили MIBC по умолчанию. Задайте для этого свойства значение true для включения полной функции ReadyToRun. Это свойство не имеет эффекта, если $(PublishReadyToRun) имеет значение false.

Full ReadyToRun увеличивает размер приложения и загрузки, но может повысить производительность среды выполнения, так как дополнительные методы предварительно компилируются.

Дополнительные сведения о CoreCLR и ReadyToRun в .NET MAUI см. в разделе "Среда выполнения" и компиляция в .NET MAUI.

MetricsSupport

При установке значения false отключается поддержка метрик .NET в обрезанных Android-приложениях. Отключение этой функции предотвратит работу таких API, как System.Diagnostics.Metrics, но позволит уменьшить размер приложения.

false устанавливается по умолчанию в режиме Release, за исключением случаев, когда включены $(EnableDiagnostics) или $(AndroidEnableProfiler).

MonoAndroidAssetPrefix

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

Значение по умолчанию — Assets. Установите значение assets для структуры проекта Java.

MonoAndroidResourcePrefix

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

Значение по умолчанию — Resources. Установите значение res для структуры проекта Java.

MonoSymbolArchive

Примечание.

Это было устаревшее свойство MSBuild из Xamarin.Android. Недоступно в .NET 6+.

Логическое свойство, которое определяет, создаются ли артефакты .mSYM для их последующего использования с mono-symbolicate, для извлечения "реального" имени файла и сведений о номере строки из трассировок стека Release.

Значение True по умолчанию для приложений "Релиз", в которых включены символы отладки: $(EmbedAssembliesIntoApk) True, $(DebugSymbols) имеет значение True и $(Optimize) имеет значение True.

PublishReadyToRun

Логическое свойство, которое определяет, компилируются ли сборки в формат ReadyToRun при использовании CoreCLR. Сборки ReadyToRun содержат как MSIL, так и собственный код. Это может улучшить время запуска приложения при сохранении совместимости JIT, но увеличивает размер приложения и загрузки.

Для Android-приложений, использующих CoreCLR, значение этого свойства по умолчанию — true в конфигурации Release, а в конфигурации Debug оно по умолчанию не включено. ReadyToRun не применяется при использовании Mono или NativeAOT.

Для ReadyToRun требуется тримминг. Если $(PublishTrimmed) не true, .NET для Android отключает PublishReadyToRun и $(PublishReadyToRunComposite) и выдаёт предупреждение XA0119.

Компиляция ReadyToRun по умолчанию композитна. См. $(PublishReadyToRunComposite). .NET MAUI также использует частичную компиляцию ReadyToRun с профилями MIBC по умолчанию. См. $(MauiEnableFullReadyToRun), чтобы включить полную поддержку ReadyToRun.

Дополнительные сведения см. в разделе "Среды выполнения" и "Компиляция" в .NET MAUI.

PublishReadyToRunComposite

Логическое свойство, которое определяет, объединяет ли компиляция ReadyToRun сборки приложений в составное изображение. Составной файл ReadyToRun позволяет оптимизировать кросс-сборку, но может увеличить время сборки.

Для приложений Android, использующих CoreCLR, это свойство по умолчанию имеет значение true, если true имеет значение $(PublishReadyToRun). ReadyToRun, включая составной ReadyToRun, требует, чтобы $(PublishTrimmed) был true.

RunAOTCompilation

Логическое свойство, определяющее, будут ли сборки компилироваться в режиме опережающей компиляции с помощью компилятора Mono AOT и включаться в приложения, использующие среду выполнения Mono. Для сборок True по умолчанию используется значение False, а для сборок Release, использующих Mono, — значение Debug. Он не включает ReadyToRun или NativeAOT.

Это свойство MSBuild заменяет $(AotAssemblies) свойство MSBuild из Xamarin.Android. Это то же свойство, используемое для Blazor WASM.

UseMonoRuntime

Логическое свойство, которое определяет, используют ли приложения Android среду выполнения Mono вместо CoreCLR для поддерживаемых .NET 10 и более ранних целевых объектов. Установите для этого свойства значение true, чтобы использовать Mono, или false, чтобы использовать CoreCLR для этих целевых платформ. $(PublishAot) имеет приоритет и выбирает NativeAOT для поддерживаемых опубликованных или оптимизированных сборок при установке true.

Это свойство по умолчанию используется true в .NET 10 и более ранних версий, поэтому приложения Android используют Mono. В .NET 11 и более поздних версиях по умолчанию используется значение false, поэтому приложения Android используют CoreCLR, а явно заданное значение true отклоняется с ошибкой NETSDK1242.

Дополнительные сведения см. в разделе "Среды выполнения" и "Компиляция" в .NET MAUI.

WaitForExit

Логическое свойство, которое управляет поведением dotnet run при запуске приложений Android.

Если $(WaitForExit) не false (по умолчанию), dotnet run будет:

  • Запуск приложения Android
  • Поток logcat направляется в процесс приложения после фильтрации
  • Дождитесь завершения работы приложения или нажатия клавиш CTRL+C
  • Принудительно остановить приложение при нажатии клавиш CTRL+C

Если для $(WaitForExit) задано значение false, dotnet run просто запустит приложение и сразу вернётся, не дожидаясь завершения работы приложения и не передавая его выходные данные в потоковом режиме.

Это свойство также определяет, будет ли adb shell am instrument передаваться -w, когда приложение запускается через свой $(AndroidInstrumentation):

$(WaitForExit) Запуск <activity/> Запуск <instrumentation/>
true (по умолчанию) adb shell am start -S -W adb shell am instrument -w -r
false adb shell am start -S adb shell am instrument -r

Поскольку adb shell am instrument сообщает о результатах только после завершения инструментирования, $(WaitForExit) не должен быть false, если вам нужны вывод инструментирования или осмысленный код выхода. Это важно для таких сценариев, как выполнение тестов или узла BenchmarkDotNet , поэтому dotnet test всегда используется значение по умолчанию.

Представлено в .NET 11.