Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Проект .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.configFoo.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для параметра значение , или все поведение включения элементов по умолчанию можно отключить, установив для параметра значение .false. Дополнительные сведения см. в разделе файлов props рабочей нагрузки.
Поведение среды выполнения
Существуют изменения String.IndexOf() в поведении метода в .NET 5+ на разных платформах. Дополнительные сведения см. в статье о глобализации .NET и ICU.
Компоновщик
В .NET 8 есть новые параметры компоновщика:
<PublishTrimmed>true</PublishTrimmed>-
<TrimMode>partial</TrimMode>, который обрезает сборки, которые решили обрезать.
Дополнительные сведения: Параметры обрезки.
По умолчанию Debug в проектах .NET для Android сборки не используют компоновщик и Release набор PublishTrimmed=true сборок и TrimMode=partial.
Если используется устаревший AndroidLinkMode параметр, оба SdkOnly и Full по умолчанию эквивалентны параметрам компоновщика:
<PublishTrimmed>true</PublishTrimmed><TrimMode>partial</TrimMode>
При этом AndroidLinkMode=SdkOnlyна уровне члена связаны только сборки %(Trimmable) BCL и SDK.
AndroidLinkMode=Full задает %(TrimMode)=partial для всех сборок .NET.
Совет
Необходимо перейти к новым параметрам компоновщика, так как этот AndroidLinkMode параметр в конечном итоге будет нерекомендуем.
В .NET 9 есть новые параметры компоновщика:
-
<TrimMode>Full</TrimMode>, который выполняет полную обрезку.
Дополнительные сведения: Параметры обрезки.
По умолчанию Debug в проектах .NET для Android сборки не используют компоновщик и 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 использует определенные международные наборы кодов, их необходимо явно указать в файле проекта с помощью Mandroidl18n свойства MSBuild, чтобы компоновщик может включать вспомогательные ресурсы. Дополнительные сведения об этом свойстве сборки см. в разделе MAndroidl18n.
Mandroidl18n Однако свойство MSBuild не поддерживается в .NET для приложений Android. Вместо этого поддержка предоставляется пакетом NuGet System.TextEncoding.CodePages . Дополнительные сведения см. в разделе CodePagesEncodingProvider.
Интерфейс командной строки.NET
.NET для Android поддерживает использование интерфейса командной строки .NET (.NET CLI) для создания, сборки, публикации и запуска приложений Android.
dotnet new
dotnet new Можно использовать для создания новых проектов и элементов .NET для Android с помощью шаблонов проектов и шаблонов элементов, которые называются следующими шаблонами и именованием существующих шаблонов .NET:
| Template | Короткое имя | Язык | Теги |
|---|---|---|---|
| Шаблон действия 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 в
.dexd8/r8. -
.apkСоздайте или.aabподпишите его.
dotnet publish зарезервировано для публикации приложения для Google Play и других механизмов распространения, таких как ad-hoc. Он также подписывает .apk или .aab с различными ключами.
Примечание.
Поведение внутри idEs будет отличаться. Если целевой Build.apk объект не создает файл $(BuildingInsideVisualStudio)true. IdEs вызовет целевой Install объект для развертывания, который создаст .apk файл. Это поведение соответствует Xamarin.Android.
dotnet run
dotnet run можно использовать для запуска приложений на устройстве или эмуляторе с помощью аргумента --project :
dotnet run --project HelloAndroid.csproj
Кроме того, можно использовать целевой Run объект MSBuild:
dotnet build HelloAndroid.csproj -t:Run