Java kütüphanesi bağlama

Android topluluğu, uygulamanızda kullanmak isteyebileceğiniz birçok Java kitaplığı sunar. Bu Java kitaplıkları genellikle .JAR (Java Arşivi) veya .AAR (Android Arşivi) formatında paketlenir, ancak işlevselliklerinin Android uygulamaları için .NET'te kullanılabilmesi amacıyla Java Bağlamaları Kitaplığı'nda paketlenebilirsiniz. Java Bağlamaları kitaplığının amacı, .JAR/.AAR dosyasındaki API'leri otomatik olarak oluşturulan kod sarmalayıcıları aracılığıyla C# kodu için erişilebilir hale getirmektir.

Tavsiye

.NET 9, Bir Maven deposundan java kitaplığını otomatik olarak indirme ve bağlama desteği sağlar. Bu senaryoyu basitleştirmek için Maven'dan Java Kitaplığı Bağlama belgelerine bakın.

Walkthrough

Bu kılavuzda, bir görüntüyü dairesel bir tuvalde gösteren bir kütüphane olan CircleImageView'in 3.1.0 sürümünü bağlayacağız.

Maven deposundan bağlanmak için yerel olarak indirincircleimageview-3.1.0.aar.

Bağlayıcılar kitaplığı oluşturma

İlk olarak yeni bir Bağlantı Kitaplığı projesi oluşturun. Bu, Visual Studio'da kullanılabilen "Android Java Bağlama Kitaplığı" proje şablonuyla veya şu komut satırıyla dotnet yapılabilir:

dotnet new android-bindinglib

circleimageview-3.1.0.aar Dosyayı proje dizinine kopyalayın.

.NET SDK stil projeleri gibi, Android için .NET bağlama projeleri de otomatik olarak proje dizinindeki herhangi bir .JAR/.AAR dosyasını AndroidLibrary tür dosyası olarak içerir, bu nedenle ek yapılandırma gerekmez.

Şimdi Visual Studio'nun Build komutunu kullanarak veya komut satırından projeyi derleyin:

dotnet build

Bu Java kitaplığı artık bağlı ve Android için .NET uygulama projesi tarafından başvurulmaya veya genel kullanım için NuGet'e yayımlanmaya hazır.

Ek seçenekler

Yönetilen bağlantıları atla

Varsayılan olarak, projede yer alan herhangi bir .JAR/.AAR için C# bağlamaları oluşturulur. Ancak C# bağlamalarının oluşturulması zor olabilir ve Java API'sini C# dilinden çağırmak istemiyorsanız gerekli değildir.

Bu durum özellikle Java kitaplığının yalnızca başka bir Java kitaplığının bağımlılığı olduğu ve doğrudan C# dilinden çağrılması gerekmediği durumlardır. Bu durumda özniteliği yalnızca Bind="false" Java bağımlılığını dahil etmek için kullanılabilir ancak bağlamaz.

<ItemGroup>
  <AndroidLibrary Update="circleimageview-3.1.0.aar" Bind="false" />
</ItemGroup>

Otomatik içeri aktarma kullanıyorsanız, ek bir kopya eklemek yerine otomatik olarak içeri aktarılan dosyayı değiştirmek için Update kullanmanız gerektiğini unutmayın.

Java bağımlılıkları

Java kitaplığı, uygulamanızın çalışması için uygulamanızla birlikte paketlenmesi gereken diğer Java kitaplıklarına bağlı olabilir. Bu bilgiler geleneksel olarak bir .POM dosyasında sağlanır ve gerekli bağımlılıklara düzgün bir şekilde başvurulmasını sağlamak sizin sorumluluğunuzdadır; genellikle NuGet paketi aracılığıyla veya gerekli .JAR/.AAR dosyalarını projenize dahil ederek.

.NET 9'da Java Bağımlılık Doğrulama özelliği eklendi. ".POM dosyasını sağlayarak, bağlantı araçları tüm gerekli Java bağımlılıklarını karşıladığınızdan emin olmanıza yardımcı olabilir."

Java Bağımlılık Doğrulaması'nı izlenecek yol için etkinleştirmek üzere, .NET 9+ kullandığınızdan ve projenizin net9.0-android veya daha büyük bir sürümü hedeflediğinden emin olun.

Maven deposundan yerel olarak indirin circleimageview-3.1.0.pom ve proje klasörünüzde yerleştirin. Unutmayın ki .POM dosyaları, doğru .JAR/.AAR ile ilişkilendirilmeleri gerektiğinden otomatik olarak algılanmaz.

Otomatik olarak içeri aktarılan AndroidLibrary öğesini, Manifest özniteliği ile .POM dosyasının konumunu belirtecek şekilde güncelleyin. Ayrıca, Java kitaplığının JavaArtifact ve JavaVersion değerini belirtin:

<!-- JavaArtifact format is {GroupId}:{ArtifactId} -->
<ItemGroup>
  <AndroidLibrary
    Update="circleimageview-3.1.0.aar"
    Manifest="circleimageview-3.1.0.pom"
    JavaArtifact="de.hdodenhof:circleimageview"
    JavaVersion="3.1.0" />
</ItemGroup>

Bu kitaplık önemsizdir ve Java bağımlılıkları yoktur, ancak varsa ve karşılanmazsa, şöyle bir hata ortaya çıkar:

error XA4241: Java dependency 'androidx.collection:collection:1.0.0' is not satisfied.
error XA4242: Java dependency 'org.jetbrains.kotlin:kotlin-stdlib:1.9.0' is not satisfied. Microsoft maintains the NuGet package 'Xamarin.Kotlin.StdLib' that could fulfill this dependency.

Java Bağımlılık Doğrulamasını yapılandırma ve bağımlılıkları karşılama hakkında ek bilgileri belgelerde bulabilirsiniz.

Sonraki Adımlar

  • Bağlamaları Meta Verilerle Özelleştirme - Örnek uygulamada kullanılan Java kitaplığı basittir ve bağlama araç takımı bunu otomatik olarak bir C# API'sine dönüştürebildi. Ne yazık ki bu genellikle böyle değildir ve genellikle derleme hataları olacaktır. Bağlama aracına Java ve C# dilleri arasındaki farkların nasıl çözüleceğini el ile bildirmek için bu hatalar "meta veri" ile düzeltilmelidir.

  • Ad Alanlarını Değiştirme - Rehberdeki türler, .NET ad alanında DE.Hdodenhof.Circleimageview yer alır. Java paket adları, .NET ad alanlarına göre daha ayrıntılı olma eğilimindedir ve örneğin bir CircleImageViewLibrary kullanmak amacıyla AndroidNamespaceReplacement bunu değiştirmek daha cazip olabilir.

<ItemGroup>
  <AndroidNamespaceReplacement Include='DE.Hdodenhof.Circleimageview' Replacement='CircleImageViewLibrary' />
</ItemGroup>