Java bağımlılıklarını çözme

Uyarı

Bu özellik yalnızca .NET 9+ ile kullanılabilir.

Bir bağlama projesi için Java bağımlılık doğrulaması <AndroidMavenLibrary> aracılığıyla otomatik olarak veya <AndroidLibrary> aracılığıyla el ile etkinleştirildikten sonra, şu tür hatalarla karşılaşabilir ve düzeltmeniz gerekebilir:

error : Java dependency 'androidx.collection:collection' version '1.0.0' is not satisfied.

Bu bağımlılıklar birçok farklı yolla karşılanabilir.

<PackageReference>

En iyi durumda, java bağımlılığının NuGet.org üzerinde zaten mevcut bir bağlaması vardır. Bu paket Microsoft veya .NET topluluğu tarafından sağlanabilir. Microsoft tarafından hazırlanan paketler, hata iletisinde aşağıdaki gibi görünebilir.

error : Java dependency 'androidx.collection:collection' version '1.0.0' is not satisfied. Microsoft maintains the NuGet package 'Xamarin.AndroidX.Collection' that could fulfill this dependency.

Projeye Xamarin.AndroidX.Collection paketini eklemek, paketin androidx.collection:collection bağımlılığını sağladığını tanıtması için gerekli meta verileri sağladığından, bu hatayı otomatik olarak çözmelidir. Bu, özel hazırlanmış bir NuGet etiketi aranarak yapılır. Örneğin, AndroidX Koleksiyonu kitaplığı için etiket şöyle görünür:

<!-- artifact={GroupId}:{ArtifactId}:{Java Library Version} -->
<PackageTags>artifact=androidx.collection:collection:1.0.0</PackageTags>

Ancak bir bağımlılığı karşılayan ancak bu meta verileri eklememiş NuGet paketleri olabilir. Bu durumda, paketin ile JavaArtifacthangi bağımlılığı içerdiğini açıkça belirtmeniz gerekir:

<PackageReference 
  Include="Xamarin.Kotlin.StdLib" 
  Version="1.7.10" 
  JavaArtifact="org.jetbrains.kotlin:kotlin-stdlib:1.7.10" />

Bununla, bağlama işlemi Java bağımlılığının NuGet paketi tarafından karşılandığından emin olur.

Uyarı

NuGet paketleri kendi bağımlılıklarını belirtir, bu nedenle geçişli bağımlılıklar konusunda endişelenmeniz gerekmez.

<ProjectReference>

Gerekli Java bağımlılığı, çözümünüzdeki başka bir proje tarafından sağlanıyorsa, karşıladığı bağımlılığı belirtmek için <ProjectReference> üzerine anotasyon ekleyebilirsiniz.

<ProjectReference 
  Include="..\My.Other.Binding\My.Other.Binding.csproj" 
  JavaArtifact="my.other.binding:helperlib:1.0.0" />

Bununla bağlama işlemi, Başvurulan proje tarafından Java bağımlılığının karşılandığından emin olur.

Uyarı

Her proje kendi bağımlılıklarını belirtir, bu nedenle geçişli bağımlılıklar konusunda endişelenmeniz gerekmez.

<AndroidLibrary>

Genel bir NuGet paketi oluşturuyorsanız, NuGet bağımlılık grafiğinin çalışması için NuGet'in "paket başına bir kitaplık" ilkesini izlemek istersiniz. Ancak, özel kullanım için bağlama oluşturuyorsanız, Java bağımlılıklarınızı doğrudan üst bağlamaya dahil etmek isteyebilirsiniz.

Bu, projeye ek <AndroidLibrary> öğeler eklenerek yapılabilir:

<ItemGroup>
  <AndroidLibrary Include="mydependency.jar" JavaArtifact="my.library:dependency-library:1.0.0" />
</ItemGroup>

Java kitaplığını dahil etmek ancak C# bağlamaları oluşturmamak için Bind="false" ile işaretleyin

<ItemGroup>
  <AndroidLibrary Include="mydependency.jar" JavaArtifact="my.library:dependency-library:1.0.0" Bind="false" />
</ItemGroup>

Alternatif olarak, <AndroidMavenLibrary> Maven deposundan java kitaplığı almak için de kullanılabilir:

<ItemGroup>
  <AndroidMavenLibrary Include="my.library:dependency-library" Version="1.0.0" />
  <!-- or, if the Java library doesn't need to be bound -->
  <AndroidMavenLibrary Include="my.library:dependency-library" Version="1.0.0" Bind="false" />
</ItemGroup>

Uyarı

Bağımlılık kitaplığının kendi bağımlılıkları varsa, bunların yerine getirildiğinden emin olmanız gerekir.

<AndroidIgnoredJavaDependency>

Son çare olarak, gerekli bir Java bağımlılığı yoksayılabilir. Bağımlılık kitaplığının çalışma zamanında değil yalnızca derleme türünde kullanılan java ek açıklamaları koleksiyonu olması, bunun ne zaman yararlı olduğunu gösteren bir örnektir.

Hata mesajı kaybolsa da, bu, paketin kendiliğinden çalışacağı anlamına gelmez. Bağımlılık gerçekten çalışma zamanında gerekliyse ve sağlanmadıysa Android uygulaması bir Java.Lang.NoClassDefFoundError hatayla kilitlenir.

<ItemGroup>
  <AndroidIgnoredJavaDependency Include="com.google.errorprone:error_prone_annotations:2.15.0" />
</ItemGroup>

Uyarı

JavaArtifact'in herhangi bir kullanımı, birden çok artifaktı virgül veya noktalı virgülle ayırarak belirtebilir.