Liaison d’un fichier .JAR

Important

Nous étudions actuellement l’utilisation des liaisons personnalisées sur la plateforme Xamarin. S’il vous plaît prendre cette enquête pour informer les efforts de développement futurs.

Cette procédure pas à pas fournit des instructions pas à pas pour créer une bibliothèque de liaisons Java Xamarin.Android à partir d’un android . Fichier JAR.

Vue d’ensemble

La communauté Android propose de nombreuses bibliothèques Java que vous pouvez utiliser dans votre application. Ces bibliothèques Java sont souvent empaquetées dans . Format JAR (Java Archive), mais vous pouvez empaqueter un . Jar dans une bibliothèque de liaisons Java afin que ses fonctionnalités soient disponibles pour les applications Xamarin.Android. L’objectif de la bibliothèque de liaisons Java est de créer les API dans le . Fichier JAR disponible pour le code C# via des wrappers de code générés automatiquement.

Les outils Xamarin peuvent générer une bibliothèque de liaisons à partir d’une ou plusieurs entrées . Fichiers JAR. La bibliothèque de liaisons (assembly .DLL) contient les éléments suivants :

  • Contenu de l’original. Fichier(s) JAR.

  • Les wrappers MCW (Managed Callable Wrappers), qui sont des types C# qui encapsulent les types Java correspondants dans le . Fichier(s) JAR.

Le code MCW généré utilise JNI (Java Native Interface) pour transférer vos appels d’API au sous-jacent. Fichier JAR. Vous pouvez créer des bibliothèques de liaisons pour n’importe quel . Fichier JAR qui était initialement destiné à être utilisé avec Android (notez que les outils Xamarin ne prennent actuellement pas en charge la liaison de bibliothèques Java non-Android). Vous pouvez également choisir de générer la bibliothèque de liaisons sans inclure le contenu de . Fichier JAR afin que la DLL ait une dépendance sur le . JAR au moment de l’exécution.

Dans ce guide, nous allons parcourir les principes de base de la création d’une bibliothèque de liaisons pour un seul . Fichier JAR. Nous allons illustrer avec un exemple où tout va bien, c’est-à-dire où aucune personnalisation ou débogage de liaisons n’est nécessaire. La création de liaisons à l’aide de métadonnées offre un exemple de scénario plus avancé où le processus de liaison n’est pas entièrement automatique et où une certaine quantité d’intervention manuelle est nécessaire. Pour obtenir une vue d’ensemble de la liaison de bibliothèque Java en général (avec un exemple de code de base), consultez Liaison d’une bibliothèque Java.

Procédure pas à pas

Dans la procédure pas à pas suivante, nous allons créer une bibliothèque de liaisons pour Picasso, un android populaire . JAR qui fournit des fonctionnalités de chargement et de mise en cache d’images. Nous allons utiliser les étapes suivantes pour lier picasso-2.x.x.jar afin de créer un assembly .NET que nous pouvons utiliser dans un projet Xamarin.Android :

  1. Créez un projet de bibliothèque de liaisons Java.

  2. Ajoutez le . Fichier JAR dans le projet.

  3. Définissez l’action de génération appropriée pour . Fichier JAR.

  4. Choisissez une infrastructure cible que le . Jar prend en charge.

  5. Générez la bibliothèque de liaisons.

Une fois que nous aurons créé la bibliothèque de liaisons, nous développerons une petite application Android qui démontre notre capacité à appeler des API dans la bibliothèque de liaisons. Dans cet exemple, nous voulons accéder aux méthodes de picasso-2.x.x.jar :

package com.squareup.picasso

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

Après avoir généré une bibliothèque de liaisons pour picasso-2.x.x.jar, nous pouvons appeler ces méthodes à partir de C#. Par exemple :

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

Création de la bibliothèque de liaisons

Avant de commencer à suivre les étapes ci-dessous, téléchargez picasso-2.x.x.jar.

Tout d’abord, créez un projet bibliothèque de liaisons. Dans Visual Studio pour Mac ou Visual Studio, créez une solution et sélectionnez le modèle Bibliothèque de liaisons Android. (Les captures d’écran de cette procédure pas à pas utilisent Visual Studio, mais Visual Studio pour Mac est très similaire.) Nommez la solution JarBinding :

Créer un projet de bibliothèque JarBinding

Le modèle inclut un dossier Jars dans lequel vous ajoutez votre . Jar(s) vers le projet Bibliothèque de liaisons. Cliquez avec le bouton droit sur le dossier Jars et sélectionnez Ajouter un > élément existant :

Ajouter un élément existant

Accédez au fichier picasso-2.x.x.jar téléchargé précédemment, sélectionnez-le, puis cliquez sur Ajouter :

Sélectionnez fichier jar, puis cliquez sur Ajouter.

Vérifiez que le fichier picasso-2.x.x.jar a été correctement ajouté au projet :

Jar ajouté au projet

Lorsque vous créez un projet de bibliothèque de liaisons Java, vous devez spécifier si le . Jar doit être incorporé dans la bibliothèque de liaisons ou empaqueté séparément. Pour ce faire, vous devez spécifier l’une des actions de génération suivantes :

  • EmbeddedJar : . Jar sera incorporé dans la bibliothèque de liaisons.

  • InputJar : . Le fichier JAR sera séparé de la bibliothèque de liaisons.

En règle générale, vous utilisez l’action de génération EmbeddedJar afin que . Jar est automatiquement empaqueté dans la bibliothèque de liaisons. Il s’agit de l’option la plus simple : bytecode Java dans . Le fichier JAR est converti en bytecode Dex et est incorporé (avec les wrappers callables managés) dans votre APK. Si vous souhaitez conserver le . Jar distinct de la bibliothèque de liaisons, vous pouvez utiliser l’option InputJar ; Toutefois, vous devez vous assurer que . Le fichier JAR est disponible sur l’appareil qui exécute votre application.

Définissez l’action de génération sur EmbeddedJar :

Sélectionner l’action de build EmbeddedJar

Ensuite, ouvrez les propriétés du projet pour configurer l’infrastructure cible. Si . JAR utilise toutes les API Android. Définissez l’infrastructure cible au niveau de l’API que le . Jar s’attend. En règle générale, le développeur de . Le fichier JAR indique le niveau d’API (ou les niveaux) que le . JAR est compatible avec . (Pour plus d’informations sur le paramètre Framework cible et les niveaux d’API Android en général, consultez Présentation des niveaux d’API Android.)

Définissez le niveau d’API cible pour votre bibliothèque de liaisons (dans cet exemple, nous utilisons le niveau d’API 19) :

Niveau d’API cible défini sur API 19

Enfin, générez la bibliothèque de liaisons. Bien que certains messages d’avertissement puissent s’afficher, le projet Bibliothèque de liaisons doit être généré correctement et produire une .DLL de sortie à l’emplacement suivant : JarBinding/bin/Debug/JarBinding.dll

Utilisation de la bibliothèque de liaisons

Pour utiliser cette .DLL dans votre application Xamarin.Android, procédez comme suit :

  1. Ajoutez une référence à la bibliothèque de liaisons.

  2. Effectuez des appels dans le . JAR via les wrappers pouvant être appelé gérés.

Dans les étapes suivantes, nous allons créer une application minimale qui utilise la bibliothèque de liaisons pour télécharger et afficher une image dans un ImageView; le « heavy lift » est effectué par le code qui réside dans le . Fichier JAR.

Tout d’abord, créez une application Xamarin.Android qui consomme la bibliothèque de liaisons. Cliquez avec le bouton droit sur la solution et sélectionnez Ajouter un nouveau projet ; nommez le nouveau projet BindingTest. Nous créons cette application dans la même solution que la bibliothèque de liaisons afin de simplifier cette procédure pas à pas . Toutefois, l’application qui consomme la bibliothèque de liaisons peut résider dans une autre solution :

Ajouter un nouveau projet BindingTest

Cliquez avec le bouton droit sur le nœud Références du projet BindingTest et sélectionnez Ajouter une référence... :

Ajouter une référence à droite

Vérifiez le projet JarBinding créé précédemment et cliquez sur OK :

Sélectionner le projet JarBinding

Ouvrez le nœud Références du projet BindingTest et vérifiez que la référence JarBinding est présente :

JarBinding s’affiche sous Références

Modifiez la disposition BindingTest (Main.axml) afin qu’elle ait un seul 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>

Ajoutez l’instruction suivante using à MainActivity.cs , ce qui permet d’accéder facilement aux méthodes de la classe Java Picasso qui réside dans la bibliothèque Bindings :

using Com.Squareup.Picasso;

Modifiez la OnCreate méthode afin qu’elle utilise la Picasso classe pour charger une image à partir d’une URL et l’afficher dans :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);
    }
}

Compilez et exécutez le projet BindingTest . L’application démarre et, après un court délai (en fonction des conditions réseau), elle doit télécharger et afficher une image similaire à la capture d’écran suivante :

Capture d’écran de BindingTest en cours d’exécution

Félicitations ! Vous avez correctement lié une bibliothèque Java . JAR et utilisé dans votre application Xamarin.Android.

Résumé

Dans cette procédure pas à pas, nous avons créé une bibliothèque de liaisons pour un tiers. Fichier JAR, ajout de la bibliothèque de liaisons à une application de test minimale, puis exécuté l’application pour vérifier que notre code C# peut appeler du code Java résidant dans le . Fichier JAR.