Ověření závislostí v Javě

Poznámka:

Tato funkce je k dispozici pouze v .NET 9 nebo novějším.

Běžným problémem při vytváření knihoven vazeb Java pro .NET na platformě Android je nedodání požadovaných závislostí Java. Proces vazby ignoruje rozhraní API, které vyžaduje chybějící závislosti, takže to může vést k tomu, že velké části požadovaného rozhraní API nejsou vázané.

Na rozdíl od sestavení .NET knihovna Java neurčuje její závislosti v balíčku. Informace o závislostech jsou uloženy v externích souborech označovaných jako soubory POM. Aby bylo možné správně spravovat závislosti, je do vazbového projektu nutné přidat další vrstvu souborů pro použití těchto informací.

Návod

Upřednostňovaným způsobem interakce s tímto systémem je použití <AndroidMavenLibrary> , které automaticky stáhne všechny potřebné soubory POM.

Například:

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

automaticky se rozbalí na:

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

Můžete se ale také ručně přihlásit k ověřování závislostí v Javě pomocí položek sestavení zdokumentovaných zde.

Specifikace

Pokud chcete ručně zapnout ověřování závislostí v Java, přidejte atributy Manifest a JavaArtifact ke položce <AndroidLibrary>:

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

Sestavení vazbového projektu by teď mělo vést k chybám ověření, pokud my_binding_library.pom určuje závislosti, které nejsou splněny.

Například:

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

Tyto chyby nebo žádné chyby by měly znamenat, že ověřování závislostí v Javě funguje. Pokud chcete opravit chyby chybějících závislostí, postupujte podle průvodce řešením závislostí v Javě .

Další soubory POM

Soubory POM můžou někdy obsahovat některé volitelné funkce, díky kterým jsou složitější než v předchozím příkladu.

To znamená, že soubor POM může záviset na nadřazeného souboru POM:

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

Kromě toho může soubor POM importovat informace o závislostech z jiného souboru POM:

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

Informace o závislostech nelze přesně určit, aniž byste měli přístup k těmto dalším souborům POM, a výsledkem bude chyba typu:

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

V tomto případě musíme zadat soubor POM pro 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>

Všimněte si, že jako "nadřazené" a "importované" POM mohou mít své vlastní nadřazené a importované POM, tento krok se může opakovat, dokud nebudou vyřešeny všechny POM soubory.

Mějte také na paměti, že pokud použijete tento příkaz <AndroidMavenLibrary> , bude se zpracovávat automaticky.

Pokud v tuto chvíli dojde k chybám závislostí, opravte případné chybějící chyby závislostí podle průvodce řešením závislostí Java .