Verificação de dependência do Java
Observação
Esse recurso só está disponível no .NET 9+.
Um problema comum ao criar bibliotecas de associação Java para .NET para Android é não fornecer as dependências Java necessárias. O processo de associação ignora a API que requer dependências ausentes, portanto, isso pode resultar em grandes partes da API desejada não sendo associadas.
Ao contrário dos assemblies .NET, uma biblioteca Java não especifica suas dependências no pacote. As informações de dependência são armazenadas em arquivos externos chamados arquivos POM. Para consumir essas informações para garantir as dependências corretas, uma camada adicional de arquivos deve ser adicionada a um projeto de associação.
Dica
A maneira preferida de interagir com este sistema é usar <AndroidMavenLibrary>
o que fará o download automático de todos os arquivos POM necessários.
Por exemplo:
<AndroidMavenLibrary Include="com.squareup.okio:okio" Version="1.17.4" />
é expandido automaticamente para:
<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.
No entanto, também é possível aceitar manualmente a verificação de dependência Java usando os itens de construção documentados aqui.
Especificação
Para aceitar manualmente a verificação de dependência Java, inclua os Manifest
atributos e JavaArtifact
em um <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>
A criação do projeto de associação agora deve resultar em erros de verificação se my_binding_library.pom
especificar dependências que não são atendidas.
Por exemplo:
error : Java dependency 'androidx.collection:collection' version '1.0.0' is not satisfied.
Ver esse(s) erro(s) ou nenhum erro deve indicar que a verificação de dependência Java está funcionando. Siga o guia Resolvendo dependências Java para corrigir erros de dependência ausentes.
Arquivos POM adicionais
Às vezes, os arquivos POM podem ter alguns recursos opcionais em uso que os tornam mais complicados do que o exemplo acima.
Ou seja, um arquivo POM pode depender de um arquivo POM "pai":
<parent>
<groupId>com.squareup.okio</groupId>
<artifactId>okio-parent</artifactId>
<version>1.17.4</version>
</parent>
Além disso, um arquivo POM pode "importar" informações de dependência de outro arquivo 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>
As informações de dependência não podem ser determinadas com precisão sem também ter acesso a esses arquivos POM adicionais e resultarão em um erro como:
error : Unable to resolve POM for artifact 'com.squareup.okio:okio-parent:1.17.4'.
Nesse caso, precisamos fornecer o arquivo POM para 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>
Observe que, como os POMs "Pai" e "Importação" podem ter POMs pai e importados, essa etapa pode precisar ser repetida até que todos os arquivos POM possam ser resolvidos.
Observe também que, se estiver usando <AndroidMavenLibrary>
isso, tudo deve ser tratado automaticamente.
Neste ponto, se houver erros de dependência, siga o guia Resolvendo dependências Java para corrigir quaisquer erros de dependência ausentes.