Associação de um .JAR
Importante
No momento, estamos investigando o uso de associação personalizada na plataforma Xamarin. Faça esta pesquisa para informar os esforços de desenvolvimento futuros.
Este passo a passo fornece instruções passo a passo para criar uma Biblioteca de Associações Java Xamarin.Android de um Android. Arquivo JAR.
Visão geral
A comunidade do Android oferece muitas bibliotecas Java que talvez você queira usar em seu aplicativo. Essas bibliotecas Java geralmente são empacotadas em . Formato JAR (Arquivo Java), mas você pode empacotar um . JAR em uma Biblioteca de Associações Java para que sua funcionalidade esteja disponível para aplicativos Xamarin.Android. A finalidade da biblioteca de Associações Java é tornar as APIs no . Arquivo JAR disponível para código C# por meio de wrappers de código gerados automaticamente.
As ferramentas do Xamarin podem gerar uma Biblioteca de Associações de uma ou mais entradas. Arquivos JAR. A Biblioteca de Associações (.DLL assembly) contém o seguinte:
O conteúdo do original. Arquivos JAR.
MCW (Managed Callable Wrappers), que são tipos C# que encapsulam tipos Java correspondentes dentro do . Arquivos JAR.
O código MCW gerado usa JNI (Java Native Interface) para encaminhar suas chamadas à API para o subjacente. Arquivo JAR. Você pode criar bibliotecas de associações para qualquer . Arquivo JAR que foi originalmente direcionado para ser usado com o Android (observe que as ferramentas do Xamarin atualmente não dão suporte à associação de bibliotecas Java não Android). Você também pode optar por criar a Biblioteca de Associações sem incluir o conteúdo do . Arquivo JAR para que a DLL tenha uma dependência no . JAR em runtime.
Neste guia, vamos percorrer os conceitos básicos da criação de uma Biblioteca de Associações para um único . Arquivo JAR. Ilustraremos com um exemplo em que tudo corre bem, ou seja, onde nenhuma personalização ou depuração de associações é necessária. A criação de associações usando metadados oferece um exemplo de um cenário mais avançado em que o processo de associação não é totalmente automático e uma quantidade de intervenção manual é necessária. Para obter uma visão geral da associação de biblioteca Java em geral (com um exemplo de código básico), consulte Associando uma biblioteca Java.
Passo a passo
No passo a passo a seguir, criaremos uma Biblioteca de Associações para Picasso, um Android popular. JAR que fornece a funcionalidade de carregamento e cache de imagens. Usaremos as seguintes etapas para associar picasso-2.x.x.jar para criar um novo assembly .NET que podemos usar em um projeto Xamarin.Android:
Crie um novo projeto da Biblioteca de Associações Java.
Adicione o . Arquivo JAR para o projeto.
Defina a ação de build apropriada para o . Arquivo JAR.
Escolha uma estrutura de destino que o . Suporte a JAR.
Crie a Biblioteca de Associações.
Depois de criarmos a Biblioteca de Associações, desenvolveremos um pequeno aplicativo Android que demonstra nossa capacidade de chamar APIs na Biblioteca de Associações. Neste exemplo, queremos acessar métodos de picasso-2.x.x.jar:
package com.squareup.picasso
public class Picasso
{
...
public static Picasso with (Context context) { ... };
...
public RequestCreator load (String path) { ... };
...
}
Depois de gerarmos uma Biblioteca de Associações para picasso-2.x.x.jar, podemos chamar esses métodos de C#. Por exemplo:
using Com.Squareup.Picasso;
...
Picasso.With (this)
.Load ("https://mydomain.myimage.jpg")
.Into (imageView);
Criando a biblioteca de associações
Antes de começar com as etapas abaixo, baixe picasso-2.x.x.jar.
Primeiro, crie um novo projeto da Biblioteca de Associações. No Visual Studio para Mac ou no Visual Studio, crie uma solução e selecione o modelo Biblioteca de Associações do Android. (As capturas de tela neste passo a passo usam o Visual Studio, mas Visual Studio para Mac é muito semelhante.) Nomeie a solução jarBinding:
O modelo inclui uma pasta Jars na qual você adiciona o . JAR(s) para o projeto Biblioteca de Associações. Clique com o botão direito do mouse na pasta Jars e selecione Adicionar > Item Existente:
Navegue até o arquivo picasso-2.x.x.jar baixado anteriormente, selecione-o e clique em Adicionar:
Verifique se o arquivo picasso-2.x.x.jar foi adicionado com êxito ao projeto:
Ao criar um projeto de biblioteca de Associações Java, você deve especificar se o . JAR deve ser inserido na Biblioteca de Associações ou empacotado separadamente. Para fazer isso, especifique uma das seguintes ações de build:
EmbeddedJar – o . O JAR será inserido na Biblioteca de Associações.
InputJar – o . O JAR será mantido separado da Biblioteca de Associações.
Normalmente, você usa a ação de build EmbeddedJar para que o . O JAR é empacotado automaticamente na biblioteca de associações. Essa é a opção mais simples – código de bytes Java no . JAR é convertido em código de bytes Dex e é inserido (juntamente com os Wrappers Callable Gerenciados) em seu APK. Se você quiser manter o . JAR separado da biblioteca de associações, você pode usar a opção InputJar ; no entanto, você deve garantir que o . O arquivo JAR está disponível no dispositivo que executa seu aplicativo.
Defina a ação de build como EmbeddedJar:
Em seguida, abra as Propriedades do projeto para configurar a Estrutura de Destino. Se o . O JAR usa qualquer APIs do Android, defina a Estrutura de Destino para o nível de API que o . JAR espera. Normalmente, o desenvolvedor do . O arquivo JAR indicará qual nível de API (ou níveis) o . O JAR é compatível com. (Para obter mais informações sobre a configuração da Estrutura de Destino e os níveis de API do Android em geral, consulte Noções básicas sobre níveis de API do Android.)
Defina o nível de API de destino para sua Biblioteca de Associações (neste exemplo, estamos usando o nível de API 19):
Por fim, crie a Biblioteca de Associações. Embora algumas mensagens de aviso possam ser exibidas, o projeto Biblioteca de Associações deve ser compilado com êxito e produzir uma saída .DLL no seguinte local: JarBinding/bin/Debug/JarBinding.dll
Usando a biblioteca de associações
Para consumir esse .DLL em seu aplicativo Xamarin.Android, faça o seguinte:
Adicione uma referência à Biblioteca de Associações.
Faça chamadas para o . JAR por meio dos Wrappers Callable Gerenciados.
Nas etapas a seguir, criaremos um aplicativo mínimo que usa a Biblioteca de Associações para baixar e exibir uma imagem em um ImageView
; o "trabalho pesado" é feito pelo código que reside no . Arquivo JAR.
Primeiro, crie um novo aplicativo Xamarin.Android que consuma a Biblioteca de Associações. Clique com o botão direito do mouse na Solução e selecione Adicionar Novo Projeto; nomeie o novo projeto BindingTest. Estamos criando esse aplicativo na mesma solução que a Biblioteca de Associações para simplificar este passo a passo; no entanto, o aplicativo que consome a Biblioteca de Associações pode, em vez disso, residir em uma solução diferente:
Clique com o botão direito do mouse no nó Referências do projeto BindingTest e selecione Adicionar Referência...:
Verifique o projeto JarBinding criado anteriormente e clique em OK:
Abra o nó Referências do projeto BindingTest e verifique se a referência JarBinding está presente:
Modifique o layout BindingTest (Main.axml) para que ele tenha um único ImageView
:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:minWidth="25px"
android:minHeight="25px">
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/imageView" />
</LinearLayout>
Adicione a seguinte using
instrução a MainActivity.cs – isso possibilita acessar facilmente os métodos da classe baseada em Picasso
Java que reside na Biblioteca de Associações:
using Com.Squareup.Picasso;
Modifique o OnCreate
método para que ele use a Picasso
classe para carregar uma imagem de uma URL e exibi-la no ImageView
:
public class MainActivity : Activity
{
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
ImageView imageView = FindViewById<ImageView>(Resource.Id.imageView);
// Use the Picasso jar library to load and display this image:
Picasso.With (this)
.Load ("https://i.imgur.com/DvpvklR.jpg")
.Into (imageView);
}
}
Compile e execute o projeto BindingTest . O aplicativo será inicializado e, após um pequeno atraso (dependendo das condições de rede), ele deverá baixar e exibir uma imagem semelhante à seguinte captura de tela:
Parabéns! Você vinculou com êxito uma biblioteca Java . JAR e o usou em seu aplicativo Xamarin.Android.
Resumo
Neste passo a passo, criamos uma Biblioteca de Associações para um de terceiros. O arquivo JAR adicionou a Biblioteca de Associações a um aplicativo de teste mínimo e, em seguida, executou o aplicativo para verificar se nosso código C# pode chamar o código Java que reside no . Arquivo JAR.