Verifikation av Java-beroenden

Anmärkning

Den här funktionen är endast tillgänglig i .NET 9+.

Ett vanligt problem när du skapar Java-bindningsbibliotek för .NET för Android är inte att tillhandahålla nödvändiga Java-beroenden. Bindningsprocessen ignorerar API som kräver saknade beroenden, så detta kan leda till att stora delar av önskat API inte är bundet.

Till skillnad från .NET-sammansättningar anger ett Java-bibliotek inte dess beroenden i paketet. Beroendeinformationen lagras i externa filer som kallas POM-filer. För att kunna använda den här informationen för att säkerställa korrekta beroenden måste ytterligare ett lager av filer läggas till i ett bindningsprojekt.

Tips/Råd

Det bästa sättet att interagera med det här systemet är att använda <AndroidMavenLibrary> som automatiskt laddar ned eventuella POM-filer som behövs.

Som exempel:

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

expanderas automatiskt till:

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

Men det är också möjligt att manuellt välja Java-beroendeverifiering med hjälp av byggobjekten som dokumenteras här.

Specifikation

Om du vill välja Java-beroendeverifiering manuellt lägger du till attributen Manifest och JavaArtifact i ett <AndroidLibrary> objekt:

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

Att skapa bindningsprojektet nu bör resultera i verifieringsfel om my_binding_library.pom anger beroenden som inte uppfylls.

Som exempel:

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

Om du ser dessa fel eller inga fel bör det indikera att Java-beroendeverifieringen fungerar. Följ guiden Lösa Java-beroenden för att åtgärda eventuella saknade beroendefel.

Ytterligare POM-filer

POM-filer kan ibland ha några valfria funktioner som används som gör dem mer komplicerade än exemplet ovan.

En POM-fil kan alltså vara beroende av en "överordnad" POM-fil:

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

Dessutom kan en POM-fil "importera" beroendeinformation från en annan POM-fil:

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

Beroendeinformation kan inte fastställas korrekt utan att även ha åtkomst till dessa ytterligare POM-filer och resulterar i ett fel som:

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

I det här fallet måste vi ange POM-filen för 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>

Observera att eftersom "Parent"- och "Import"-POM:ar själva kan ha överordnade och importerade POM:ar kan det här steget behöva upprepas tills alla POM-filer kan lösas.

Observera också att om du använder <AndroidMavenLibrary>, bör allt hanteras automatiskt.

Om det finns beroendefel följer du guiden Lösa Java-beroenden för att åtgärda eventuella saknade beroendefel.