Compartilhar via


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:

  1. Crie um novo projeto da Biblioteca de Associações Java.

  2. Adicione o . Arquivo JAR para o projeto.

  3. Defina a ação de build apropriada para o . Arquivo JAR.

  4. Escolha uma estrutura de destino que o . Suporte a JAR.

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

Criar projeto de biblioteca 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:

Adicionar item existente

Navegue até o arquivo picasso-2.x.x.jar baixado anteriormente, selecione-o e clique em Adicionar:

Selecione o arquivo jar e clique em Adicionar

Verifique se o arquivo picasso-2.x.x.jar foi adicionado com êxito ao projeto:

Jar adicionado 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:

Selecionar ação de build 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):

Nível de API de destino definido como 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:

  1. Adicione uma referência à Biblioteca de Associações.

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

Adicionar novo projeto BindingTest

Clique com o botão direito do mouse no nó Referências do projeto BindingTest e selecione Adicionar Referência...:

Referência de Adição à Direita

Verifique o projeto JarBinding criado anteriormente e clique em OK:

Selecionar projeto JarBinding

Abra o nó Referências do projeto BindingTest e verifique se a referência JarBinding está presente:

JarBinding aparece em Referências

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:

Captura de tela de BindingTest em execução

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.