Java bağımlılık doğrulaması

Uyarı

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

Android için .NET için Java bağlama kitaplıkları oluştururken karşılaşılan yaygın bir sorun, gerekli Java bağımlılıklarını sağlamamasıdır. Bağlama işlemi eksik bağımlılıklar gerektiren API'yi yoksayar, bu nedenle istenen API'nin büyük bölümlerinin bağlı olmamasıyla sonuçlanabilir.

.NET derlemelerinden farklı olarak, Java kitaplığı paketteki bağımlılıklarını belirtmez. Bağımlılık bilgileri POM dosyaları olarak adlandırılan dış dosyalarda depolanır. Doğru bağımlılıkları sağlamak için bu bilgileri kullanmak için bağlama projesine ek bir dosya katmanı eklenmelidir.

Tavsiye

Bu sistemle etkileşim kurmanın tercih edilen yolu, gerekli POM dosyalarını otomatik olarak indirecek olan kullanmaktır <AndroidMavenLibrary> .

Örneğin:

<AndroidMavenLibrary Include="com.squareup.okio:okio" Version="1.17.4" />

otomatik olarak genişletilir:

<AndroidLibrary 
  Include="<MavenCacheDir>/Central/com.squareup.okio/okio/1.17.4/com.squareup.okio_okio.jar" 
  Manifest="<MavenCacheDir>/Central/com.squareup.okio/okio/1.17.4/com.squareup.okio_okio.pom"
  JavaArtifact="com.squareup.okio:okio:1.17.4" />
  
<AndroidAdditionalJavaManifest
  Include="<MavenCacheDir>/Central/com.squareup.okio/okio-parent/1.17.4/okio-parent-1.17.4.pom"
  JavaArtifact="com.squareup.okio:okio-parent:1.17.4" />
  
etc.

Ancak burada belgelenen derleme öğelerini kullanarak Java bağımlılık doğrulamasını el ile kabul etmek de mümkündür.

Specification

Java bağımlılık doğrulamasını manuel olarak etkinleştirmek için Manifest ve JavaArtifact özniteliklerini bir <AndroidLibrary> öğesine ekleyin.

<!-- JavaArtifact format is {GroupId}:{ArtifactId}:{Version} -->
<ItemGroup>
  <AndroidLibrary
    Include="my_binding_library.jar"
    Manifest="my_binding_library.pom"
    JavaArtifact="com.example:mybinding:1.0.0" />
</ItemGroup>

Eğer my_binding_library.pom karşılanmayan bağımlılıkları belirtiyorsa, bağlama projesinin derlenmesi doğrulama hatalarına yol açmalıdır.

Örneğin:

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

Bu hataların görülmesi veya hata olmaması Java bağımlılık doğrulamasının çalıştığını göstermelidir. Eksik bağımlılık hatalarını düzeltmek için Java Bağımlılıklarını Çözümleme kılavuzunu izleyin.

Ek POM dosyaları

POM dosyaları bazen kullanımda olan ve bunları yukarıdaki örnekten daha karmaşık hale getiren bazı isteğe bağlı özelliklere sahip olabilir.

Yani, POM dosyası bir "üst" POM dosyasına bağlı olabilir:

<parent>
  <groupId>com.squareup.okio</groupId>
  <artifactId>okio-parent</artifactId>
  <version>1.17.4</version>
</parent>

Ayrıca, pom dosyası başka bir POM dosyasından bağımlılık bilgilerini "içeri aktarabilir":

<dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>com.squareup.okio</groupId>
      <artifactId>okio-bom</artifactId>
      <version>3.0.0</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

Bağımlılık bilgileri, bu ek POM dosyalarına da erişim olmadan doğru bir şekilde belirlenemez ve aşağıdaki gibi bir hatayla sonuçlanır:

error : Unable to resolve POM for artifact 'com.squareup.okio:okio-parent:1.17.4'.

Bu durumda için POM dosyasını com.squareup.okio:okio-parent:1.17.4sağlamamız gerekir:

<!-- JavaArtifact format is {GroupId}:{ArtifactId}:{Version} -->
<ItemGroup>
  <AndroidAdditionalJavaManifest
    Include="com.square.okio.okio-parent.1.17.4.pom"
    JavaArtifact="com.squareup.okio:okio-parent:1.17.4" />
</ItemGroup>

"Ana" ve "İthal" POM'lerin kendi ana ve ithal POM'leri de olabileceğini unutmayın, bu nedenle tüm POM dosyaları çözümlenene kadar bu adımın tekrarlanması gerekebilir.

Ayrıca, <AndroidMavenLibrary> kullanıyorsanız bunların tümü otomatik olarak işlenmelidir.

Bu noktada bağımlılık hataları varsa, eksik bağımlılık hatalarını düzeltmek için Java Bağımlılıklarını Çözümleme kılavuzunu izleyin.