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.0
kı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.
TargetFramework
android:targetSdkVersion
ile 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.0
Android 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:minSdkVersion
eş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.props
tanımlanır. Bu davranış, Olarak ayarlanarak $(EnableDefaultAndroidItems)
false
Android öğeleri için devre dışı bırakılabilir veya tüm varsayılan öğe ekleme davranışı olarak ayarlanarak $(EnableDefaultItems)
false
devre 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 8 bağlayıcı için yeni ayarlara sahiptir:
<PublishTrimmed>true</PublishTrimmed>
<TrimMode>partial</TrimMode>
, kırpmayı kabul eden derlemeleri kırpan.
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=true
TrimMode=partial
.
Eski AndroidLinkMode
ayar kullanılıyorsa, hem hem de SdkOnly
Full
eşdeğer bağlayıcı ayarlarına varsayılan olarak:
<PublishTrimmed>true</PublishTrimmed>
<TrimMode>partial</TrimMode>
ile AndroidLinkMode=SdkOnly
yalnızca ile işaretlenen %(Trimmable)
BCL ve SDK derlemeleri üye düzeyinde bağlanır. AndroidLinkMode=Full
tüm .NET derlemelerinde ayarlar %(TrimMode)=partial
.
İ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 false
olarak 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şturmakResource.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.xml
oluş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)
true
bir .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