Tworzenie powiązań plików AAR
Ważne
Obecnie badamy użycie powiązań niestandardowych na platformie Xamarin. Weź udział w tej ankiecie , aby poinformować o przyszłych wysiłkach programistycznych.
Ten przewodnik zawiera instrukcje krok po kroku dotyczące tworzenia biblioteki powiązań języka Java platformy Xamarin.Android z poziomu systemu Android. Plik AAR.
Omówienie
Archiwum systemu Android (. Plik AAR) to format pliku dla bibliotek systemu Android. An . Plik AAR to archiwum .ZIP zawierające następujące elementy:
- Skompilowany kod Java
- Identyfikatory zasobów
- Zasoby
- Metadane (na przykład deklaracje aktywności, uprawnienia)
W tym przewodniku omówimy podstawy tworzenia biblioteki powiązań dla pojedynczego elementu . Plik AAR. Aby zapoznać się z ogólnym omówieniem powiązania biblioteki Języka Java (z podstawowym przykładem kodu), zobacz Wiązanie biblioteki Języka Java.
Ważne
Projekt powiązania może zawierać tylko jeden element . Plik AAR. Jeśli element . Usługa AAR zależy od innego . AAR, a następnie te zależności powinny być zawarte we własnym projekcie powiązania, a następnie odwołać się do nich.
Przewodnik
Utworzymy bibliotekę powiązań dla przykładowego pliku archiwum systemu Android utworzonego w programie Android Studio textanalyzer.aar. Tę. Usługa AAR zawiera klasę TextCounter
ze statycznymi metodami, które zliczają liczby vowels i spółgłoski w ciągu. Ponadto plik textanalyzer.aar zawiera zasób obrazu, aby ułatwić wyświetlanie wyników zliczania.
Użyjemy poniższych kroków, aby utworzyć bibliotekę powiązań na podstawie elementu . Plik AAR:
Utwórz nowy projekt Biblioteki powiązań Języka Java.
Dodaj pojedynczy element . Plik AAR w projekcie. Projekt powiązania może zawierać tylko jeden element . AAR.
Ustaw odpowiednią akcję kompilacji dla elementu . Plik AAR.
Wybierz platformę docelową, która ma wartość . Usługa AAR obsługuje.
Skompiluj bibliotekę powiązań.
Po utworzeniu biblioteki powiązań utworzymy małą aplikację dla systemu Android, która monituje użytkownika o ciąg tekstowy, wywołuje metodę . Metody AAR do analizowania tekstu pobiera obraz z obiektu . AAR i wyświetla wyniki wraz z obrazem.
Przykładowa aplikacja będzie uzyskiwać dostęp do TextCounter
klasy textanalyzer.aar:
package com.xamarin.textcounter;
public class TextCounter
{
...
public static int numVowels (String text) { ... };
...
public static int numConsonants (String text) { ... };
...
}
Ponadto ta przykładowa aplikacja pobierze i wyświetli zasób obrazu spakowany w pliku textanalyzer.aar:
Ten zasób obrazu znajduje się w lokalizacji res/drawable/monkey.png w pliku textanalyzer.aar.
Tworzenie biblioteki powiązań
Przed rozpoczęciem pracy z poniższymi krokami pobierz przykładowy plik archiwum textanalyzer.aar systemu Android:
Utwórz nowy projekt Biblioteka powiązań rozpoczynający się od szablonu Biblioteka powiązań systemu Android. Możesz użyć Visual Studio dla komputerów Mac lub Visual Studio (zrzuty ekranu poniżej pokazują program Visual Studio, ale Visual Studio dla komputerów Mac jest bardzo podobny). Nadaj rozwiązaniu nazwę AarBinding:
Szablon zawiera folder Jars , w którym dodajesz plik . AAR(s) do projektu Bindings Library. Kliknij prawym przyciskiem myszy folder Jars i wybierz polecenie Dodaj > istniejący element:
Przejdź do pobranego wcześniej pliku textanalyzer.aar , zaznacz go i kliknij przycisk Dodaj:
Sprawdź, czy plik textanalyzer.aar został pomyślnie dodany do projektu:
Ustaw akcję kompilacji dla właściwości textanalyzer.aar na
AndroidLibrary
wartość . W Visual Studio dla komputerów Mac kliknij prawym przyciskiem myszy plik textanalyzer.aar, aby ustawić akcję kompilacji. W programie Visual Studio akcja kompilacji można ustawić w okienku Właściwości :Otwórz projekt Właściwości, aby skonfigurować platformę docelową. Jeśli element . Usługa AAR używa dowolnych interfejsów API systemu Android, ustaw platformę docelową na poziom interfejsu API, który ma wartość . Oczekuje usługi AAR. (Aby uzyskać więcej informacji na temat ustawienia platformy docelowej i poziomów interfejsu API systemu Android, zobacz Opis poziomów interfejsu API systemu Android).
Ustaw docelowy poziom interfejsu API dla biblioteki powiązań. W tym przykładzie możemy korzystać z najnowszego poziomu interfejsu API platformy (poziom 23 interfejsu API), ponieważ nasz textanalyzer nie ma zależności od interfejsów API systemu Android:
Skompiluj bibliotekę powiązań. Projekt Biblioteka powiązań powinien zostać pomyślnie skompilowany i wygenerować dane wyjściowe .DLL w następującej lokalizacji: AarBinding/bin/Debug/AarBinding.dll
Korzystanie z biblioteki powiązań
Aby korzystać z tej .DLL w aplikacji platformy Xamarin.Android, należy najpierw dodać odwołanie do biblioteki powiązań. Wykonaj następujące kroki:
Tworzymy tę aplikację w tym samym rozwiązaniu co biblioteka powiązań, aby uprościć ten przewodnik. (Aplikacja, która korzysta z biblioteki powiązań, może również znajdować się w innym rozwiązaniu). Utwórz nową aplikację platformy Xamarin.Android: kliknij prawym przyciskiem myszy pozycję Rozwiązanie i wybierz pozycję Dodaj nowy projekt. Nadaj nowej nazwie BindingTest nowego projektu:
Kliknij prawym przyciskiem myszy węzeł Odwołania w projekcie BindingTest i wybierz polecenie Dodaj odwołanie...:
Wybierz utworzony wcześniej projekt AarBinding i kliknij przycisk OK:
Otwórz węzeł Odwołania projektu BindingTest, aby sprawdzić, czy odwołanie AarBinding jest obecne:
Jeśli chcesz wyświetlić zawartość projektu Biblioteka powiązań, możesz kliknąć dwukrotnie odwołanie, aby otworzyć je w przeglądarce obiektów. Możesz zobaczyć zamapowany zawartość Com.Xamarin.Textcounter
przestrzeni nazw (zamapowany z pakietu Java com.xamarin.textanalyzezr
) i wyświetlić składowe TextCounter
klasy:
Powyższy zrzut ekranu przedstawia dwie TextAnalyzer
metody wywoływane przez przykładową aplikację: NumConsonants
(która opakowuje podstawową metodę Java numConsonants
) i NumVowels
(która opakowuje podstawową metodę Java numVowels
).
Uzyskiwanie dostępu do. Typy AAR
Po dodaniu odwołania do aplikacji wskazującej bibliotekę powiązań można uzyskać dostęp do typów języka Java w pliku . AAR jak można uzyskać dostęp do typów języka C# (dzięki otoce języka C#). Kod aplikacji języka C# może wywoływać TextAnalyzer
metody, jak pokazano w tym przykładzie:
using Com.Xamarin.Textcounter;
...
int numVowels = TextCounter.NumVowels (myText);
int numConsonants = TextCounter.NumConsonants (myText);
W powyższym przykładzie wywołujemy metody statyczne w TextCounter
klasie . Można jednak również utworzyć wystąpienia klas i wywołać metody wystąpienia. Jeśli na przykład wartość . Usługa AAR opakowuje klasę o nazwie Employee
, która ma metodę buildFullName
wystąpienia , można utworzyć wystąpienie MyClass
i użyć jej, jak pokazano tutaj:
var employee = new Com.MyCompany.MyProject.Employee();
var name = employee.BuildFullName ();
Poniższe kroki dodają kod do aplikacji, aby wyświetlić użytkownikowi monit o tekst, używa TextCounter
ich do analizowania tekstu, a następnie wyświetla wyniki.
Zastąp układ BindingTest (Main.axml) następującym kodem XML. Ten układ zawiera kontrolkę EditText
dla wprowadzania tekstu i dwóch przycisków do inicjowania liczby głosów i wywłaszków:
<?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>
Zastąp zawartość MainActivity.cs następującym kodem. Jak pokazano w tym przykładzie, procedury obsługi zdarzeń przycisku wywołają opakowane TextCounter
metody znajdujące się w obiekcie . AAR i użyj wyskakujące wyskakujące metryki, aby wyświetlić wyniki. Zwróć uwagę na instrukcję using
przestrzeni nazw powiązanej biblioteki (w tym przypadku 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 ();
};
}
}
}
Skompiluj i uruchom projekt BindingTest . Aplikacja zostanie uruchomiona i będzie przedstawiać zrzut ekranu po lewej stronie ( EditText
element jest inicjowany za pomocą tekstu, ale możesz go nacisnąć, aby go zmienić). Po naciśnięciu pozycji COUNT VOWELS (LICZBA maszyn wirtualnych) wyskakujące wyskakujące liczby vowels jest wyświetlana po prawej stronie:
Spróbuj naciskać przycisk COUNT CONSONANTS (LICZNIKI ). Ponadto możesz zmodyfikować wiersz tekstu i nacisnąć te przyciski ponownie, aby przetestować różne liczby samogłosek i wywłaszczone.
Uzyskiwanie dostępu do. Zasoby usługi AAR
Narzędzie Xamarin scala dane języka R z klasy . AAR w klasie Resource aplikacji. W związku z tym możesz uzyskać dostęp do elementu . Zasoby usługi AAR z układu (i z tyłu kodu) są tak samo jak zasoby, które znajdują się w ścieżce Zasoby projektu.
Aby uzyskać dostęp do zasobu obrazu, należy użyć nazwy Resource.Drawable dla obrazu zapakowanego w obiekcie . AAR. Możesz na przykład odwołać się do image.png w pliku . Plik AAR przy użyciu polecenia @drawable/image
:
<ImageView android:src="@drawable/image" ... />
Możesz również uzyskać dostęp do układów zasobów znajdujących się w obiekcie . AAR. W tym celu należy użyć nazwy Resource.Layout układu spakowanego wewnątrz elementu . AAR. Na przykład:
var a = new ArrayAdapter<string>(this, Resource.Layout.row_layout, ...);
Przykład textanalyzer.aar zawiera plik obrazu, który znajduje się w lokalizacji res/drawable/monkey.png. Uzyskajmy dostęp do tego zasobu obrazu i użyjmy go w naszej przykładowej aplikacji:
Edytuj układ BindingTest (Main.axml) i dodaj element ImageView
na końcu konteneraLinearLayout
. Spowoduje to ImageView
wyświetlenie obrazu znalezionego w lokalizacji @drawable/monkey. Ten obraz zostanie załadowany z sekcji zasobów textanalyzer.aar:
...
<ImageView
android:src ="@drawable/monkey"
android:layout_marginTop ="40dp"
android:layout_width ="200dp"
android:layout_height ="200dp"
android:layout_gravity ="center" />
</LinearLayout>
Skompiluj i uruchom projekt BindingTest . Aplikacja rozpocznie się i przedstawi zrzut ekranu po lewej stronie — po naciśnięciu pozycji COUNT CONSONANTS wyniki zostaną wyświetlone, jak pokazano po prawej stronie:
Gratulacje! Pomyślnie powiązaliśmy bibliotekę Języka Java. AAR!
Podsumowanie
W tym przewodniku utworzyliśmy bibliotekę powiązań dla elementu . Plik AAR dodał bibliotekę powiązań do minimalnej aplikacji testowej i uruchomił aplikację, aby sprawdzić, czy nasz kod języka C# może wywoływać kod Java znajdujący się w obiekcie . Plik AAR. Ponadto rozszerzyliśmy aplikację w celu uzyskania dostępu do zasobu obrazu, który znajduje się w obiekcie . Plik AAR.