Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Android için üçüncü taraf kitaplık ekosistemi çok büyük. Bu nedenle, var olan bir Android kitaplığını kullanmak, yeni bir kitaplık oluşturmaktan daha mantıklıdır.
Android için .NET, bunu C# çağrıları aracılığıyla Java kodunu çağırabilmeniz için kitaplığı otomatik olarak C# sarmalayıcılarıyla sarmalayan bağlamalar kitaplığıyla yapmanıza olanak tanır.
Bu, Yönetilen Çağrılabilen Sarmalayıcılar (MCW) kullanılarak uygulanır. MCW, yönetilen kodun Java kodunu çağırması gerektiğinde kullanılan bir JNI köprüsüdür. Yönetilen çağrılabilen sarmalayıcılar, Java türlerini alt sınıflama ve Java türlerinde sanal yöntemleri geçersiz kılma desteği de sağlar. Benzer şekilde, Android çalışma zamanı (ART) kodu yönetilen kodu çağırmak istediğinde, bunu Android Çağrılabilir Sarmalayıcılar (ACW) olarak bilinen başka bir JNI köprüsü aracılığıyla yapar. Bu mimari aşağıdaki diyagramda gösterilmiştir:
Bağlamalar Kitaplığı, Java türleri için Yönetilen Çağrılabilen Sarmalayıcılar içeren bir derlemedir. Örneğin, Bindings Library'de sarmalamak istediğimiz bir Java türü MyClass aşağıda verilmiştir:
package com.contoso.mycode;
public class MyClass
{
public String myMethod (int i) { ... }
}
.jar dosyasını içeren bir Bağlama Kitaplığı oluşturduktan sonra, onu örnekleyebilir ve C# dilinden yöntemlerini çağırabiliriz.
var instance = new MyClass ();
string result = instance.MyMethod (42);
Bu Bağlama kitaplığını oluşturmak için Android için .NET Android Java Bağlama Kitaplığı şablonunu kullanırsınız. Sonuçta elde edilen bağlama projesi, MCW sınıfları, .jar.aar/ dosyaları ve içine eklenmiş Android Kitaplığı projeleri için kaynaklar ile bir .NET derlemesi oluşturur. Sonuçta elde edilen Bağlamalar Kitaplığı derlemesine başvurarak, Android için .NET projenizde mevcut bir Java kitaplığını yeniden kullanabilirsiniz.
Bağlama Kitaplığınızdaki türlere başvururken, bağlama kitaplığınızın ad alanını kullanmanız gerekir. Genellikle, C# kaynak dosyalarınızın en üstüne Java paket adının .NET ad alanı sürümü olan bir using yönerge eklersiniz. Örneğin, bağlı .jar java paketi adı aşağıdaki gibiyse:
com.contoso.package
Ardından, ilişkili using dosyasındaki türlere erişmek için C# kaynak dosyalarınızın en üstüne aşağıdaki deyimi koyabilirsiniz:
using Com.Contoso.Package;
Mevcut bir Android kitaplığını bağlarken aşağıdaki noktaları göz önünde bulundurmak gerekir:
Kitaplık için dış bağımlılıklar var mı? – Android kitaplığı için gereken tüm Java bağımlılıkları, NuGet paketi veya AndroidLibrary aracılığıyla Android için .NET projesine dahil edilmelidir. Bağlama projesine tüm yerel derlemeler AndroidNativeLibrary olarak eklenmelidir.
Android kitaplığı, Android API'sinin hangi sürümünü hedeflemektedir? – Android API düzeyini "düşürmek" mümkün değildir; Android için .NET bağlama projesinin Android kitaplığıyla aynı API düzeyini (veya üstünü) hedeflediğinden emin olun.
Java API'lerini C⧣'ye uyarlama
Android için .NET Bağlama Oluşturucu bazı Java deyimlerini ve desenlerini .NET desenlerine karşılık gelecek şekilde değiştirir. Aşağıdaki listede Java'nın C#/.NET ile nasıl eşlendiği açıklanmaktadır:
Java'daki Setter/Getter yöntemleri .NET'teki Özellikler'dir.
Java'daki alanlar .NET'teki Özellikler'dir.
Java'daki Dinleyiciler/Dinleyici Arabirimleri .NET'teki Olaylardır. Geri çağırma arabirimlerindeki yöntemlerin parametreleri bir
EventArgsalt sınıfla temsil edilir.Java'daki Static Nested class, .NET'teki Nested class'a karşılık gelir.
Java'daki inner sınıfı , C# dilinde örnek oluşturucuya sahip iç içe geçmiş bir sınıftır .
Bağlama arayüzüne yerel kütüphane ekleme
Bir Java kitaplığını bağlamanın bir parçası olarak Android için .NET bağlama projesine . so kitaplığı eklemek gerekebilir. Java kodu sarıldığında çalıştırıldığında, Android için .NET JNI çağrısını yapamaz ve hata mesajı java.lang.UnsatisfiedLinkError: Native yöntemi bulunamadı: uygulama logcat çıktısında görünür.
Bu sorunu düzeltmek için, .so kütüphanesini Java.Lang.JavaSystem.LoadLibrary çağrısıyla manuel olarak yükleyin. Örneğin, Android için bir .NET projesinin, bağlama projesine AndroidNativeLibrary derleme eylemiyle dahil libpocketsphinx_jni.so paylaşılan kitaplığı olduğunu varsayarsak, aşağıdaki kod parçacığı (paylaşılan kitaplık kullanılmadan önce yürütülür) .so kitaplığını yükler:
Java.Lang.JavaSystem.LoadLibrary("pocketsphinx_jni");
Bağlama senaryoları
Aşağıdaki bağlama senaryosu kılavuzları, uygulamanıza dahil etmek üzere bir Java kitaplığını (veya kitaplıklarını) bağlamanıza yardımcı olabilir:
Java kitaplığını bağlama, yerel olarak kullanılabilir .jar.aar/ dosyaları için Bağlama Kitaplıkları oluşturmaya yönelik bir kılavuzdur.
Maven'dan Java kitaplığını bağlama, maven deposunda barındırılan .jar.aar/ dosyaları için Bağlama Kitaplıkları oluşturmaya yönelik bir kılavuzdur.
Bağlamaları özelleştirmek , derleme hatalarını çözmek ve sonuçta elde edilen API'yi daha "C#benzeri" olacak şekilde şekillendirmek için bağlamada el ile değişiklik yapmayı açıklar.
Bağlama sorunlarını giderme yaygın bağlama hata senaryolarını listeler, olası nedenleri açıklar ve bu hataları çözmeye yönelik öneriler sunar.