Verificatie van Java-afhankelijkheid

Opmerking

Deze functie is alleen beschikbaar in .NET 9+.

Een veelvoorkomend probleem bij het maken van Java-bindingsbibliotheken voor .NET voor Android biedt niet de vereiste Java-afhankelijkheden. Het bindingsproces negeert de API waarvoor ontbrekende afhankelijkheden zijn vereist. Dit kan ertoe leiden dat grote delen van de gewenste API niet worden gebonden.

In tegenstelling tot .NET-assembly's geeft een Java-bibliotheek de afhankelijkheden in het pakket niet op. De afhankelijkheidsinformatie wordt opgeslagen in externe bestanden met de naam POM-bestanden. Om deze informatie te gebruiken en de juiste afhankelijkheden te garanderen, moet er een extra laag van bestanden aan een bindingsproject worden toegevoegd.

Aanbeveling

De voorkeursmethode voor interactie met dit systeem is om te gebruiken <AndroidMavenLibrary> die automatisch eventuele benodigde POM-bestanden zal downloaden.

Voorbeeld:

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

wordt automatisch uitgebreid naar:

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

U kunt zich echter ook handmatig aanmelden voor verificatie van Java-afhankelijkheden met behulp van de build-items die hier worden beschreven.

Specification

Als u zich handmatig wilt aanmelden voor verificatie van Java-afhankelijkheid, voegt u de Manifest en JavaArtifact kenmerken toe aan een <AndroidLibrary> item:

<!-- 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>

Het bouwen van het bindingsproject zou nu tot verificatiefouten moeten leiden als my_binding_library.pom afhankelijkheden specificeert waaraan niet wordt voldaan.

Voorbeeld:

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

Als deze fouten worden weergegeven of als er geen fouten zijn, zou dit moeten aangeven dat de verificatie van de Java-afhankelijkheden werkt. Volg de handleiding Java-afhankelijkheden oplossen om eventuele ontbrekende afhankelijkheidsfouten op te lossen.

Aanvullende POM-bestanden

POM-bestanden kunnen soms enkele optionele functies hebben die ze ingewikkelder maken dan in het bovenstaande voorbeeld.

Dat wil zeggen, een POM-bestand kan afhankelijk zijn van een 'ouder' POM-bestand.

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

Daarnaast kan een POM-bestand afhankelijkheidsinformatie importeren uit een ander POM-bestand:

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

Afhankelijkheidsinformatie kan niet nauwkeurig worden bepaald zonder ook toegang te hebben tot deze extra POM-bestanden en resulteert in een fout zoals:

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

In dit geval moeten we het POM-bestand opgeven voor com.squareup.okio:okio-parent:1.17.4:

<!-- 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>

Houd er rekening mee dat als 'Hoofd'- en 'Import'-POM's zelf ook bovenliggende en geïmporteerde POM's kunnen hebben, deze stap mogelijk moet worden herhaald totdat alle POM-bestanden kunnen worden opgelost.

Houd er ook rekening mee dat als <AndroidMavenLibrary> wordt gebruikt, dit allemaal automatisch moet worden afgehandeld.

Als er afhankelijkheidsfouten zijn, volgt u de handleiding Java-afhankelijkheden oplossen om eventuele ontbrekende afhankelijkheidsfouten op te lossen.