Udostępnij za pośrednictwem


Tworzenie powiązań plików JAR

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

Omówienie

Społeczność systemu Android oferuje wiele bibliotek Java, których możesz użyć w aplikacji. Te biblioteki Języka Java są często pakowane w pliku . Format JAR (Archiwum Java), ale można spakować plik . JAR w bibliotece powiązań Języka Java, aby jej funkcjonalność była dostępna dla aplikacji platformy Xamarin.Android. Celem biblioteki powiązań Języka Java jest uczynienie interfejsów API w pliku . Plik JAR dostępny dla kodu C# za pośrednictwem automatycznie generowanych otoek kodu.

Narzędzia platformy Xamarin mogą generować bibliotekę powiązań na podstawie co najmniej jednego wejściowego elementu . Pliki JAR. Biblioteka powiązań (zestaw .DLL) zawiera następujące elementy:

  • Zawartość oryginalnego elementu . Pliki JAR.

  • Zarządzane otoki z możliwością wywołania (MCW), które są typami języka C#, które opakowują odpowiednie typy języka Java w obrębie . Pliki JAR.

Wygenerowany kod MCW używa interfejsu JNI (interfejsu natywnego Java) do przekazywania wywołań interfejsu API do bazowego elementu . Plik JAR. Możesz utworzyć biblioteki powiązań dla dowolnego elementu . Plik JAR, który pierwotnie był przeznaczony do użycia z systemem Android (należy pamiętać, że narzędzia Xamarin nie obsługują obecnie powiązania bibliotek Java innych niż Android). Możesz również zdecydować się na utworzenie biblioteki powiązań bez uwzględniania zawartości elementu . Plik JAR, dzięki czemu biblioteka DLL ma zależność od . Plik JAR w czasie wykonywania.

W tym przewodniku omówimy podstawy tworzenia biblioteki powiązań dla pojedynczego elementu . Plik JAR. Zilustrujemy przykład, w którym wszystko działa prawidłowo — oznacza to, że nie jest wymagane dostosowanie ani debugowanie powiązań. Tworzenie powiązań przy użyciu metadanych oferuje przykład bardziej zaawansowanego scenariusza, w którym proces wiązania nie jest całkowicie automatyczny i wymagana jest pewna ilość interwencji ręcznej. 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.

Przewodnik

W poniższym przewodniku utworzymy bibliotekę powiązań dla Picassa — popularnego systemu Android. Plik JAR, który zapewnia funkcje ładowania i buforowania obrazów. Użyjemy następujących kroków, aby powiązać picasso-2.x.x.jar w celu utworzenia nowego zestawu platformy .NET, którego możemy użyć w projekcie platformy Xamarin.Android:

  1. Utwórz nowy projekt Biblioteki powiązań Języka Java.

  2. Dodaj element . Plik JAR do projektu.

  3. Ustaw odpowiednią akcję kompilacji dla elementu . Plik JAR.

  4. Wybierz platformę docelową, która ma wartość . Plik JAR obsługuje.

  5. Skompiluj bibliotekę powiązań.

Po utworzeniu biblioteki powiązań utworzymy małą aplikację dla systemu Android, która demonstruje możliwość wywoływania interfejsów API w bibliotece powiązań. W tym przykładzie chcemy uzyskać dostęp do metod picasso-2.x.x.jar:

package com.squareup.picasso

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

Po wygenerowaniu biblioteki powiązań dla picasso-2.x.x.jar możemy wywołać te metody z języka C#. Na przykład:

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

Tworzenie biblioteki powiązań

Przed rozpoczęciem pracy z poniższymi krokami pobierz picasso-2.x.x.jar.

Najpierw utwórz nowy projekt Biblioteka powiązań. W programie Visual Studio dla komputerów Mac lub Visual Studio utwórz nowe rozwiązanie i wybierz szablon Biblioteka powiązań systemu Android. (Zrzuty ekranu w tym przewodniku używają programu Visual Studio, ale Visual Studio dla komputerów Mac jest bardzo podobny). Nadaj rozwiązaniu nazwę JarBinding:

Create JarBinding library project

Szablon zawiera folder Jars , w którym dodajesz plik . Pliki JAR w projekcie Biblioteka powiązań. Kliknij prawym przyciskiem myszy folder Jars i wybierz polecenie Dodaj > istniejący element:

Add existing item

Przejdź do pobranego wcześniej pliku picasso-2.x.x.jar , wybierz go i kliknij przycisk Dodaj:

Select jar file and click Add

Sprawdź, czy plik picasso-2.x.x.jar został pomyślnie dodany do projektu:

Jar added to project

Podczas tworzenia projektu biblioteki powiązań Języka Java należy określić, czy element . Plik JAR ma być osadzony w bibliotece powiązań lub spakowany oddzielnie. W tym celu należy określić jedną z następujących akcji kompilacji:

  • EmbeddedJar — element . Plik JAR zostanie osadzony w bibliotece powiązań.

  • InputJar — . Plik JAR będzie oddzielony od biblioteki powiązań.

Zazwyczaj używasz akcji kompilacji EmbeddedJar , aby element . Plik JAR jest automatycznie pakowany do biblioteki powiązań. Jest to najprostsza opcja — kod bajtowy Języka Java w pliku . Plik JAR jest konwertowany na kod bajtowy Dex i jest osadzony (wraz z zarządzanymi otokami wywołującymi) do pakietu APK. Jeśli chcesz zachować wartość . Plik JAR oddzielony od biblioteki powiązań można użyć opcji InputJar . Należy jednak upewnić się, że element . Plik JAR jest dostępny na urządzeniu z uruchomioną aplikacją.

Ustaw akcję kompilacji na EmbeddedJar:

Select EmbeddedJar build action

Następnie otwórz projekt Właściwości, aby skonfigurować platformę docelową. Jeśli element . Plik JAR używa dowolnych interfejsów API systemu Android, ustaw platformę docelową na poziom interfejsu API, który ma wartość . Oczekuje się pliku JAR. Zazwyczaj deweloper programu . Plik JAR będzie wskazywać poziom interfejsu API (lub poziomy), który ma wartość . Plik JAR jest zgodny z. (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 używamy interfejsu API poziomu 19):

Target API level set to API 19

Na koniec skompiluj bibliotekę powiązań. Mimo że niektóre komunikaty ostrzegawcze mogą być wyświetlane, projekt Biblioteka powiązań powinien zostać pomyślnie skompilowany i wygenerować dane wyjściowe .DLL w następującej lokalizacji: JarBinding/bin/Debug/JarBinding.dll

Korzystanie z biblioteki powiązań

Aby korzystać z tej .DLL w aplikacji platformy Xamarin.Android, wykonaj następujące czynności:

  1. Dodaj odwołanie do biblioteki powiązań.

  2. Wykonaj wywołania w obiekcie . JAR za pomocą zarządzanych otoek z możliwością wywołania.

W poniższych krokach utworzymy minimalną aplikację, która używa biblioteki powiązań do pobierania i wyświetlania obrazu w ImageViewobiekcie . Kod, który znajduje się w obiekcie . Plik JAR.

Najpierw utwórz nową aplikację platformy Xamarin.Android, która korzysta z biblioteki powiązań. Kliknij prawym przyciskiem myszy pozycję Rozwiązanie i wybierz polecenie Dodaj nowy projekt; nadaj nowej nazwie BindingTest projektu. Tworzymy tę aplikację w tym samym rozwiązaniu co biblioteka powiązań, aby uprościć ten przewodnik; jednak aplikacja, która korzysta z biblioteki powiązań, może zamiast tego znajdować się w innym rozwiązaniu:

Add new BindingTest project

Kliknij prawym przyciskiem myszy węzeł Odwołania w projekcie BindingTest i wybierz polecenie Dodaj odwołanie...:

Right Add Reference

Sprawdź utworzony wcześniej projekt JarBinding i kliknij przycisk OK:

Select JarBinding project

Otwórz węzeł Odwołania projektu BindingTest i sprawdź, czy odwołanie JarBinding jest obecne:

JarBinding appears under References

Zmodyfikuj układ BindingTest (Main.axml), tak aby miał jeden element 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>

Dodaj następującą using instrukcję do MainActivity.cs — umożliwia to łatwe uzyskiwanie dostępu do metod klasy opartej na Picasso języku Java znajdującej się w bibliotece powiązań:

using Com.Squareup.Picasso;

Zmodyfikuj metodę OnCreate tak, aby używała Picasso klasy do ładowania obrazu z adresu URL i wyświetlania go w elemecie 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);
    }
}

Skompiluj i uruchom projekt BindingTest . Aplikacja zostanie uruchamiana i po krótkim opóźnieniu (w zależności od warunków sieciowych) powinna pobrać i wyświetlić obraz podobny do poniższego zrzutu ekranu:

Screenshot of BindingTest running

Gratulacje! Pomyślnie powiązaliśmy bibliotekę Języka Java. Plik JAR i użył go w aplikacji Xamarin.Android.

Podsumowanie

W tym przewodniku utworzyliśmy bibliotekę powiązań dla innej firmy . Plik JAR dodał bibliotekę powiązań do minimalnej aplikacji testowej, a następnie uruchomił aplikację, aby sprawdzić, czy nasz kod języka C# może wywołać kod Java znajdujący się w obiekcie . Plik JAR.