Vytvoření vazby balíčku .AAR

Důležité

V současné době prošetřujeme využití vlastních vazeb na platformě Xamarin. Pokud chcete informovat budoucí úsilí o rozvoj, využijte tento průzkum .

Tento návod obsahuje podrobné pokyny k vytvoření knihovny vazeb Java Xamarin.Android z Androidu . Soubor AAR.

Přehled

Archiv Androidu (. Soubor AAR) je formát souboru pro knihovny Androidu. A . Soubor AAR je .ZIP archiv, který obsahuje následující:

  • Zkompilovaný kód Java
  • ID prostředků
  • Zdroje informací
  • Metadata (například deklarace aktivit, oprávnění)

V této příručce si projdeme základy vytváření knihovny vazeb pro jeden . Soubor AAR. Obecný přehled vazby knihoven Java (s příkladem základního kódu) najdete v tématu Vytvoření vazby knihovny Java.

Důležité

Projekt vazby může obsahovat pouze jeden . Soubor AAR. Pokud je AAR závisí na jiných . AAR, pak by tyto závislosti měly být obsaženy ve svém vlastním projektu vazby a pak odkazovány.

Názorný postup

Vytvoříme knihovnu Bindings Library pro příklad souboru archivu androidu, který byl vytvořen v Android Studiu, textanalyzer.aar. Tento. AAR obsahuje TextCounter třídu se statickými metodami, které spočítá počet samohlásek a souhlásek v řetězci. Kromě toho textanalyzer.aar obsahuje prostředek obrázku, který pomáhá zobrazit počty výsledků.

Pomocí následujícího postupu vytvoříme knihovnu vazeb z objektu . Soubor AAR:

  1. Vytvořte nový projekt knihovny Java Bindings Library.

  2. Přidejte jeden . Soubor AAR do projektu. Projekt vazby může obsahovat pouze jeden . AAR.

  3. Nastavte pro příslušnou akci sestavení . Soubor AAR.

  4. Zvolte cílovou architekturu, kterou má . AAR podporuje.

  5. Sestavte knihovnu vazeb.

Jakmile vytvoříme knihovnu Bindings, vytvoříme malou aplikaci pro Android, která uživatele vyzve k zadání textového řetězce, volání . Metody AAR k analýze textu načte obrázek z objektu . AAR a zobrazí výsledky spolu s obrázkem.

Ukázková aplikace bude mít přístup ke TextCounter třídě textanalyzer.aar:

package com.xamarin.textcounter;

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

Tato ukázková aplikace navíc načte a zobrazí prostředek obrázku, který je zabalený v souboru textanalyzer.aar:

Xamarin monkey image

Tento prostředek obrázku se nachází ve formátu res/drawable/monkey.png v souboru textanalyzer.aar.

Vytvoření knihovny vazeb

Než začnete s níže postupem, stáhněte si ukázkový soubor archivu textanalyzer.aar Android:

  1. Vytvořte nový projekt Knihovny vazeb, který začíná šablonou knihovny Vazeb pro Android. Můžete použít Visual Studio pro Mac nebo Visual Studio (snímky obrazovky níže ukazují Visual Studio, ale Visual Studio pro Mac je velmi podobné). Pojmenujte řešení AarBinding:

    Create AarBindings project

  2. Šablona obsahuje složku Jars , do které přidáte svůj soubor . AAR(y) k projektu knihovny Bindings. Klikněte pravým tlačítkem na složku Jars a vyberte Přidat > existující položku:

    Add existing item

  3. Přejděte na soubor textanalyzer.aar , který jste stáhli dříve, vyberte ho a klikněte na Přidat:

    Add textanalayzer.aar

  4. Ověřte, že se do projektu úspěšně přidal soubor textanalyzer.aar :

    The textanalyzer.aar file was added

  5. Nastavte akci sestavení pro textanalyzer.aar na AndroidLibraryhodnotu . V Visual Studio pro Mac klikněte pravým tlačítkem myši na textanalyzer.aar a nastavte akci sestavení. V sadě Visual Studio lze v podokně Vlastnosti nastavit akci sestavení):

    Setting the textanalyzer.aar build action to AndroidLibrary

  6. Otevřete vlastnosti projektu a nakonfigurujte cílovou architekturu. Pokud je AAR používá všechna rozhraní API pro Android, nastavte cílovou architekturu na úroveň rozhraní API, kterou má . AAR očekává. (Další informace o nastavení cílové architektury a úrovních rozhraní ANDROID API obecně najdete v tématu Principy úrovní rozhraní ANDROID API.)

    Nastavte cílovou úroveň rozhraní API pro knihovnu vazeb. V tomto příkladu můžeme používat nejnovější úroveň rozhraní API platformy (úroveň 23 rozhraní API), protože náš textanalyzer nemá závislost na rozhraních API androidu:

    Setting the target level to API 23

  7. Sestavte knihovnu vazeb. Projekt knihovny vazeb by se měl úspěšně sestavit a vytvořit výstupní .DLL v následujícím umístění: AarBinding/ bin/Debug/AarBinding.dll

Použití knihovny vazeb

Pokud chcete tuto .DLL používat v aplikaci Xamarin.Android, musíte nejprve přidat odkaz na knihovnu Vazeb. Použijte následující postup:

  1. Tuto aplikaci vytváříme ve stejném řešení jako knihovna vazeb, aby se tento názorný postup zjednodušil. (Aplikace, která využívá knihovnu Vazeb, se může také nacházet v jiném řešení.) Vytvořte novou aplikaci Xamarin.Android: Klikněte pravým tlačítkem na Řešení a vyberte Přidat nový projekt. Pojmenujte nový projekt BindingTest:

    Create new BindingTest project

  2. Klikněte pravým tlačítkem myši na uzel Odkazy projektu BindingTest a vyberte Přidat odkaz...:

    Click Add Reference

  3. Vyberte projekt AarBinding vytvořený dříve a klikněte na OK:

    Check the AAR binding project

  4. Otevřete uzel Reference projektu BindingTest a ověřte, že existuje odkaz AarBinding:

    AarBinding is listed under References

Pokud chcete zobrazit obsah projektu Knihovna vazeb, můžete na něj poklikáním otevřít v prohlížeči objektů. Můžete zobrazit mapovaný obsah Com.Xamarin.Textcounter oboru názvů (namapovaný z balíčku Java com.xamarin.textanalyzezr ) a můžete zobrazit členy TextCounter třídy:

Viewing the Object Browser

Na výše uvedeném snímku obrazovky jsou zvýrazněné dvě TextAnalyzer metody, které bude ukázková aplikace volat: NumConsonants (která zabalí podkladovou metodu Java numConsonants ) a NumVowels (která zabalí podkladovou metodu Java numVowels ).

Přístup. Typy AAR

Po přidání odkazu na aplikaci, která odkazuje na knihovnu vazeb, můžete přistupovat k typům Javy v souboru . AAR tak, jak byste přistupovali k typům jazyka C# (díky obálkům jazyka C#). Kód aplikace jazyka C# může volat TextAnalyzer metody, jak je znázorněno v tomto příkladu:

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

V předchozím příkladu voláme statické metody ve TextCounter třídě. Můžete však také vytvořit instance tříd a volání metod instance. Například pokud vaše . AAR zabalí třídu, Employee která má metodu buildFullNameinstance , můžete vytvořit instanci MyClass a použít ji, jak je vidět zde:

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

Následující postup přidá do aplikace kód, aby uživatele vyzve k zadání textu, použije TextCounter k analýze textu a pak zobrazí výsledky.

Nahraďte rozložení BindingTest (Main.axml) následujícím kódem XML. Toto rozložení obsahuje EditText textové zadání a dvě tlačítka pro inicializování samohlásek a souhlásek:

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

Obsah MainActivity.cs nahraďte následujícím kódem. Jak je vidět v tomto příkladu, obslužné rutiny událostí tlačítka volají zabalené TextCounter metody, které se nacházejí v objektu . AAR a použití informačních toastů k zobrazení výsledků using Všimněte si příkazu pro obor názvů vázané knihovny (v tomto případě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 ();
            };

        }
    }
}

Zkompilujte a spusťte projekt BindingTest . Aplikace se spustí a zobrazí snímek obrazovky vlevo ( EditText inicializuje se pomocí nějakého textu, ale můžete na něj klepnout a změnit ho). Když klepnete na COUNT VOWELS, zobrazí informační zpráva počet samohlásek, jak je znázorněno na pravé straně:

Screenshots from running BindingTest

Zkuste klepnout na tlačítko POČET CONSONANTS . Můžete také upravit řádek textu a znovu klepnout na tato tlačítka a otestovat tak různé samohlásky a souhlásky.

Přístup. Prostředky AAR

Nástroje Xamarin sloučí data jazyka R z objektu . AAR do třídy prostředků vaší aplikace V důsledku toho můžete získat přístup . Zdroje AAR z vašeho rozložení (a z kódu za sebou) stejným způsobem jako k prostředkům, které jsou v cestě Zdroje projektu.

Pokud chcete získat přístup k prostředku obrázku, použijte název Resource.Drawable pro image zabalenou uvnitř souboru . AAR. Můžete například odkazovat na image.png v souboru . Soubor AAR pomocí:@drawable/image

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

Můžete také přistupovat k rozložením prostředků, která se nacházejí v objektu . AAR. K tomu použijete název Resource.Layout pro rozložení zabalené uvnitř souboru . AAR. Příklad:

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

Příklad textanalyzer.aar obsahuje soubor obrázku, který se nachází v umístění res/drawable/monkey.png. Pojďme získat přístup k tomuto prostředku image a použít ho v naší ukázkové aplikaci:

Upravte rozložení BindingTest (Main.axml) a přidejte ImageView na konec kontejneruLinearLayout. Zobrazí ImageView se obrázek nalezený v @drawable/opice; tento obrázek se načte z oddílu prostředků textanalyzer.aar:

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

</LinearLayout>

Zkompilujte a spusťte projekt BindingTest . Aplikace se spustí a zobrazí snímek obrazovky vlevo – když klepnete na POČET CONSONANTS, zobrazí se výsledky, jak je znázorněno vpravo:

BindingTest displaying consonant count

Gratulujeme! Úspěšně jste vázali knihovnu Java . AAR!

Shrnutí

V tomto názorném postupu jsme vytvořili knihovnu vazeb pro objekt . Soubor AAR, přidali knihovnu Bindings do minimální testovací aplikace a spustili aplikaci, abyste ověřili, že náš kód jazyka C# může volat kód Java umístěný v jazyce Java. Soubor AAR. Kromě toho jsme aplikaci rozšířili tak, aby měla přístup k prostředku obrázku, který se nachází v objektu . Soubor AAR.