Maven'den Java kütüphanesini bağlama

Yaygın bir bağlama senaryosu, Maven deposunda barındırılan bir Java kitaplığını bağlamaktır ( Maven Central gibi).

.NET 9, bir Maven deposundan java kitaplığını otomatik olarak indirme ve bu senaryonun daha kolay ve doğru olmasına yardımcı olmak için bağımlılıklarını doğrulama desteği sunar.

Tavsiye

.NET 9'dan önceki bir .NET sürümünü kullanıyorsanız veya Maven'dan olmayan bir Java kitaplığını bağlıyorsanız, 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, bu kitaplık için daha sonra gerekli olacak aşağıdaki tanımlayıcıları görebiliriz:

<dependency>
    <groupId>de.hdodenhof</groupId>
    <artifactId>circleimageview</artifactId>
    <version>3.1.0</version>
</dependency>

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

Şablon tarafından oluşturulan proje dosyasını (.csproj) açın. Bağlamak istediğimiz Java kitaplığını belirtmek için içine bir AndroidMavenLibraryItemGroup öğesi ekleyeceğiz:

<!-- Include format is {GroupId}:{ArtifactId} -->
<ItemGroup>
  <AndroidMavenLibrary Include="de.hdodenhof:circleimageview" Version="3.1.0" />
</ItemGroup>

Ş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>
  <AndroidMavenLibrary Include="de.hdodenhof:circleimageview" Version="3.1.0" Bind="false" />
</ItemGroup>

Sonraki Adımlar

  • AndroidMavenLibrary Seçenekler - Rehber kitaplık, varsayılan depo olan Maven Central'dan otomatik olarak indirildi. Diğer Maven depoları ve seçenekleri belirtilebilir.

  • Java Bağımlılık Doğrulaması - İzlenecek yoldaki Java kitaplığı önemsizdir ve diğer Java paketlerine bağımlı değildir. Çoğu kitaplık diğer Java paketlerine bağımlı olur ve bu bağımlılıkların çözümlenebilmesi için hatalar ortaya çıkar.

Bağlamanın derlenip şöyle görünebilmesi için bu hataların düzeltilmesi gerekir:

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.
  • 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>