Проверка зависимостей Java

Примечание.

Эта функция доступна только в .NET 9+.

Распространенной проблемой при создании библиотек привязки Java для .NET на Android является непредоставление необходимых зависимостей Java. Процесс привязки игнорирует API, требующий отсутствующих зависимостей, поэтому это может привести к тому, что большие части требуемого API не привязаны.

В отличие от сборок .NET, библиотека Java не указывает ее зависимости в пакете. Сведения о зависимости хранятся во внешних файлах, называемых POM-файлами. Чтобы использовать эту информацию и обеспечить правильные зависимости, необходимо добавить дополнительный слой файлов в проект привязки.

Совет

Предпочтительный способ взаимодействия с этой системой — это использование <AndroidMavenLibrary> , которое автоматически скачивает все необходимые POM-файлы.

Например:

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

автоматически расширяется до:

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

Однако также можно вручную принять участие в проверке зависимостей Java с помощью элементов сборки, описанных здесь.

Спецификация

Чтобы вручную принять участие в проверке зависимостей Java, добавьте атрибуты Manifest и JavaArtifact в элемент <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>

Создание проекта привязки теперь должно привести к ошибкам проверки, если my_binding_library.pom указаны зависимости, которые не выполнены.

Например:

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

Видимость этих ошибок или их отсутствие должно указывать на то, что проверка зависимостей Java работает. Следуйте руководству по устранению зависимостей Java, чтобы исправить ошибки, связанные с отсутствием зависимостей.

Дополнительные файлы POM

Файлы POM иногда могут использовать некоторые необязательные функции, которые делают их более сложными, чем в приведенном выше примере.

То есть, POM-файл может зависеть от родительского POM-файла:

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

Кроме того, POM-файл может импортировать сведения о зависимости из другого 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>

Сведения о зависимости не могут быть точно определены без доступа к этим дополнительным файлам POM и приводят к ошибке, например:

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

В этом случае необходимо указать POM-файл для 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>

Обратите внимание, что как POM-файлы "Parent" и "Import" могут сами иметь родительские и импортированные POM-файлы, этот шаг может потребоваться повторить, пока не удастся разрешить все POM-файлы.

Обратите внимание также, что при использовании <AndroidMavenLibrary> все это должно обрабатываться автоматически.

На этом этапе, если возникают ошибки зависимостей, следуйте руководству по устранению зависимостей Java , чтобы устранить отсутствующие ошибки зависимостей.