Freigeben über


Java-Abhängigkeitsüberprüfung

Hinweis

Dieses Feature ist nur in .NET 9+ verfügbar.

Ein häufiges Problem beim Erstellen von Java-Bindungsbibliotheken für .NET für Android stellt nicht die erforderlichen Java-Abhängigkeiten bereit. Der Bindungsprozess ignoriert DIE API, die fehlende Abhängigkeiten erfordert, sodass dies zu großen Teilen der gewünschten API führen kann, die nicht gebunden werden.

Im Gegensatz zu .NET-Assemblys gibt eine Java-Bibliothek ihre Abhängigkeiten im Paket nicht an. Die Abhängigkeitsinformationen werden in externen Dateien gespeichert, die als POM-Dateien bezeichnet werden. Um diese Informationen zu verwenden und korrekte Abhängigkeiten sicherzustellen, muss eine zusätzliche Ebene von Dateien zu einem Bindungsprojekt hinzugefügt werden.

Tipp

Die bevorzugte Art der Interaktion mit diesem System besteht darin, <AndroidMavenLibrary> zu verwenden, wodurch die benötigten POM-Dateien automatisch heruntergeladen werden.

Zum Beispiel:

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

wird automatisch erweitert auf:

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

Es ist jedoch auch möglich, die Java-Abhängigkeitsüberprüfung manuell mithilfe der hier dokumentierten Buildelemente zu aktivieren.

Spezifikation

Um sich manuell für die Überprüfung von Java-Abhängigkeiten zu entscheiden, fügen Sie einem <AndroidLibrary>-Element die Attribute Manifest und JavaArtifact hinzu.

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

Die Erstellung des Bindungsprojekts sollte jetzt Überprüfungsfehler erzeugen, wenn my_binding_library.pom Abhängigkeiten angibt, die nicht erfüllt sind.

Zum Beispiel:

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

Diese Fehler oder keine Fehler sollten darauf hinweisen, dass die Überprüfung der Java-Abhängigkeit funktioniert. Befolgen Sie den Leitfaden zum Auflösen von Java-Abhängigkeiten , um fehlende Abhängigkeitsfehler zu beheben.

Weitere POM-Dateien

POM-Dateien können manchmal einige optionale Features verwenden, die sie komplizierter machen als im obigen Beispiel.

Das heißt, eine POM-Datei kann von einer "übergeordneten" POM-Datei abhängen:

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

Darüber hinaus kann eine POM-Datei Abhängigkeitsinformationen aus einer anderen POM-Datei "importieren":

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

Abhängigkeitsinformationen können nicht genau bestimmt werden, ohne auch Zugriff auf diese zusätzlichen POM-Dateien zu haben, und führt zu einem Fehler wie:

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

In diesem Fall müssen wir die POM-Datei für com.squareup.okio:okio-parent:1.17.4 bereitstellen.

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

Beachten Sie, dass "Übergeordnete" und "Import"-POMs selbst über übergeordnete und importierte POMs verfügen können, weshalb dieser Schritt gegebenenfalls wiederholt werden muss, bis alle POM-Dateien aufgelöst werden können.

Beachten Sie auch, dass bei Verwendung von <AndroidMavenLibrary> dies alles automatisch gehandhabt wird.

Wenn Abhängigkeitsfehler auftreten, befolgen Sie an diesem Punkt den Leitfaden zum Auflösen von Java-Abhängigkeiten , um fehlende Abhängigkeitsfehler zu beheben.