Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Um cenário de vinculação comum é vincular uma biblioteca Java hospedada em um repositório Maven (como o Maven Central).
O .NET 9 introduz suporte para baixar automaticamente uma biblioteca Java de um repositório Maven e verificar suas dependências para ajudar a tornar esse cenário mais fácil e preciso.
Dica
Se estiver usando uma versão do .NET anterior ao .NET 9 ou associando uma biblioteca Java que não seja do Maven, consulte a documentação Associando uma biblioteca Java.
Passo a passo
Neste passo a passo, vamos associar a versão 3.1.0 de CircleImageView, uma biblioteca que exibe uma imagem em uma tela circular.
No repositório Maven, podemos ver os seguintes identificadores para esta biblioteca que serão necessários posteriormente:
<dependency>
<groupId>de.hdodenhof</groupId>
<artifactId>circleimageview</artifactId>
<version>3.1.0</version>
</dependency>
Criando a biblioteca de vinculações
Primeiro, crie um novo projeto de Biblioteca de Bindings. Isso pode ser feito com o modelo de projeto "Android Java Binding Library" disponível no Visual Studio ou por meio da linha de dotnet comando com:
dotnet new android-bindinglib
Abra o arquivo de projeto (.csproj) criado pelo modelo. Adicionaremos um AndroidMavenLibrary elemento dentro de um ItemGroup para especificar a biblioteca Java que queremos vincular:
<!-- Include format is {GroupId}:{ArtifactId} -->
<ItemGroup>
<AndroidMavenLibrary Include="de.hdodenhof:circleimageview" Version="3.1.0" />
</ItemGroup>
Agora compile o projeto usando o comando Build do Visual Studio ou na linha de comando:
dotnet build
Esta biblioteca Java foi vinculada e agora está pronta para ser referenciada por um projeto .NET para aplicativo Android ou publicada no NuGet para uso público.
Opções adicionais
Ignorar associações gerenciadas
Por padrão, as vinculações C# serão criadas para qualquer .JAR/.AAR colocado no projeto. No entanto, as associações C# podem ser difíceis de criar e não são necessárias se você não pretende chamar a API Java do C#.
Esse é especialmente o caso quando a biblioteca Java é simplesmente uma dependência de outra biblioteca Java e não precisa ser chamada diretamente do C#. Nesse caso, o Bind="false" atributo pode ser usado apenas para incluir a dependência Java, mas não para vinculá-la.
<ItemGroup>
<AndroidMavenLibrary Include="de.hdodenhof:circleimageview" Version="3.1.0" Bind="false" />
</ItemGroup>
Próximas etapas
AndroidMavenLibraryOpções - A biblioteca passo a passo foi baixada automaticamente do Maven Central, que é o repositório padrão. Outros repositórios e opções do Maven podem ser especificados.Verificação de Dependência Java - A biblioteca Java vinculada no tutorial é trivial e não dependia de nenhum outro pacote Java. A maioria das bibliotecas dependerá de outros pacotes Java e erros serão exibidos para garantir que essas dependências possam ser resolvidas.
Esses erros devem ser corrigidos antes que a associação possa ser compilada e se parecem com:
error XA4241: Java dependency 'androidx.collection:collection:1.0.0' is not satisfied.
error XA4242: Java dependency 'org.jetbrains.kotlin:kotlin-stdlib:1.9.0' is not satisfied. Microsoft maintains the NuGet package 'Xamarin.Kotlin.StdLib' that could fulfill this dependency.
Personalizando associações com metadados – a biblioteca Java associada no passo a passo é trivial e as ferramentas de associação foram capazes de convertê-la automaticamente em uma API C#. Infelizmente, muitas vezes não é esse o caso e muitas vezes haverá erros de compilação. Esses erros devem ser corrigidos com "metadados" para instruir manualmente as ferramentas de associação sobre como resolver as diferenças entre as linguagens Java e C#.
Alterando namespaces - Os tipos no passo a passo terminam no namespace
DE.Hdodenhof.Circleimageviewdo .NET. Os nomes de pacotes Java tendem a ser mais detalhados do que os namespaces .NET e pode ser mais desejável alterá-lo, por exemplo, paraCircleImageViewLibraryusando umAndroidNamespaceReplacement:
<ItemGroup>
<AndroidNamespaceReplacement Include='DE.Hdodenhof.Circleimageview' Replacement='CircleImageViewLibrary' />
</ItemGroup>