Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Проект .NET 8 для приложения .NET для Android аналогичен следующему примеру:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0-android</TargetFramework>
<OutputType>Exe</OutputType>
</PropertyGroup>
</Project>
Для проекта библиотеки опустите $(OutputType) свойство полностью или укажите Library в качестве значения свойства.
Файлы конфигурации .NET
Нет поддержки для файлов конфигурации, таких как Foo.dll.config или Foo.exe.config, в .NET для проектов Android.
<dllmap> Элементы конфигурации не поддерживаются в .NET Core вообще, а другие типы элементов для пакетов совместимости, таких как System.Configuration.ConfigurationManager , никогда не поддерживаются в проектах Android.
Изменения свойств MSBuild
Свойство $(AndroidSupportedAbis) не должно использоваться:
<PropertyGroup>
<!-- Used in Xamarin.Android projects -->
<AndroidSupportedAbis>armeabi-v7a;arm64-v8a;x86;x86_64</AndroidSupportedAbis>
</PropertyGroup>
Вместо этого $(AndroidSupportedAbis) свойство должно быть заменено идентификаторами среды выполнения .NET:
<PropertyGroup>
<!-- Used in .NET for Android projects -->
<RuntimeIdentifiers>android-arm;android-arm64;android-x86;android-x64</RuntimeIdentifiers>
</PropertyGroup>
Дополнительные сведения об идентификаторах среды выполнения см. в каталоге .NET RID.
В следующей таблице показаны другие свойства MSBuild, которые изменились в .NET для Android:
| Свойство | Комментарии |
|---|---|
$(AndroidUseIntermediateDesignerFile) |
По умолчанию: True. |
$(AndroidBoundExceptionType) |
По умолчанию: System. Это свойство изменяет типы исключений, выбрасываемых различными методами, чтобы лучше соответствовать семантике .NET, но при этом жертвует совместимостью с Xamarin.Android. Дополнительные сведения см. в разделе Некоторые из новых исключений Java используют исключения BCL, которые отличаются от соответствующих типов BCL. |
$(AndroidClassParser) |
По умолчанию: class-parse.
jar2xml не поддерживается. |
$(AndroidDexTool) |
По умолчанию: d8.
dx не поддерживается. |
$(AndroidCodegenTarget) |
По умолчанию: XAJavaInterop1.
XamarinAndroid не поддерживается. |
$(AndroidManifest) |
По умолчанию используется AndroidManifest.xml в корне проектов, так как Properties\AssemblyInfo.cs больше не используется в проектах в стиле SDK.
Properties\AndroidManifest.xml также будет обнаружен и может быть использован, если существует, чтобы упростить миграцию. |
$(DebugType) |
По умолчанию: portable.
full и pdbonly не поддерживаются. |
$(MonoSymbolArchive) |
False, так как mono-symbolicate не поддерживается. |
Кроме того, если привязка Java включена с @(InputJar), @(EmbeddedJar) или @(LibraryProjectZip), то свойство $(AllowUnsafeBlocks) по умолчанию используется как True.
Примечание.
Ссылка на проект Android Wear из приложения Android не поддерживается.
Изменения в AndroidManifest.xml
В проектах Android Xamarin.Android, Java и Kotlin элемент <uses-sdk/> обозначает минимальную версию приложения Android, а также целевую версию android, для которого приложение компилируется:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:versionCode="1"
android:versionName="1.0"
package="com.companyname.myapp">
<uses-sdk android:minSdkVersion="21" android:targetSdkVersion="33" />
<application android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" />
</manifest>
Дополнительные сведения об элементе <uses-sdk/> см. в документации по Android.
В приложениях .NET 8 Android есть свойства MSBuild для задания этих значений. Использование свойств MSBuild имеет другие преимущества. В большинстве случаев элемент <uses-sdk/> следует удалить в пользу значений в файле проекта .csproj:
<Project>
<PropertyGroup>
<TargetFramework>net8.0-android</TargetFramework>
<SupportedOSPlatformVersion>21</SupportedOSPlatformVersion>
</PropertyGroup>
</Project>
В этом примере net8.0-android является сокращением для net8.0-android34.0. Будущие версии .NET отслеживают последнюю версию Android, доступную во время выпуска .NET.
TargetFramework сопоставляется android:targetSdkVersion. Во время сборки это значение автоматически будет включено в элемент <uses-sdk/>. Преимущество использования TargetFramework таким образом заключается в том, что вы получаете соответствующую привязку C# для API Android 34 для net8.0-android34.0. Выпуски Android происходят независимо от цикла релизов .NET, поэтому мы можем выбрать net8.0-android35.0 , как только будет доступна привязка для следующего выпуска Android.
Аналогичным образом SupportedOSPlatformVersion сопоставляется с android:minSdkVersion. При сборке это значение автоматически будет включено в элемент <uses-sdk/>. API Android аннотированы с SupportedOSPlatformAttribute, чтобы предупреждать о вызовах API, доступных только для некоторых версий Android, на которых может работать ваше приложение.
error CA1416: This call site is reachable on 'Android' 21.0 and later. `ConnectivityManager.ActiveNetwork` is only supported on: 'Android' 23.0 and later.
Чтобы безопасно использовать этот API, можно объявить более высокий SupportedOSPlatformVersion в проекте или использовать IsAndroidVersionAtLeast API во время выполнения:
if (OperatingSystem.IsAndroidVersionAtLeast(23))
{
// Use the API here
}
Включение файлов по умолчанию
Поведение глоббинга файлов по умолчанию для .NET для Android определяется в AutoImport.props. Это поведение можно отключить для элементов Android, установив $(EnableDefaultAndroidItems) в false, или всё поведение включения элементов по умолчанию можно отключить, установив $(EnableDefaultItems) в false. Дополнительные сведения см. в разделе файлы свойств рабочей нагрузки.
Поведение среды выполнения
Изменения в поведении метода String.IndexOf() в .NET 5+ на разных платформах. Дополнительные сведения см. в статье о глобализации .NET и ICU.
Компоновщик
В .NET 8 добавлены новые параметры компоновщика.
<PublishTrimmed>true</PublishTrimmed>-
<TrimMode>partial</TrimMode>, который удаляет лишние части сборок, выбравших обрезку.
Дополнительные сведения см. в разделе Параметры обрезки.
По умолчанию в проектах .NET для Android сборки Debug не используют компоновщик, а сборки Release устанавливают PublishTrimmed=true и TrimMode=partial.
Если используется устаревший параметр AndroidLinkMode, то параметры SdkOnly и Full по умолчанию соответствуют эквивалентным параметрам компоновщика.
<PublishTrimmed>true</PublishTrimmed><TrimMode>partial</TrimMode>
При использовании AndroidLinkMode=SdkOnly на уровне членов связаны только те сборки BCL и SDK, которые помечены %(Trimmable).
AndroidLinkMode=Full задает %(TrimMode)=partial для всех сборок .NET.
Совет
Необходимо перейти к новым параметрам компоновщика, так как этот AndroidLinkMode параметр в конечном итоге будет постепенно устаревать.
В .NET 9 есть новые параметры линкера:
-
<TrimMode>Full</TrimMode>, который выполняет полное обрезание.
Для получения дополнительной информации смотрите Параметры обрезки.
По умолчанию в проектах .NET для Android сборки Debug не используют линкер, а сборки Release настраивают PublishTrimmed=true и TrimMode=partial.
Компиляция заранее
$(RunAOTCompilation) — это новое свойство MSBuild для включения компиляции "Впереди времени" (AoT). Это то же свойство, используемое для Blazor WASM. Свойство $(AotAssemblies) также включает AOT, чтобы помочь с миграцией от проектов Xamarin.Android к проектам .NET для Android. Однако это свойство не рекомендуется использовать в .NET 7.
Сборки релиза по умолчанию используют следующие значения для свойств AOT:
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<RunAOTCompilation>true</RunAOTCompilation>
<AndroidEnableProfiledAot>true</AndroidEnableProfiledAot>
</PropertyGroup>
Это поведение, когда $(RunAOTCompilation) свойства $(AndroidEnableProfiledAot) не заданы, и выбирает оптимальные параметры для времени запуска и размера приложения.
Чтобы отключить AOT, необходимо явно задать для свойств $(RunAOTCompilation) и $(AndroidEnableProfiledAot) значение false.
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<RunAOTCompilation>false</RunAOTCompilation>
<AndroidEnableProfiledAot>false</AndroidEnableProfiledAot>
</PropertyGroup>
Поддерживаемые кодировки
Если ваше приложение Xamarin.Android использует определенные международные наборы кодов, их следует конкретно указать в файле проекта с помощью свойства MSBuild Mandroidl18n, чтобы компоновщик мог включать вспомогательные ресурсы. Дополнительные сведения об этом свойстве сборки см. в разделе MAndroidl18n.
Mandroidl18n Однако свойство MSBuild не поддерживается в .NET для приложений Android. Вместо этого поддержка предоставляется пакетом NuGet System.TextEncoding.CodePages . Дополнительные сведения см. в разделе CodePagesEncodingProvider.
Интерфейс командной строки .NET
.NET для Android поддерживает использование интерфейса командной строки .NET (.NET CLI) для создания, сборки, публикации и запуска приложений Android.
dotnet new
dotnet new можно использовать для создания новых проектов и элементов .NET для Android с помощью шаблонов проектов и элементов, которые следуют моделям и именованию существующих шаблонов .NET.
| Шаблон | Короткое имя | Язык | Теги |
|---|---|---|---|
| Шаблон активности Android | android-activity | C# | Android |
| Привязка библиотеки Java для Android | android-bindinglib | C# | Android |
| Шаблон макета Android | android-layout | C# | Android |
| Библиотека классов Android | androidlib | C# | Android |
| Приложение Android | Android | C# | Android |
В следующих примерах показано использование dotnet new для создания различных типов проектов .NET для Android.
dotnet new android --output MyAndroidApp --packageName com.mycompany.myandroidapp
dotnet new androidlib --output MyAndroidLibrary
dotnet new android-bindinglib --output MyJavaBinding
После создания проектов .NET для Android шаблоны элементов можно использовать для добавления элементов в проекты:
dotnet new android-activity --name LoginActivity --namespace MyAndroidApp
dotnet new android-layout --name MyLayout --output Resources/layout
dotnet build и publish
Для .NET для Android dotnet build создаёт работоспособное приложение. Это означает создание файлов .apk или .aab во время процесса сборки и перестановку операций MSBuild из SDK .NET так, чтобы они выполнялись во время сборки. Поэтому .NET для Android выполняет следующие действия во время сборки:
- Запустите
aapt, чтобы сгенерироватьResource.designer.csи возможно вызвать ошибки сборки для проблем в файлах@(AndroidResource). - Компиляция кода C#.
- Запустите целевой объект ILLink MSBuild для связывания.
- Генерировать заглушки java и
AndroidManifest.xml. - Скомпилируйте код java с помощью
javac. - Преобразуйте код Java в
.dexс помощью d8/r8. - Создайте
.apkили.aabи подпишите его.
dotnet publish зарезервировано для публикации приложения для Google Play и других механизмов распространения, таких как ad-hoc. Он также подписывает .apk или .aab разными ключами.
Примечание.
Поведение внутри idEs будет отличаться. Если целевой Build.apk объект не создает файл $(BuildingInsideVisualStudio)true. IDE вызовет цель Install для развертывания, которая создаст файл .apk. Это поведение соответствует Xamarin.Android.
dotnet run - команда для запуска приложения
dotnet run можно использовать для запуска приложений на устройстве или эмуляторе с помощью аргумента --project :
dotnet run --project HelloAndroid.csproj
Кроме того, можно использовать целевой Run объект MSBuild:
dotnet build HelloAndroid.csproj -t:Run