Migracja projektu platformy Xamarin.Android
Projekt platformy .NET 8 dla aplikacji platformy .NET dla systemu Android jest podobny do następującego przykładu:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0-android</TargetFramework>
<OutputType>Exe</OutputType>
</PropertyGroup>
</Project>
W przypadku projektu biblioteki pomiń $(OutputType)
właściwość całkowicie lub określ Library
jako wartość właściwości.
Pliki konfiguracji platformy .NET
Nie ma obsługi plików konfiguracji, takich jak Foo.dll.config
lub Foo.exe.config
na platformie .NET dla projektów systemu Android. <dllmap>
Elementy konfiguracji nie są w ogóle obsługiwane na platformie .NET Core, a inne typy elementów dla pakietów zgodności, takich jak System.Configuration.ConfigurationManager , nigdy nie były obsługiwane w projektach systemu Android.
Zmiany właściwości programu MSBuild
Nie $(AndroidSupportedAbis)
należy używać właściwości:
<PropertyGroup>
<!-- Used in Xamarin.Android projects -->
<AndroidSupportedAbis>armeabi-v7a;arm64-v8a;x86;x86_64</AndroidSupportedAbis>
</PropertyGroup>
$(AndroidSupportedAbis)
Zamiast tego należy zastąpić właściwość identyfikatorami środowiska uruchomieniowego platformy .NET:
<PropertyGroup>
<!-- Used in .NET for Android projects -->
<RuntimeIdentifiers>android-arm;android-arm64;android-x86;android-x64</RuntimeIdentifiers>
</PropertyGroup>
Aby uzyskać więcej informacji na temat identyfikatorów środowiska uruchomieniowego, zobacz Wykaz identyfikatorów RID platformy .NET.
W poniższej tabeli przedstawiono inne właściwości programu MSBuild, które uległy zmianie na platformie .NET dla systemu Android:
Właściwości | Komentarze |
---|---|
$(AndroidUseIntermediateDesignerFile) |
True domyślnie. |
$(AndroidBoundExceptionType) |
System domyślnie. Ta właściwość zmienia typy wyjątków zgłaszanych z różnych metod, aby lepiej dopasować je do semantyki platformy .NET kosztem zgodności z platformą Xamarin.Android. Aby uzyskać więcej informacji, zobacz Niektóre z nowych opakowanych wyjątków języka Java używają wyjątków BCL, które różnią się od powiązanych typów listy BCL. |
$(AndroidClassParser) |
class-parse domyślnie. jar2xml nie jest obsługiwany. |
$(AndroidDexTool) |
d8 domyślnie. dx nie jest obsługiwany. |
$(AndroidCodegenTarget) |
XAJavaInterop1 domyślnie. XamarinAndroid nie jest obsługiwany. |
$(AndroidManifest) |
AndroidManifest.xml Wartość domyślna w katalogu głównym projektów, ponieważ Properties\AssemblyInfo.cs nie jest już używana w projektach w stylu zestawu SDK. Properties\AndroidManifest.xml Program zostanie również wykryty i użyty, jeśli istnieje, aby ułatwić migrację. |
$(DebugType) |
portable domyślnie. full i pdbonly nie są obsługiwane. |
$(MonoSymbolArchive) |
False , ponieważ mono-symbolicate nie jest obsługiwany. |
Ponadto, jeśli powiązanie języka Java jest włączone z @(InputJar)
@(EmbeddedJar)
, lub @(LibraryProjectZip)
, właściwość $(AllowUnsafeBlocks)
jest domyślnie ustawiona na True
.
Uwaga
Odwoływanie się do projektu Android Wear z poziomu aplikacji systemu Android nie jest obsługiwane.
Zmiany w AndroidManifest.xml
W projektach <uses-sdk/>
Xamarin.Android, Java i Kotlin Android element określa minimalną wersję systemu Android obsługiwaną przez aplikację, a także docelową wersję systemu Android, na podstawie których aplikacja jest kompilowana:
<?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>
Aby uzyskać więcej informacji na temat <uses-sdk/>
elementu, zobacz dokumentację systemu Android.
W aplikacjach platformy .NET 8 dla systemu Android istnieją właściwości programu MSBuild do ustawiania tych wartości. Korzystanie z właściwości programu MSBuild ma inne korzyści. W większości przypadków <uses-sdk/>
element powinien zostać usunięty na rzecz wartości w pliku projektu .csproj
:
<Project>
<PropertyGroup>
<TargetFramework>net8.0-android</TargetFramework>
<SupportedOSPlatformVersion>21</SupportedOSPlatformVersion>
</PropertyGroup>
</Project>
W tym przykładzie net8.0-android
skrót to net8.0-android34.0
. Przyszłe wersje platformy .NET będą śledzić najnowszą wersję systemu Android dostępną w momencie wydania platformy .NET.
TargetFramework
mapuje na android:targetSdkVersion
. W czasie kompilacji ta wartość zostanie automatycznie uwzględniona w elemecie <uses-sdk/>
. Zaletą użycia TargetFramework
w ten sposób jest to, że otrzymujesz pasujące powiązanie języka C# dla interfejsu API systemu Android 34 dla programu net8.0-android34.0
. Wersje systemu Android niezależnie od cyklu wydania platformy .NET, dlatego mamy elastyczność, aby zdecydować net8.0-android35.0
się, gdy powiązanie jest dostępne dla następnej wersji systemu Android.
SupportedOSPlatformVersion
Podobnie mapuje wartość na android:minSdkVersion
. W czasie kompilacji ta wartość zostanie automatycznie uwzględniona w elemecie <uses-sdk/>
. Interfejsy API systemu Android są ozdobione funkcją SupportedOSPlatformAttribute , aby otrzymywać ostrzeżenia kompilacji dotyczące wywoływania interfejsów API, które są dostępne tylko dla niektórych wersji systemu Android, w których aplikacja może działać:
error CA1416: This call site is reachable on 'Android' 21.0 and later. `ConnectivityManager.ActiveNetwork` is only supported on: 'Android' 23.0 and later.
Aby bezpiecznie korzystać z tego interfejsu API, możesz zadeklarować wyższy SupportedOSPlatformVersion
poziom w projekcie lub użyć interfejsu IsAndroidVersionAtLeast API w czasie wykonywania:
if (OperatingSystem.IsAndroidVersionAtLeast(23))
{
// Use the API here
}
Domyślne dołączanie plików
Domyślne zachowanie funkcji globbing pliku powiązanego z systemem Android na platformie .NET jest definiowane w pliku AutoImport.props
. To zachowanie można wyłączyć dla elementów systemu Android, ustawiając $(EnableDefaultAndroidItems)
false
wartość , lub wszystkie domyślne zachowanie dołączania elementów można wyłączyć, ustawiając wartość $(EnableDefaultItems)
.false
Aby uzyskać więcej informacji, zobacz Pliki props obciążenia.
Zachowanie środowiska uruchomieniowego
Istnieją zmiany String.IndexOf()
zachowania metody na platformie .NET 5+ na różnych platformach. Aby uzyskać więcej informacji, zobacz Globalizacja platformy .NET i ICU.
Konsolidator
Program .NET 8 ma nowe ustawienia konsolidatora:
<PublishTrimmed>true</PublishTrimmed>
<TrimMode>partial</TrimMode>
, które przycina zestawy, które zdecydowały się na przycinanie.
Aby uzyskać więcej informacji, zobacz Opcje przycinania.
W projektach Debug
platformy .NET dla systemu Android kompilacje nie używają konsolidatora, a Release
kompilacje ustawiają PublishTrimmed=true
i TrimMode=partial
.
Jeśli jest używane starsze AndroidLinkMode
ustawienie, zarówno, jak SdkOnly
i Full
domyślne do równoważnych ustawień konsolidatora:
<PublishTrimmed>true</PublishTrimmed>
<TrimMode>partial</TrimMode>
W programie AndroidLinkMode=SdkOnly
tylko zestawy BCL i SDK oznaczone za pomocą %(Trimmable)
są połączone na poziomie elementu członkowskiego. AndroidLinkMode=Full
zestawy %(TrimMode)=partial
na wszystkich zestawach platformy .NET.
Napiwek
Należy przeprowadzić migrację do nowych ustawień konsolidatora, ponieważ AndroidLinkMode
ustawienie zostanie ostatecznie przestarzałe.
Program .NET 9 ma nowe ustawienia konsolidatora:
<TrimMode>Full</TrimMode>
, który wykonuje pełne przycinanie.
Aby uzyskać więcej informacji, zobacz Opcje przycinania.
W projektach Debug
platformy .NET dla systemu Android kompilacje nie używają konsolidatora, a Release
kompilacje ustawiają PublishTrimmed=true
i TrimMode=partial
.
Kompilacja z wyprzedzeniem czasu
$(RunAOTCompilation)
to nowa właściwość MSBuild umożliwiająca kompilację Ahead-of-Time (AoT). Jest to ta sama właściwość używana dla platformy Blazor WASM. Właściwość $(AotAssemblies)
włącza również funkcję AOT, aby ułatwić migrację z projektów platformy Xamarin.Android do platformy .NET dla projektów systemu Android. Jednak ta właściwość została uznana za przestarzałą na platformie .NET 7.
Kompilacje wydania są domyślne dla następujących wartości właściwości AOT:
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<RunAOTCompilation>true</RunAOTCompilation>
<AndroidEnableProfiledAot>true</AndroidEnableProfiledAot>
</PropertyGroup>
Jest to zachowanie, gdy $(RunAOTCompilation)
właściwości i $(AndroidEnableProfiledAot)
są niezastawione, i wybiera optymalne ustawienia czasu uruchamiania i rozmiaru aplikacji.
Aby wyłączyć funkcję AOT, należy jawnie ustawić $(RunAOTCompilation)
właściwości i $(AndroidEnableProfiledAot)
na false
:
<PropertyGroup Condition="'$(Configuration)' == 'Release'">
<RunAOTCompilation>false</RunAOTCompilation>
<AndroidEnableProfiledAot>false</AndroidEnableProfiledAot>
</PropertyGroup>
Obsługiwane kodowanie
Jeśli aplikacja Xamarin.Android używa niektórych międzynarodowych zestawów kodów, należy je jawnie określić w pliku projektu przy użyciu Mandroidl18n
właściwości MSBuild, aby konsolidator mógł zawierać zasoby pomocnicze. Aby uzyskać więcej informacji na temat tej właściwości kompilacji, zobacz MAndroidl18n.
Mandroidl18n
Jednak właściwość MSBuild nie jest obsługiwana na platformie .NET dla aplikacji systemu Android. Zamiast tego obsługa jest zapewniana przez pakiet NuGet System.TextEncoding.CodePages . Aby uzyskać więcej informacji, zobacz CodePagesEncodingProvider.
.NET CLI
Platforma .NET dla systemu Android obsługuje używanie interfejsu wiersza polecenia platformy .NET (interfejs wiersza polecenia platformy .NET) do tworzenia, kompilowania, publikowania i uruchamiania aplikacji systemu Android.
dotnet new
dotnet new
Umożliwia tworzenie nowych projektów i elementów platformy .NET dla systemu Android przy użyciu szablonów projektów i szablonów elementów, które są nazwane zgodnie z wzorcami i nazewnictwem istniejących szablonów platformy .NET:
Template | Krótka nazwa | Język | Tagi |
---|---|---|---|
Szablon działania systemu Android | działanie systemu android | C# | Android |
Powiązanie biblioteki Java systemu Android | android-bindinglib | C# | Android |
Szablon układu systemu Android | układ systemu android | C# | Android |
Biblioteka klas systemu Android | androidlib | C# | Android |
Aplikacja systemu Android | android | C# | Android |
W poniższych przykładach pokazano użycie metody dotnet new
do tworzenia różnych typów platformy .NET dla projektów systemu Android:
dotnet new android --output MyAndroidApp --packageName com.mycompany.myandroidapp
dotnet new androidlib --output MyAndroidLibrary
dotnet new android-bindinglib --output MyJavaBinding
Po utworzeniu projektów platformy .NET dla systemu Android szablony elementów mogą służyć do dodawania elementów do projektów:
dotnet new android-activity --name LoginActivity --namespace MyAndroidApp
dotnet new android-layout --name MyLayout --output Resources/layout
dotnet build &publish
W przypadku platformy .NET dla systemu Android dotnet build
tworzy aplikację do uruchomienia. Oznacza to utworzenie .apk
pliku lub .aab
podczas procesu kompilacji i zmiana kolejności zadań programu MSBuild z zestawu .NET SDK w taki sposób, aby były uruchamiane podczas kompilacji. W związku z tym platforma .NET dla systemu Android wykonuje następujące czynności podczas kompilacji:
- Uruchom polecenie
aapt
, aby wygenerowaćResource.designer.cs
i potencjalnie emitować błędy kompilacji w przypadku problemów w@(AndroidResource)
plikach. - Skompiluj kod języka C#.
- Uruchom element docelowy PROGRAMU MSBuild ILLink w celu połączenia.
- Generowanie wycinków java i
AndroidManifest.xml
. - Skompiluj kod java za pomocą polecenia
javac
. - Przekonwertuj kod java na
.dex
za pomocą d8/r8. - Utwórz element
.apk
lub.aab
i podpisz go.
dotnet publish
jest zarezerwowana do publikowania aplikacji ze sklepu Google Play i innych mechanizmów dystrybucji, takich jak ad hoc. Podpisuje również znaki .apk
lub .aab
z różnymi kluczami.
Uwaga
Zachowanie w środowiskach IDE będzie się różnić. Obiekt docelowy Build
nie utworzy pliku, .apk
jeśli $(BuildingInsideVisualStudio)
ma wartość true
. Środowiska IDE będą wywoływać element docelowy Install
wdrożenia, co spowoduje wygenerowanie .apk
pliku. To zachowanie jest zgodne z platformą Xamarin.Android.
dotnet run
dotnet run
Za pomocą argumentu można uruchamiać aplikacje na urządzeniu lub emulatorze --project
:
dotnet run --project HelloAndroid.csproj
Alternatywnie można użyć docelowego programu Run
MSBuild:
dotnet build HelloAndroid.csproj -t:Run