Migrace projektu Xamarin.Android
Projekt .NET 8 pro aplikaci .NET pro Android je podobný následujícímu příkladu:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0-android</TargetFramework>
<OutputType>Exe</OutputType>
</PropertyGroup>
</Project>
Pro projekt $(OutputType)
knihovny vynecháte vlastnost zcela nebo zadejte Library
jako hodnotu vlastnosti.
Konfigurační soubory .NET
Konfigurační soubory, jako jsou nebo Foo.dll.config
v .NET pro projekty Android, nejsou podporovanéFoo.exe.config
<dllmap>
Elementy konfigurace se v .NET Core vůbec nepodporují a jiné typy prvků pro balíčky kompatibility, jako je System.Configuration.ConfigurationManager , se v projektech Androidu nikdy nepodporují.
Změny vlastností nástroje MSBuild
Vlastnost $(AndroidSupportedAbis)
by neměla být použita:
<PropertyGroup>
<!-- Used in Xamarin.Android projects -->
<AndroidSupportedAbis>armeabi-v7a;arm64-v8a;x86;x86_64</AndroidSupportedAbis>
</PropertyGroup>
$(AndroidSupportedAbis)
Místo toho by se vlastnost měla nahradit identifikátory modulu runtime .NET:
<PropertyGroup>
<!-- Used in .NET for Android projects -->
<RuntimeIdentifiers>android-arm;android-arm64;android-x86;android-x64</RuntimeIdentifiers>
</PropertyGroup>
Další informace o identifikátorech modulu runtime naleznete v tématu Katalog identifikátorů RID technologie .NET.
Následující tabulka ukazuje další vlastnosti nástroje MSBuild, které se změnily v .NET pro Android:
Vlastnost | Komentáře |
---|---|
$(AndroidUseIntermediateDesignerFile) |
True ve výchozím nastavení. |
$(AndroidBoundExceptionType) |
System ve výchozím nastavení. Tato vlastnost mění typy výjimek vyvolaných z různých metod, aby lépe odpovídaly sémantice .NET za cenu kompatibility s Xamarin.Android. Další informace naleznete v části Některé nové zabalené výjimky Java používají výjimky seznamu BCL, které se liší od souvisejících typů seznamů BCL. |
$(AndroidClassParser) |
class-parse ve výchozím nastavení.
jar2xml není podporováno. |
$(AndroidDexTool) |
d8 ve výchozím nastavení.
dx není podporováno. |
$(AndroidCodegenTarget) |
XAJavaInterop1 ve výchozím nastavení.
XamarinAndroid není podporováno. |
$(AndroidManifest) |
Výchozí hodnota AndroidManifest.xml je v kořenovém adresáři projektů, protože Properties\AssemblyInfo.cs se už nepoužívá v projektech ve stylu sady SDK.
Properties\AndroidManifest.xml bude také zjištěna a použita, pokud existuje, aby se usnadnila migrace. |
$(DebugType) |
portable ve výchozím nastavení.
full a pdbonly nejsou podporovány. |
$(MonoSymbolArchive) |
False , protože mono-symbolicate se nepodporuje. |
Kromě toho, pokud je povolena java vazba s @(InputJar)
, @(EmbeddedJar)
nebo @(LibraryProjectZip)
, pak $(AllowUnsafeBlocks)
vlastnost výchozí True
hodnotu .
Poznámka:
Odkazování na projekt Android Wear z aplikace pro Android se nepodporuje.
Změny v AndroidManifest.xml
V projektech <uses-sdk/>
Xamarin.Android, Java a Kotlin Pro Android označuje prvek minimální verzi Androidu, jakou vaše aplikace podporuje, a také cílovou verzi Androidu, na které je vaše aplikace zkompilovaná:
<?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>
Další informace o tomto <uses-sdk/>
prvku najdete v dokumentaci k Androidu.
V aplikacích pro Android .NET 8 jsou k dispozici vlastnosti NÁSTROJE MSBuild, které tyto hodnoty nastaví. Použití vlastností NÁSTROJE MSBuild má další výhody. Ve většině případů <uses-sdk/>
by měl být prvek odebrán ve prospěch hodnot v souboru projektu .csproj
:
<Project>
<PropertyGroup>
<TargetFramework>net8.0-android</TargetFramework>
<SupportedOSPlatformVersion>21</SupportedOSPlatformVersion>
</PropertyGroup>
</Project>
V tomto příkladu net8.0-android
je zkratka pro net8.0-android34.0
. Budoucí verze .NET budou sledovat nejnovější verzi Androidu dostupnou v době vydání .NET.
TargetFramework
mapuje na android:targetSdkVersion
. V době sestavení se tato hodnota automaticky zahrne do elementu <uses-sdk/>
za vás. Výhodou použití TargetFramework
tímto způsobem je, že máte odpovídající vazbu jazyka C# pro rozhraní ANDROID API 34 pro net8.0-android34.0
. Verze Androidu nezávisle na cyklu vydávání verzí .NET, takže máme možnost rozhodnout net8.0-android35.0
se, kdy je pro příští verzi Androidu k dispozici vazba.
Podobně se SupportedOSPlatformVersion
mapuje na android:minSdkVersion
. V době sestavení se tato hodnota automaticky zahrne do elementu <uses-sdk/>
za vás. Rozhraní API pro Android jsou vyzdobena upozorněními SupportedOSPlatformAttribute na sestavení pro volání rozhraní API, která jsou k dispozici pouze pro některé verze Androidu, na kterých může vaše aplikace běžet:
error CA1416: This call site is reachable on 'Android' 21.0 and later. `ConnectivityManager.ActiveNetwork` is only supported on: 'Android' 23.0 and later.
Pokud chcete toto rozhraní API bezpečně používat, můžete deklarovat ve svém projektu vyšší SupportedOSPlatformVersion
úroveň nebo použít IsAndroidVersionAtLeast rozhraní API za běhu:
if (OperatingSystem.IsAndroidVersionAtLeast(23))
{
// Use the API here
}
Výchozí zahrnutí souborů
Výchozí chování .NET pro Android související s souborem globbing je definováno v AutoImport.props
. Toto chování lze pro položky Androidu zakázat nastavením $(EnableDefaultAndroidItems)
na false
hodnotu , nebo je možné zakázat chování zahrnutí všech výchozích položek nastavením na $(EnableDefaultItems)
hodnotu false
. Další informace najdete v tématu Soubory props úloh.
Chování modulu runtime
V rozhraní .NET 5 nebo novějších na různých platformách dochází ke String.IndexOf()
změnám chování metody. Další informace najdete v tématu globalizace .NET a ICU.
Linker
.NET 8 má nová nastavení linkeru:
<PublishTrimmed>true</PublishTrimmed>
-
<TrimMode>partial</TrimMode>
, která oříznou sestavení, která se přihlásila k oříznutí.
Další informace najdete v tématu Možnosti oříznutí.
V projektech .NET pro Android ve výchozím nastavení Debug
buildy nepoužívají linker a Release
sady PublishTrimmed=true
sestavení a TrimMode=partial
.
Pokud se použije starší AndroidLinkMode
verze nastavení, nastavení SdkOnly
i Full
výchozí nastavení ekvivalentního linkeru:
<PublishTrimmed>true</PublishTrimmed>
<TrimMode>partial</TrimMode>
Pouze AndroidLinkMode=SdkOnly
sestavení BCL a SDK označená %(Trimmable)
pomocí jsou propojena na úrovni člena.
AndroidLinkMode=Full
nastaví %(TrimMode)=partial
pro všechna sestavení .NET.
Tip
Měli byste migrovat na nová nastavení linkeru AndroidLinkMode
, protože nastavení bude nakonec zastaralé.
.NET 9 má nová nastavení linkeru:
-
<TrimMode>Full</TrimMode>
, který provádí úplné oříznutí.
Další informace najdete v tématu Možnosti oříznutí.
V projektech .NET pro Android ve výchozím nastavení Debug
buildy nepoužívají linker a Release
sady PublishTrimmed=true
sestavení a TrimMode=partial
.
Kompilace s předstihem
$(RunAOTCompilation)
je nová vlastnost MSBuild pro povolení kompilace AoT (Head-of-Time). Jedná se o stejnou vlastnost, která se používá pro Blazor WASM. Tato $(AotAssemblies)
vlastnost také umožňuje AOT, aby pomohla s migrací z projektů Xamarin.Android na .NET pro projekty Android. Tato vlastnost však byla v .NET 7 zastaralá.
Ve výchozím nastavení se sestavení vydané verze nastaví na následující hodnoty vlastností AOT:
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<RunAOTCompilation>true</RunAOTCompilation>
<AndroidEnableProfiledAot>true</AndroidEnableProfiledAot>
</PropertyGroup>
Jedná se o chování při $(RunAOTCompilation)
zrušení nastavení a $(AndroidEnableProfiledAot)
vlastnosti a zvolí optimální nastavení pro čas spuštění a velikost aplikace.
Pokud chcete AOT zakázat, musíte explicitně nastavit $(RunAOTCompilation)
vlastnosti a $(AndroidEnableProfiledAot)
vlastnosti na false
:
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<RunAOTCompilation>false</RunAOTCompilation>
<AndroidEnableProfiledAot>false</AndroidEnableProfiledAot>
</PropertyGroup>
Podporované kódování
Pokud vaše aplikace Xamarin.Android používá určité mezinárodní sady kódů, je nutné je explicitně zadat v souboru projektu pomocí Mandroidl18n
vlastnosti MSBuild, aby linker mohl zahrnovat podpůrné prostředky. Další informace o této vlastnosti sestavení naleznete v tématu MAndroidl18n.
Mandroidl18n
Vlastnost MSBuild se ale v aplikacích pro Android nepodporuje. Místo toho je podpora poskytována balíčkem NuGet System.TextEncoding.CodePages . Další informace najdete na webu CodePagesEncodingProvider.
.NET CLI
.NET pro Android podporuje použití rozhraní příkazového řádku .NET (.NET CLI) k vytváření, sestavování, publikování a spouštění aplikací pro Android.
dotnet new
dotnet new
lze použít k vytvoření nových projektů a položek .NET pro Android pomocí šablon projektů a šablon položek, které jsou pojmenované podle vzorů a pojmenování existujících šablon .NET:
Šablona | Krátký název | Jazyk | Značky |
---|---|---|---|
Šablona aktivity androidu | android-activity | C# | Android |
Vazba knihovny Android Java | android-bindinglib | C# | Android |
Šablona rozložení pro Android | android-layout | C# | Android |
Knihovna tříd androidu | androidlib | C# | Android |
Aplikace pro Android | Android | C# | Android |
Následující příklady ukazují použití dotnet new
k vytvoření různých typů .NET pro projekty Android:
dotnet new android --output MyAndroidApp --packageName com.mycompany.myandroidapp
dotnet new androidlib --output MyAndroidLibrary
dotnet new android-bindinglib --output MyJavaBinding
Po vytvoření projektů .NET pro Android lze šablony položek použít k přidání položek do projektů:
dotnet new android-activity --name LoginActivity --namespace MyAndroidApp
dotnet new android-layout --name MyLayout --output Resources/layout
dotnet build & publish
Pro .NET pro Android dotnet build
vytvoří spustitelnou aplikaci. To znamená vytvoření .apk
nebo .aab
soubor během procesu sestavení a změna pořadí úloh NÁSTROJE MSBuild ze sady .NET SDK tak, aby se spouštěly během sestavení. Proto .NET pro Android během sestavení provede následující kroky:
- Spuštěním
aapt
vygenerujte a potenciálně vygenerujteResource.designer.cs
chyby sestavení pro problémy v@(AndroidResource)
souborech. - Zkompilujte kód jazyka C#.
- Spusťte cíl ILLink MSBuild pro propojení.
- Vygenerujte zástupné procedury Java a
AndroidManifest.xml
. - Zkompilujte kód Java prostřednictvím
javac
. - Převeďte kód Java na
.dex
adresu d8/r8. -
.apk
Vytvořte nebo.aab
ho podepište.
dotnet publish
je vyhrazená pro publikování aplikace pro Google Play a další distribuční mechanismy, jako je ad hoc. Také podepíše .apk
nebo .aab
s různými klíči.
Poznámka:
Chování uvnitř prostředí IDEs se bude lišit. Cíl Build
nevygeneruje .apk
soubor, pokud $(BuildingInsideVisualStudio)
je true
. IdEs bude volat Install
cíl pro nasazení, který vytvoří .apk
soubor. Toto chování odpovídá Xamarin.Androidu.
dotnet run
dotnet run
lze použít ke spouštění aplikací na zařízení nebo emulátoru pomocí argumentu --project
:
dotnet run --project HelloAndroid.csproj
Alternativně můžete použít Run
cíl nástroje MSBuild:
dotnet build HelloAndroid.csproj -t:Run