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.
O ecossistema de bibliotecas de terceiros para Android é enorme. Por causa disso, muitas vezes faz sentido usar uma biblioteca Android existente do que criar uma nova.
O .NET para Android permite que você faça isso com uma Biblioteca de Associações que encapsula automaticamente a biblioteca com wrappers C# para que você possa invocar o código Java por meio de chamadas C#.
Isso é implementado usando Managed Callable Wrappers (MCW). O MCW é uma ponte JNI usada quando o código gerenciado precisa chamar o código Java. Os wrappers callable gerenciados também fornecem suporte para subclassificação de tipos Java e para sobrescrever métodos virtuais de tipos Java. Da mesma forma, sempre que o código do Android Runtime (ART) deseja invocar o código gerenciado, ele o faz por meio de outra ponte JNI conhecida como Android Callable Wrappers (ACW). Essa arquitetura é ilustrada no diagrama a seguir:
Uma Biblioteca de Bindings é um assembly que contém Wrappers Gerenciados Chamáveis para tipos Java. Por exemplo, aqui está um tipo Java, MyClass, que queremos encapsular em uma Biblioteca de Ligações:
package com.contoso.mycode;
public class MyClass
{
public String myMethod (int i) { ... }
}
Depois de gerarmos uma biblioteca de ligações para o .jar que contém MyClass, podemos instanciá-la e chamar métodos nela a partir de C#:
var instance = new MyClass ();
string result = instance.MyMethod (42);
Para criar essa Biblioteca de Associações, use o modelo Biblioteca de Associações Java do .NET para Android. O projeto de associação resultante cria um assembly .NET com as classes MCW, os arquivos .jar/.aar e os recursos para projetos de biblioteca do Android embutidos nele. Ao fazer referência ao assembly da Biblioteca de Associações resultante, você pode reutilizar uma biblioteca Java existente em seu projeto .NET para Android.
Ao fazer referência a tipos em sua Biblioteca de Associação, você deve usar o namespace de sua biblioteca de associação. Normalmente, você adiciona uma using diretiva na parte superior dos arquivos de origem C# que é a versão do namespace .NET do nome do pacote Java. Por exemplo, se o nome do pacote Java para o .jar associado for o seguinte:
com.contoso.package
Em seguida, você colocaria a seguinte using instrução na parte superior dos arquivos de origem do C# para acessar tipos no arquivo .jar associado:
using Com.Contoso.Package;
Ao vincular uma biblioteca Android existente, é necessário ter em mente os seguintes pontos:
Existem dependências externas para a biblioteca? – Todas as dependências Java exigidas pela biblioteca do Android devem ser incluídas no projeto .NET para Android por meio de um pacote NuGet ou como uma AndroidLibrary. Todos os assemblies nativos devem ser adicionados ao projeto de associação como um AndroidNativeLibrary.
Qual versão da API do Android a biblioteca do Android suporta? – Não é possível reduzir o nível da API do Android; verifique se o projeto de binding do .NET para Android está apontando para o mesmo nível de API (ou superior) que a biblioteca do Android.
Adaptando APIs Java para C⧣
O Gerador de Associação do .NET para Android alterará alguns idiomas e padrões Java para corresponder aos padrões do .NET. A lista a seguir descreve como o Java é mapeado para C#/.NET:
Os métodos Setter/Getter em Java são propriedades no .NET.
Os campos em Java são propriedades no .NET.
Interfaces de Ouvinte em Java são Eventos em .NET. Os parâmetros dos métodos nas interfaces de retorno de chamada serão representados por uma
EventArgssubclasse.Uma Classe Aninhada Estática em Java é uma Classe Aninhada no .NET.
Uma classe interna em Java é análoga a uma classe aninhada com um construtor de instância em C#.
Incluindo uma biblioteca nativa em uma vinculação
Pode ser necessário incluir uma biblioteca .so em um projeto de associação do .NET para Android como parte da associação de uma biblioteca Java. Quando o código Java encapsulado for executado, o .NET para Android falhará ao fazer a chamada JNI e a mensagem de erro java.lang.UnsatisfiedLinkError: Método nativo não encontrado: aparecerá no logcat out para o aplicativo.
A correção para isso é carregar manualmente a biblioteca .so com uma chamada para Java.Lang.JavaSystem.LoadLibrary. Por exemplo, supondo que um projeto .NET para Android tenha a biblioteca compartilhada libpocketsphinx_jni.so incluída no projeto de associação com uma ação de build de AndroidNativeLibrary, o seguinte snippet (executado antes de usar a biblioteca compartilhada) carregará a biblioteca .so:
Java.Lang.JavaSystem.LoadLibrary("pocketsphinx_jni");
Cenários de associação
Os seguintes guias de cenário de vinculação podem ajudá-lo a vincular uma biblioteca (ou bibliotecas) Java para incorporação ao seu aplicativo:
A criação de uma vinculação para uma biblioteca Java é um passo a passo para a criação de bibliotecas de vinculações para arquivos .jar/.aar disponíveis localmente.
Associar uma biblioteca Java do Maven é um passo a passo para criar Bibliotecas de Bindings para arquivos .jar/ e .aar hospedados em um repositório Maven.
Personalizando associações explica como fazer modificações manuais na associação para resolver erros de build e moldar a API resultante para que ela seja mais "semelhante ao C#".
A solução de problemas de associações inclui cenários comuns de erros de associação, explica as possíveis causas e oferece sugestões para resolver esses erros.