Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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í Truehodnotu .
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 falsehodnotu , 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=SdkOnlysestavení 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
aaptvygenerujte a potenciálně vygenerujteResource.designer.cschyby 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
.dexadresu d8/r8. -
.apkVytvořte nebo.aabho 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