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:
Creare un nuovo progetto libreria di binding Java.
Aggiungere un singolo oggetto . File AAR nel progetto. Un progetto di associazione può contenere solo un singolo oggetto . AAR.
Impostare l'azione di compilazione appropriata per . File AAR.
Scegliere un framework di destinazione che l'oggetto . Supporto di AAR.
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:
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:
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:
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:
Passare al file textanalyzer.aar scaricato in precedenza, selezionarlo e fare clic su Aggiungi:
Verificare che il file textanalyzer.aar sia stato aggiunto correttamente al progetto:
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à :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:
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:
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:
Fare clic con il pulsante destro del mouse sul nodo Riferimenti del progetto BindingTest e scegliere Aggiungi riferimento:
Selezionare il progetto AarBinding creato in precedenza e fare clic su OK:
Aprire il nodo Riferimenti del progetto BindingTest per verificare che il riferimento AarBinding sia presente:
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:
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 numConsonants
numVowels
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 buildFullName
di 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:
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:
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.