Aracılığıyla paylaş


Xamarin.Android proje geçişi

Android için .NET uygulamasına yönelik bir .NET 8 projesi aşağıdaki örneğe benzer:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net8.0-android</TargetFramework>
    <OutputType>Exe</OutputType>
  </PropertyGroup>
</Project>

Kitaplık projesi için özelliği tamamen atlar $(OutputType) veya özellik değeri olarak belirtin Library .

.NET yapılandırma dosyaları

Android projeleri için .NET gibi Foo.dll.config yapılandırma dosyalarıFoo.exe.config için destek yoktur. <dllmap>yapılandırma öğeleri .NET Core'da hiç desteklenmez ve System.Configuration.ConfigurationManager gibi uyumluluk paketleri için diğer öğe türleri Android projelerinde hiçbir zaman desteklenmemiştir.

MSBuild özelliklerindeki değişiklikler

$(AndroidSupportedAbis) özelliği kullanılmamalıdır:

<PropertyGroup>
  <!-- Used in Xamarin.Android projects -->
  <AndroidSupportedAbis>armeabi-v7a;arm64-v8a;x86;x86_64</AndroidSupportedAbis>
</PropertyGroup>

Bunun yerine özelliği $(AndroidSupportedAbis) .NET çalışma zamanı tanımlayıcılarıyla değiştirilmelidir:

<PropertyGroup>
  <!-- Used in .NET for Android projects -->
  <RuntimeIdentifiers>android-arm;android-arm64;android-x86;android-x64</RuntimeIdentifiers>
</PropertyGroup>

Çalışma zamanı tanımlayıcıları hakkında daha fazla bilgi için bkz . .NET RID Kataloğu.

Aşağıdaki tabloda, Android için .NET'te değiştirilen diğer MSBuild özellikleri gösterilmektedir:

Özellik Açıklamalar
$(AndroidUseIntermediateDesignerFile) True varsayılan olarak.
$(AndroidBoundExceptionType) System varsayılan olarak. Bu özellik, Xamarin.Android ile uyumluluk karşılığında .NET semantiğiyle daha iyi uyum sağlamak için çeşitli yöntemlerden oluşan özel durum türlerini değiştirir. Daha fazla bilgi için bkz . Yeni sarmalanmış Java özel durumlarından bazıları, ilgili BCL türlerinden farklı BCL özel durumları kullanır.
$(AndroidClassParser) class-parse varsayılan olarak. jar2xml desteklenmez.
$(AndroidDexTool) d8 varsayılan olarak. dx desteklenmez.
$(AndroidCodegenTarget) XAJavaInterop1 varsayılan olarak. XamarinAndroid desteklenmez.
$(AndroidManifest) AndroidManifest.xml Artık SDK stilindeki projelerde kullanılmadığındanProperties\AssemblyInfo.cs, varsayılan olarak projelerin kökünde kullanılır. Properties\AndroidManifest.xml ayrıca, geçişi kolaylaştırmak için algılanır ve varsa kullanılır.
$(DebugType) portable varsayılan olarak. full ve pdbonly desteklenmez.
$(MonoSymbolArchive) False,desteklenmediğinden mono-symbolicate .

Ayrıca, Java bağlaması , veya ile @(InputJar)etkinleştirildiyse$(AllowUnsafeBlocks), özelliği varsayılan olarak olurTrue.@(LibraryProjectZip)@(EmbeddedJar)

Not

Android uygulamasından Android Wear projesine başvuruda bulunmak desteklenmez.

AndroidManifest.xml değişiklikleri

Xamarin.Android, Java ve Kotlin Android projelerinde <uses-sdk/> , öğesi uygulamanızın desteklediği en düşük Android sürümünü ve uygulamanızın derlediği hedef Android sürümünü belirtir:

<?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>

öğesi hakkında <uses-sdk/> daha fazla bilgi için Android belgelerine bakın.

.NET 8 Android uygulamalarında, bu değerleri ayarlamak için MSBuild özellikleri vardır. MSBuild özelliklerini kullanmanın başka avantajları da vardır. Çoğu durumda <uses-sdk/> öğe projenizin .csproj dosyasındaki değerlere göre kaldırılmalıdır:

<Project>
  <PropertyGroup>
    <TargetFramework>net8.0-android</TargetFramework>
    <SupportedOSPlatformVersion>21</SupportedOSPlatformVersion>
  </PropertyGroup>
</Project>

Bu örnekte, net8.0-android için net8.0-android34.0kısaltmadır. .NET'in gelecekteki sürümleri, .NET sürümü sırasında kullanılabilen en son Android sürümünü izler.

TargetFrameworkandroid:targetSdkVersionile eşler. Derleme zamanında, bu değer sizin için öğesine otomatik olarak eklenir <uses-sdk/> . Bu şekilde kullanmanın TargetFramework avantajı, için net8.0-android34.0Android API 34 için eşleşen C# bağlamasının size verilmesidir. Android, .NET yayın döngüsünden bağımsız olarak yayınlandığından, bir sonraki Android sürümü için bir bağlama kullanılabilir olduğunda bunu kabul net8.0-android35.0 etme esnekliğine sahibiz.

Benzer şekilde, SupportedOSPlatformVersion ile android:minSdkVersioneşler. Derleme zamanında, bu değer sizin için öğesine otomatik olarak eklenir <uses-sdk/> . Android API'leri, yalnızca uygulamanızın SupportedOSPlatformAttribute çalıştırabileceği Bazı Android sürümlerinde kullanılabilen API'leri çağırmak için derleme uyarıları almanız için ile donatılmıştır:

error CA1416: This call site is reachable on 'Android' 21.0 and later. `ConnectivityManager.ActiveNetwork` is only supported on: 'Android' 23.0 and later.

Bu API'yi güvenli bir şekilde kullanmak için projenizde daha yüksek SupportedOSPlatformVersion bir değer bildirebilir veya çalışma zamanında API'yi IsAndroidVersionAtLeast kullanabilirsiniz:

if (OperatingSystem.IsAndroidVersionAtLeast(23))
{
    // Use the API here
}

Varsayılan dosya ekleme

Android için varsayılan .NET ile ilgili dosya globbing davranışı içinde AutoImport.propstanımlanır. Bu davranış, Olarak ayarlanarak $(EnableDefaultAndroidItems)falseAndroid öğeleri için devre dışı bırakılabilir veya tüm varsayılan öğe ekleme davranışı olarak ayarlanarak $(EnableDefaultItems)falsedevre dışı bırakılabilir. Daha fazla bilgi için bkz . İş yükü yayma dosyaları.

Çalışma zamanı davranışı

Farklı platformlarda .NET 5+'ta yönteminde davranış değişiklikleri String.IndexOf() vardır. Daha fazla bilgi için bkz . .NET genelleştirme ve ICU.

Bağlayıcı

.NET 5+ bağlayıcı için yeni ayarlara sahiptir:

  • <PublishTrimmed>true</PublishTrimmed>
  • <TrimMode>link</TrimMode>, üye düzeyinde kırpmayı etkinleştirir.

Daha fazla bilgi için bkz . Kırpma seçenekleri.

Android projeleri için .NET'te derlemeler varsayılan olarak Debug bağlayıcıyı kullanmaz ve Release ve derlemelerini kullanır PublishTrimmed=trueTrimMode=link. TrimMode=copyused .NET SDK'sı için varsayılandır ancak mobil uygulamalar için uygun değildir. Ancak, gerekirse yine de kabul TrimMode=copyused edebilirsiniz.

Eski AndroidLinkMode ayar kullanılıyorsa, hem hem de SdkOnlyFull eşdeğer bağlayıcı ayarlarına varsayılan olarak:

  • <PublishTrimmed>true</PublishTrimmed>
  • <TrimMode>link</TrimMode>

ile AndroidLinkMode=SdkOnlyyalnızca ile işaretlenen %(Trimmable) BCL ve SDK derlemeleri üye düzeyinde bağlanır. AndroidLinkMode=Full tüm .NET derlemelerinde ayarlar %(TrimMode)=link .

İpucu

Ayar sonunda kullanım dışı bırakılacağından yeni bağlayıcı ayarlarına AndroidLinkMode geçmeniz gerekir.

Önceden Derleme

$(RunAOTCompilation) , Önceden (AoT) derlemesini etkinleştirmeye yönelik yeni MSBuild özelliğidir. Bu, Blazor WASM için kullanılan aynı özelliktir. $(AotAssemblies) özelliği, Xamarin.Android projelerinden Android projeleri için .NET'e geçişte yardımcı olması için AOT'yi de etkinleştirir. Ancak, bu özellik .NET 7'de kullanım dışı bırakıldı.

Yayın derlemeleri varsayılan olarak aşağıdaki AOT özellik değerlerini kullanır:

<PropertyGroup Condition="'$(Configuration)' == 'Release'">
  <RunAOTCompilation>true</RunAOTCompilation>
  <AndroidEnableProfiledAot>true</AndroidEnableProfiledAot>
</PropertyGroup>

Ve özellikleri ayarsız olduğunda $(RunAOTCompilation) ve $(AndroidEnableProfiledAot) başlangıç zamanı ve uygulama boyutu için en uygun ayarları seçtiğinde bu davranıştır.

AOT'yi devre dışı bırakmak için ve $(AndroidEnableProfiledAot) özelliklerini açıkça olarak falseolarak ayarlamanız $(RunAOTCompilation) gerekir:

<PropertyGroup Condition="'$(Configuration)' == 'Release'">
  <RunAOTCompilation>false</RunAOTCompilation>
  <AndroidEnableProfiledAot>false</AndroidEnableProfiledAot>
</PropertyGroup>

Desteklenen kodlamalar

Xamarin.Android uygulamanız belirli uluslararası kod kümelerini kullanıyorsa, bağlayıcının Mandroidl18n destekleyici kaynakları içerebilmesi için MSBuild özelliği kullanılarak proje dosyanızda açıkça belirtilmesi gerekir. Bu derleme özelliği hakkında daha fazla bilgi için bkz . MAndroidl18n.

Ancak MSBuild özelliği Android Mandroidl18n uygulamaları için .NET'te desteklenmez. Bunun yerine System.TextEncoding.CodePages NuGet paketi tarafından destek sağlanır. Daha fazla bilgi için bkz. CodePagesEncodingProvider.

.NET CLI

Android için .NET, Android uygulamaları oluşturmak, derlemek, yayımlamak ve çalıştırmak için .NET komut satırı arabiriminin (.NET CLI) kullanılmasını destekler.

dotnet new

dotnet new , var olan .NET şablonlarının desenlerine ve adlandırmasına uygun olarak adlandırılan proje şablonları ve öğe şablonları kullanılarak Android projeleri ve öğeleri için yeni .NET oluşturmak için kullanılabilir:

Template Kısa Ad Dil Etiketler
Android Etkinlik şablonu android etkinliği C# Android
Android Java Kitaplığı Bağlama android-bindinglib C# Android
Android Düzeni şablonu android düzeni C# Android
Android Sınıf kitaplığı androidlib C# Android
Android Uygulaması android C# Android

Aşağıdaki örneklerde, Android projeleri için farklı türlerde .NET oluşturmak için kullanma dotnet new gösterilmektedir:

dotnet new android            --output MyAndroidApp     --packageName com.mycompany.myandroidapp
dotnet new androidlib         --output MyAndroidLibrary
dotnet new android-bindinglib --output MyJavaBinding

Android projeleri için .NET oluşturulduktan sonra, öğeler projelere eklemek için öğe şablonları kullanılabilir:

dotnet new android-activity --name LoginActivity --namespace MyAndroidApp
dotnet new android-layout   --name MyLayout      --output Resources/layout

dotnet build & publish

Android dotnet build için .NET için çalıştırılabilir bir uygulama üretir. Bu, derleme işlemi sırasında bir .apk veya .aab dosyası oluşturma ve derleme sırasında çalışacak şekilde .NET SDK'dan MSBuild görevlerini yeniden sıralama anlamına gelir. Bu nedenle, Android için .NET derleme sırasında aşağıdakileri yapar:

  • Dosyalarındaki @(AndroidResource) sorunlar için derleme hataları oluşturmak Resource.designer.cs ve potansiyel olarak yaymak için komutunu çalıştırınaapt.
  • C# kodunu derleyin.
  • Bağlama için ILLink MSBuild hedefini çalıştırın.
  • Java saplamaları ve AndroidManifest.xmloluşturun.
  • aracılığıyla java kodu derleyin javac.
  • Java kodunu d8/r8 aracılığıyla'a .dex dönüştürün.
  • bir .apk veya .aab oluşturun ve imzalayın.

dotnet publish Google Play ve geçici gibi diğer dağıtım mekanizmaları için bir uygulama yayımlamak için ayrılmıştır. Ayrıca veya .aab öğesini .apk farklı tuşlarla imzalar.

Not

İDE'ler içindeki davranışlar farklılık gösterir. hedef Build ise $(BuildingInsideVisualStudio)truebir .apk dosya üretmez. IDE'ler dağıtım için hedefi çağırır Install ve bu da dosyayı oluşturur .apk . Bu davranış Xamarin.Android ile eşleşir.

dotnet run

dotnet run bağımsız değişkeniyle bir cihazda veya öykünücüde --project uygulama başlatmak için kullanılabilir:

dotnet run --project HelloAndroid.csproj

Alternatif olarak, MSBuild hedefini Run kullanabilirsiniz:

dotnet build HelloAndroid.csproj -t:Run

Ayrıca bkz.