Associazione di un file AAR

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 AAR.

Panoramica

Archivio Android (. Il file AAR) è il formato di file per le librerie Android. Un. Il file AAR è un archivio .ZIP che contiene quanto segue:

  • Codice Java compilato
  • ID risorsa
  • Risorse
  • Metadati (ad esempio, dichiarazioni di attività, autorizzazioni)

In questa guida verranno descritti i concetti di base relativi alla creazione di una libreria di binding per un singolo oggetto . File AAR. Per una panoramica dell'associazione di librerie Java in generale (con un esempio di codice di base), vedere Associazione di una libreria Java.

Importante

Un progetto di associazione può includere solo un oggetto . File AAR. Se . AAR dipende da un altro oggetto . AAR, quindi queste dipendenze devono essere contenute nel proprio progetto di associazione e quindi a cui si fa riferimento.

scenario

Verrà creata una libreria binding per un file di archivio Android di esempio creato in Android Studio, textanalyzer.aar. Questo. AAR contiene una TextCounter classe con metodi statici che contano il numero di vocali e consonanti in una stringa. Inoltre, textanalyzer.aar contiene una risorsa immagine per visualizzare i risultati del conteggio.

Verranno usati i passaggi seguenti per creare una libreria binding da . File AAR:

  1. Creare un nuovo progetto libreria di binding Java.

  2. Aggiungere un singolo oggetto . File AAR nel progetto. Un progetto di associazione può contenere solo un singolo oggetto . AAR.

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

  4. Scegliere un framework di destinazione che l'oggetto . Supporto di AAR.

  5. Compilare la libreria binding.

Dopo aver creato la libreria binding, si svilupperà una piccola app Android che richiede all'utente una stringa di testo, chiama . I metodi AAR per analizzare il testo recuperano l'immagine dall'oggetto . AAR e visualizza i risultati insieme all'immagine.

L'app di esempio accederà alla TextCounter classe textanalyzer.aar:

package com.xamarin.textcounter;

public class TextCounter
{
    ...
    public static int numVowels (String text) { ... };
    ...
    public static int numConsonants (String text) { ... };
    ...
}

Inoltre, questa app di esempio recupererà e visualizzerà una risorsa immagine inserita in un pacchetto in textanalyzer.aar:

Immagine di scimmia Xamarin

Questa risorsa immagine risiede in res/drawable/monkey.png in textanalyzer.aar.

Creazione della libreria binding

Prima di iniziare con i passaggi seguenti, scaricare il file di archivio di esempio textanalyzer.aar Android:

  1. Creare un nuovo progetto libreria binding a partire dal modello libreria di associazioni Android. È possibile usare Visual Studio per Mac o Visual Studio (le schermate seguenti mostrano Visual Studio, ma Visual Studio per Mac è molto simile). Assegnare alla soluzione il nome AarBinding:

    Creare un progetto AarBindings

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

    Aggiungere un elemento esistente

  3. Passare al file textanalyzer.aar scaricato in precedenza, selezionarlo e fare clic su Aggiungi:

    Aggiungere textanalayzer.aar

  4. Verificare che il file textanalyzer.aar sia stato aggiunto correttamente al progetto:

    È stato aggiunto il file textanalyzer.aar

  5. Impostare l'azione di compilazione per textanalyzer.aar su AndroidLibrary. In Visual Studio per Mac fare clic con il pulsante destro del mouse su textanalyzer.aar per impostare l'azione di compilazione. In Visual Studio l'azione di compilazione può essere impostata nel riquadro Proprietà :

    Impostazione dell'azione di compilazione textanalyzer.aar su AndroidLibrary

  6. Aprire le proprietà del progetto per configurare il framework di destinazione. Se . AAR usa qualsiasi API Android, impostare Il framework di destinazione sul livello API usato da . AAR si aspetta. 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 è possibile usare il livello API della piattaforma più recente (livello API 23) perché textanalyzer non ha una dipendenza dalle API Android:

    Impostazione del livello di destinazione su API 23

  7. Compilare la libreria binding. Il progetto Libreria binding deve essere compilato correttamente e produrre un output .DLL nel percorso seguente: AarBinding/bin/Debug/AarBinding.dll

Uso della libreria binding

Per usare questa .DLL nell'app Xamarin.Android, è necessario innanzitutto aggiungere un riferimento alla libreria binding. Eseguire la procedura descritta di seguito:

  1. Questa app viene creata nella stessa soluzione della libreria binding per semplificare questa procedura dettagliata. L'app che utilizza la libreria binding può risiedere anche in una soluzione diversa. Creare una nuova app Xamarin.Android: fare clic con il pulsante destro del mouse sulla soluzione e scegliere Aggiungi nuovo progetto. Assegnare al nuovo progetto il nome BindingTest:

    Creare un nuovo progetto BindingTest

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

    Fare clic su Aggiungi riferimento

  3. Selezionare il progetto AarBinding creato in precedenza e fare clic su OK:

    Controllare il progetto di associazione AAR

  4. Aprire il nodo Riferimenti del progetto BindingTest per verificare che il riferimento AarBinding sia presente:

    AarBinding è elencato in Riferimenti

Se si desidera visualizzare il contenuto del progetto Libreria di binding, è possibile fare doppio clic sul riferimento per aprirlo nel Visualizzatore oggetti. È possibile visualizzare il contenuto mappato dello Com.Xamarin.Textcounter spazio dei nomi (mappato dal pacchetto Java com.xamarin.textanalyzezr ) ed è possibile visualizzare i membri della TextCounter classe:

Visualizzazione del Visualizzatore oggetti

Lo screenshot precedente evidenzia i due TextAnalyzer metodi che l'app di esempio chiamerà: NumConsonants (che esegue il wrapping del metodo Java sottostante) e NumVowels (che esegue il wrapping del metodo Java numConsonantsnumVowels sottostante).

Accedere. Tipi AAR

Dopo aver aggiunto un riferimento all'app che punta alla libreria di binding, è possibile accedere ai tipi Java in . AAR come si accede ai tipi C# (grazie ai wrapper C#). Il codice dell'app C# può chiamare TextAnalyzer metodi come illustrato in questo esempio:

using Com.Xamarin.Textcounter;
...
int numVowels = TextCounter.NumVowels (myText);
int numConsonants = TextCounter.NumConsonants (myText);

Nell'esempio precedente vengono chiamati metodi statici nella TextCounter classe . Tuttavia, è anche possibile creare un'istanza di classi e chiamare metodi di istanza. Ad esempio, se . AAR esegue il wrapping di una classe denominata Employee con il metodo buildFullNamedi istanza , è possibile crearne MyClass un'istanza e usarla come illustrato di seguito:

var employee = new Com.MyCompany.MyProject.Employee();
var name = employee.BuildFullName ();

I passaggi seguenti aggiungono codice all'app in modo da richiedere all'utente il testo, usa TextCounter per analizzare il testo e quindi visualizzare i risultati.

Sostituire il layout BindingTest (Main.axml) con il codice XML seguente. Questo layout include un oggetto per l'input EditText di testo e due pulsanti per l'avvio di vocali e conteggi consonanti:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation             ="vertical"
    android:layout_width            ="fill_parent"
    android:layout_height           ="fill_parent" >
    <TextView
        android:text                ="Text to analyze:"
        android:textSize            ="24dp"
        android:layout_marginTop    ="30dp"
        android:layout_gravity      ="center"
        android:layout_width        ="wrap_content"
        android:layout_height       ="wrap_content" />
    <EditText
        android:id                  ="@+id/input"
        android:text                ="I can use my .AAR file from C#!"
        android:layout_marginTop    ="10dp"
        android:layout_gravity      ="center"
        android:layout_width        ="300dp"
        android:layout_height       ="wrap_content"/>
    <Button
        android:id                  ="@+id/vowels"
        android:layout_marginTop    ="30dp"
        android:layout_width        ="240dp"
        android:layout_height       ="wrap_content"
        android:layout_gravity      ="center"
        android:text                ="Count Vowels" />
    <Button
        android:id                  ="@+id/consonants"
        android:layout_width        ="240dp"
        android:layout_height       ="wrap_content"
        android:layout_gravity      ="center"
        android:text                ="Count Consonants" />
</LinearLayout>

Sostituire il contenuto di MainActivity.cs con il codice seguente. Come illustrato in questo esempio, i gestori eventi button chiamano i metodi di cui è stato TextCounter eseguito il wrapping che risiedono in . AAR e usa avvisi popup per visualizzare i risultati. Si noti l'istruzione using per lo spazio dei nomi della libreria associata (in questo caso , Com.Xamarin.Textcounter):

using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using Android.Views.InputMethods;
using Com.Xamarin.Textcounter;

namespace BindingTest
{
    [Activity(Label = "BindingTest", MainLauncher = true, Icon = "@drawable/icon")]
    public class MainActivity : Activity
    {
        InputMethodManager imm;

        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);

            SetContentView(Resource.Layout.Main);

            imm = (InputMethodManager)GetSystemService(Context.InputMethodService);

            var vowelsBtn = FindViewById<Button>(Resource.Id.vowels);
            var consonBtn = FindViewById<Button>(Resource.Id.consonants);
            var edittext = FindViewById<EditText>(Resource.Id.input);
            edittext.InputType = Android.Text.InputTypes.TextVariationPassword;

            edittext.KeyPress += (sender, e) =>
            {
                imm.HideSoftInputFromWindow(edittext.WindowToken, HideSoftInputFlags.NotAlways);
                e.Handled = true;
            };

            vowelsBtn.Click += (sender, e) =>
            {
                int count = TextCounter.NumVowels(edittext.Text);
                string msg = count + " vowels found.";
                Toast.MakeText (this, msg, ToastLength.Short).Show ();
            };

            consonBtn.Click += (sender, e) =>
            {
                int count = TextCounter.NumConsonants(edittext.Text);
                string msg = count + " consonants found.";
                Toast.MakeText (this, msg, ToastLength.Short).Show ();
            };

        }
    }
}

Compilare ed eseguire il progetto BindingTest . L'app inizierà e presenterà lo screenshot a sinistra (viene EditText inizializzato con un testo, ma è possibile toccarlo per modificarlo). Quando si tocca COUNT VOWELS, un avviso popup visualizza il numero di vocali come mostrato a destra:

Screenshot dell'esecuzione di BindingTest

Provare a toccare il pulsante COUNT CONSONANTS . Inoltre, è possibile modificare la riga di testo e toccare di nuovo questi pulsanti per testare i diversi conteggi vocali e consonanti.

Accedere. Risorse AAR

Gli strumenti di Xamarin unisce i dati R da . AAR nella classe Resource dell'app. Di conseguenza, è possibile accedere a . Risorse AAR dal layout (e dal code-behind) allo stesso modo in cui si accede alle risorse presenti nel percorso Risorse del progetto.

Per accedere a una risorsa immagine, usare il nome Resource.Drawable per l'immagine compressa all'interno di . AAR. Ad esempio, è possibile fare riferimento image.png in . File AAR tramite @drawable/image:

<ImageView android:src="@drawable/image" ... />

È anche possibile accedere ai layout delle risorse che risiedono in . AAR. A tale scopo, usare il nome Resource.Layout per il layout inserito nel pacchetto all'interno di . AAR. Ad esempio:

var a = new ArrayAdapter<string>(this, Resource.Layout.row_layout, ...);

L'esempio textanalyzer.aar contiene un file di immagine che risiede in res/drawable/monkey.png. Accedere a questa risorsa immagine e usarla nell'app di esempio:

Modificare il layout BindingTest (Main.axml) e aggiungere un elemento ImageView alla fine del LinearLayout contenitore. Verrà ImageView visualizzata l'immagine trovata in @drawable/scimmia. Questa immagine verrà caricata dalla sezione della risorsa di textanalyzer.aar:

    ...
    <ImageView
        android:src                 ="@drawable/monkey"
        android:layout_marginTop    ="40dp"
        android:layout_width        ="200dp"
        android:layout_height       ="200dp"
        android:layout_gravity      ="center" />

</LinearLayout>

Compilare ed eseguire il progetto BindingTest . L'app inizierà e presenterà lo screenshot a sinistra: quando si tocca COUNT CONSONANTS, i risultati vengono visualizzati come mostrato a destra:

BindingTest che visualizza il conteggio consonante

Complimenti. È stata associata correttamente una libreria Java. AAR!

Riepilogo

In questa procedura dettagliata è stata creata una libreria binding per un oggetto . Il file AAR ha aggiunto la libreria binding a un'app di test minima ed è stata eseguita l'app per verificare che il codice C# possa chiamare il codice Java che risiede in . File AAR. Inoltre, l'app è stata estesa per accedere e visualizzare una risorsa immagine che risiede in . File AAR.