Associazione di un file JAR

Importante

Attualmente si sta esaminando l'utilizzo dell'associazione personalizzata nella piattaforma Xamarin. Si prega di prendere questo sondaggio per informare i futuri sforzi di sviluppo.

Questa procedura dettagliata fornisce istruzioni dettagliate per la creazione di una libreria di binding Java Xamarin.Android da un android. File JAR.

Panoramica

La community Android offre molte librerie Java che possono essere usate nell'app. Queste librerie Java vengono spesso incluse in . Formato JAR (archivio Java), ma è possibile creare un pacchetto di . Jar in una libreria di binding Java in modo che la relativa funzionalità sia disponibile per le app Xamarin.Android. Lo scopo della libreria Java Bindings è quello di creare le API in . File JAR disponibile per il codice C# tramite wrapper di codice generati automaticamente.

Gli strumenti di Xamarin possono generare una libreria binding da uno o più input. File JAR. La libreria binding (assembly .DLL) contiene quanto segue:

  • Contenuto dell'oggetto originale. File JAR.

  • Wrapper chiamabili gestiti (MCW), ovvero tipi C# che eseguono il wrapping dei tipi Java corrispondenti all'interno di . File JAR.

Il codice MCW generato usa JNI (Java Native Interface) per inoltrare le chiamate API all'oggetto sottostante. File JAR. È possibile creare librerie di associazioni per qualsiasi oggetto . File JAR di destinazione originariamente da usare con Android (si noti che gli strumenti Xamarin attualmente non supportano l'associazione di librerie Java non Android). È anche possibile scegliere di compilare la libreria binding senza includere il contenuto di . File JAR in modo che la DLL abbia una dipendenza da . JAR in fase di esecuzione.

In questa guida verranno descritti i concetti di base relativi alla creazione di una libreria di binding per un singolo oggetto . File JAR. Verrà illustrato un esempio in cui tutto va bene, ovvero in cui non è necessaria alcuna personalizzazione o debug delle associazioni. La creazione di associazioni tramite metadati offre un esempio di scenario più avanzato in cui il processo di associazione non è completamente automatico e è necessaria una certa quantità di intervento manuale. Per una panoramica dell'associazione di librerie Java in generale (con un esempio di codice di base), vedere Associazione di una libreria Java.

scenario

Nella procedura dettagliata seguente si creerà una libreria binding per Picasso, un popolare android . JAR che fornisce funzionalità di caricamento e memorizzazione nella cache delle immagini. Verranno usati i passaggi seguenti per associare picasso-2.x.x.jar per creare un nuovo assembly .NET che è possibile usare in un progetto Xamarin.Android:

  1. Creare un nuovo progetto libreria di binding Java.

  2. Aggiungere . File JAR nel progetto.

  3. Impostare l'azione di compilazione appropriata per . File JAR.

  4. Scegliere un framework di destinazione che l'oggetto . Il file JAR supporta.

  5. Compilare la libreria binding.

Dopo aver creato la libreria binding, si svilupperà una piccola app Android che dimostra la possibilità di chiamare le API nella libreria binding. In questo esempio si vuole accedere ai metodi di picasso-2.x.x.jar:

package com.squareup.picasso

public class Picasso
{
    ...
    public static Picasso with (Context context) { ... };
    ...
    public RequestCreator load (String path) { ... };
    ...
}

Dopo aver generato una libreria binding per picasso-2.x.x.jar, è possibile chiamare questi metodi da C#. Ad esempio:

using Com.Squareup.Picasso;
...
Picasso.With (this)
    .Load ("https://mydomain.myimage.jpg")
    .Into (imageView);

Creazione della libreria binding

Prima di iniziare con i passaggi seguenti, scaricare picasso-2.x.x.jar.

Creare prima di tutto un nuovo progetto libreria binding. In Visual Studio per Mac o Visual Studio creare una nuova soluzione e selezionare il modello Libreria di associazioni Android. Gli screenshot in questa procedura dettagliata usano Visual Studio, ma Visual Studio per Mac è molto simile. Assegnare alla soluzione il nome JarBinding:

Create JarBinding library project

Il modello include una cartella Jars in cui si aggiunge . JAR al progetto Libreria binding. Fare clic con il pulsante destro del mouse sulla cartella Jars e scegliere Aggiungi > elemento esistente:

Add existing item

Passare al file picasso-2.x.x.jar scaricato in precedenza, selezionarlo e fare clic su Aggiungi:

Select jar file and click Add

Verificare che il file picasso-2.x.x.jar sia stato aggiunto correttamente al progetto:

Jar added to project

Quando si crea un progetto di libreria Java Bindings, è necessario specificare se . JAR deve essere incorporato nella libreria binding o in un pacchetto separatamente. A tale scopo, specificare una delle azioni di compilazione seguenti:

  • EmbeddedJar : l'oggetto . Jar verrà incorporato nella libreria binding.

  • InputJar : l'oggetto . Il file JAR verrà mantenuto separato dalla libreria binding.

In genere, si usa l'azione di compilazione EmbeddedJar in modo che . Il file JAR viene inserito automaticamente nella libreria dei binding. Questa è l'opzione più semplice: bytecode Java in . JAR viene convertito in bytecode Dex ed è incorporato (insieme ai wrapper chiamabili gestiti) nel file APK. Se si desidera mantenere l'oggetto . JAR separato dalla libreria dei binding, è possibile usare l'opzione InputJar . È tuttavia necessario assicurarsi che . Il file JAR è disponibile nel dispositivo che esegue l'app.

Impostare l'azione di compilazione su EmbeddedJar:

Select EmbeddedJar build action

Aprire quindi le proprietà del progetto per configurare il framework di destinazione. Se . JAR usa qualsiasi API Android, impostare Il framework di destinazione sul livello API usato da . Jar si aspetta. In genere, lo sviluppatore di . Il file JAR indicherà il livello API (o i livelli) che l'oggetto . JAR è compatibile con. Per altre informazioni sull'impostazione framework di destinazione e i livelli di API Android in generale, vedere Informazioni sui livelli api Android.

Impostare il livello API di destinazione per la libreria binding (in questo esempio viene usato il livello API 19):

Target API level set to API 19

Compilare infine la libreria binding. Anche se potrebbero essere visualizzati alcuni messaggi di avviso, il progetto Libreria binding deve essere compilato correttamente e produrre un output .DLL nel percorso seguente: JarBinding/bin/Debug/JarBinding.dll

Uso della libreria binding

Per usare questa .DLL nell'app Xamarin.Android, eseguire le operazioni seguenti:

  1. Aggiungere un riferimento alla libreria binding.

  2. Effettuare chiamate a . JAR tramite i wrapper chiamabili gestiti.

Nei passaggi seguenti si creerà un'app minima che usa la libreria binding per scaricare e visualizzare un'immagine in un oggetto ImageView. Il "heavy lifting" viene eseguito dal codice che risiede in . File JAR.

Creare prima di tutto una nuova app Xamarin.Android che usa la libreria binding. Fare clic con il pulsante destro del mouse sulla soluzione e scegliere Aggiungi nuovo progetto, assegnare al nuovo progetto il nome BindingTest. Stiamo creando questa app nella stessa soluzione della libreria binding per semplificare questa procedura dettagliata; Tuttavia, l'app che usa la libreria binding potrebbe, invece, risiedere in una soluzione diversa:

Add new BindingTest project

Fare clic con il pulsante destro del mouse sul nodo Riferimenti del progetto BindingTest e scegliere Aggiungi riferimento:

Right Add Reference

Controllare il progetto JarBinding creato in precedenza e fare clic su OK:

Select JarBinding project

Aprire il nodo Riferimenti del progetto BindingTest e verificare che il riferimento JarBinding sia presente:

JarBinding appears under References

Modificare il layout BindingTest (Main.axml) in modo che abbia un singolo ImageViewelemento :

<?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>

Aggiungere l'istruzione seguente using a MainActivity.cs : in questo modo è possibile accedere facilmente ai metodi della classe basata su Picasso Java che risiede nella libreria Bindings:

using Com.Squareup.Picasso;

Modificare il OnCreate metodo in modo che usi la Picasso classe per caricare un'immagine da un URL e visualizzarla in 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);
    }
}

Compilare ed eseguire il progetto BindingTest . L'app verrà avviato e dopo un breve ritardo (a seconda delle condizioni di rete), deve scaricare e visualizzare un'immagine simile allo screenshot seguente:

Screenshot of BindingTest running

Complimenti. È stata associata correttamente una libreria Java. JAR e usato nell'app Xamarin.Android.

Riepilogo

In questa procedura dettagliata è stata creata una libreria binding per un oggetto di terze parti. Il file JAR, ha aggiunto la libreria binding a un'app di test minima ed è stata quindi eseguita l'app per verificare che il codice C# possa chiamare il codice Java che risiede in . File JAR.