Поделиться через


Привязка JAR-файла

Внимание

В настоящее время рассматривается возможность использования настраиваемых привязок на платформе Xamarin. Примите участие в этом опросе, чтобы помочь определить дальнейшие направления разработки.

Это пошаговое руководство содержит инструкции по созданию библиотеки привязок Java для Xamarin.Android из JAR-файла на платформе Android.

Обзор

Сообщество Android предлагает много библиотек Java, которые можно использовать в приложении. Эти библиотеки Java часто упаковываются в виде JAR-файла (архив Java), но вы можете создать для этого JAR-файла привязку в библиотеке привязок Java, чтобы его функции стали доступны для приложений Xamarin.Android. Библиотека привязок Java предназначена для того, чтобы сделать API-интерфейсы из JAR-файла доступными в коде C# через автоматически создаваемые оболочки кода.

Средства Xamarin могут создавать библиотеку привязок из одного или нескольких JAR-файлов. Библиотека привязок (сборка в виде DLL-файла) содержит следующие элементы.

  • Содержимое исходных JAR-файлов.

  • Вызываемые оболочки управляемого кода (MCW), которые являются типами C# для переноса соответствующих типов Java из JAR-файлов.

Созданный код MCW использует нативный интерфейс Java (JNI) для переадресации вызовов API в исходный JAR-файл. Вы можете создать библиотеки привязок для любого JAR-файла, который предназначен для использования с Android (обратите внимание, что в настоящее время средства Xamarin не поддерживают привязку библиотек Java для платформ, отличных от Android). Вы также можете выполнить сборку библиотеку привязок, не включая содержимое JAR-файла, и тогда библиотека DLL будет иметь зависимость от JAR-файла во время выполнения.

В этом руководстве мы рассмотрим основные концепции создания библиотеки привязок из одного JAR-файла. Мы проиллюстрируем пример, в котором все идет правильно, то есть, где не требуется настройка или отладка привязок. В примере создания привязок на основе метаданных показан более сложный сценарий, в котором процесс привязки невозможно выполнить полностью автоматически и требуется вмешательство пользователя. Общие сведения (с простым примером кода) о создании библиотек привязок для Java см. в разделе Привязка библиотеки Java.

Пошаговое руководство

В следующем пошаговом руководстве мы создадим библиотеку привязок для популярного пакета Android Picasso, который предоставляет функции загрузки и кэширования изображений. Выполните следующие действия, чтобы привязать файл picasso-2.x.x.jar и создать новую сборку .NET, которую можно использовать в проекте Xamarin.Android:

  1. Создайте проект библиотеки привязок Java.

  2. Добавьте JAR-файл в этот проект.

  3. Задайте нужное действие сборки для этого JAR-файла.

  4. Выберите целевую платформу, которую поддерживает JAR-файл.

  5. Выполните сборку библиотеки привязок.

После создания библиотеки привязок мы создадим небольшое приложение Android, которое демонстрирует возможность вызова API через библиотеку привязок. В этом примере мы хотим получить доступ к методам из picasso-2.x.x.jar:

package com.squareup.picasso

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

После создания библиотеки привязок для picasso-2.x.x.jar вы сможете вызывать эти методы в коде C#. Например:

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

Создание библиотеки привязок

Прежде чем переходить к следующим шагам, скачайте файл picasso-2.x.x.jar.

Для начала создайте проект библиотеки привязок. В Visual Studio для Mac или Visual Studio создайте новое решение и выберите шаблон Библиотека привязок (Android). (Снимки экрана в этом пошаговом руководстве используют Visual Studio, но Visual Studio для Mac очень похожи.) Назовите jarBinding решение:

Create JarBinding library project

Шаблон включает папку Jars, в которую вы добавите JAR-файлы для проекта библиотеки привязок. Щелкните правой кнопкой мыши папку Jars и выберите " Добавить > существующий элемент":

Add existing item

Перейдите к ранее скачанному файлу picasso-2.x.x.jar, выберите его и щелкните Добавить.

Select jar file and click Add

Убедитесь, что файл picasso-2.x.x.jar успешно добавлен в проект.

Jar added to project

При создании проекта библиотеки привязок Java необходимо указать, будет ли JAR-файл внедрен в библиотеку привязок или упакован отдельно. Для этого укажите одно из следующих действий сборки:

  • EmbeddedJar — the . JAR-файл будет внедрен в библиотеку привязок.

  • InputJar — the . JAR-файл будет храниться отдельно от библиотеки привязок.

Обычно используется действие сборки EmbeddedJar, чтобы JAR-файл автоматически добавлялся в библиотеку привязок. Это самый простой вариант — код байтов Java в файле . JAR преобразуется в байт-код Dex и внедряется (вместе с управляемыми вызываемыми оболочками) в APK. Если вы хотите, чтобы JAR-файл хранился отдельно от библиотеки привязок, можно использовать вариант InputJar, но при этом вам придется обеспечить наличие этого JAR-файла на устройстве, на котором выполняется приложение.

Выберите действие сборки EmbeddedJar.

Select EmbeddedJar build action

Теперь в разделе "Свойства" для проекта задайте значение для параметра Целевая платформа. Если JAR-файл использует API-интерфейсы Android, для целевой платформы нужно указать тот уровень API который ожидает этот JAR-файл. Как правило, разработчик JAR-файла указывает один или несколько уровней API, с которыми совместим этот JAR-файл. (Дополнительную информацию о настройке целевой платформы и уровней API Android см. в этой статье.)

Настройте целевой уровень API для библиотеки привязок (в этом примере мы используем уровень API 19).

Target API level set to API 19

Наконец, выполните сборку библиотеки привязок. Хотя некоторые предупреждения могут отображаться, проект библиотеки привязок должен успешно построить и создать выходные .DLL в следующем расположении: JarBinding/bin/Debug/JarBinding.dll

Использование библиотеки привязок

Чтобы использовать этот DLL-файл в приложении Xamarin.Android, выполните следующие действия:

  1. Добавьте ссылку на библиотеку привязок.

  2. Выполните вызовы к JAR-файлу через вызываемые оболочки управляемого кода.

На следующих шагах мы создадим простейшее приложение, которое использует библиотеку привязок для скачивания и отображения изображения из ImageView. Вся основная работа выполняется кодом, который находится в JAR-файле.

Для начала создайте приложение Xamarin.Android, которое использует библиотеку привязок. Щелкните "Решение" правой кнопкой мыши и выберите Добавить новый проект, затем присвойте проекту имя BindingTest. Мы создаем это приложение в том же решении, что и библиотеку привязок, чтобы упростить это пошаговое руководство. Но приложение, использующее библиотеку привязок, может находиться в другом решении:

Add new BindingTest project

Щелкните правой кнопкой мыши узел Ссылки для проекта BindingTest и выберите команду Добавить ссылку....

Right Add Reference

Выберите ранее созданный проект JarBinding и щелкните ОК.

Select JarBinding project

Откройте узел Ссылки для проекта BindingTest, чтобы убедиться в наличии ссылки на JarBinding.

JarBinding appears under References

Измените макет BindingTest (Main.axml), чтобы в нем был один 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>

Добавьте следующую using инструкцию в MainActivity.cs . Это позволяет легко получить доступ к методам класса на основе Picasso Java, который находится в библиотеке привязок:

using Com.Squareup.Picasso;

Измените метод OnCreate, чтобы в нем использовался класс Picasso для загрузки изображение по URL-адресу и отображения в 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);
    }
}

Скомпилируйте и запустите проект BindingTest. Приложение откроется и после небольшой задержки (в зависимости от условий сети) скачает и отобразит изображение, примерно как на следующем снимке экрана:

Screenshot of BindingTest running

Поздравляем! Вы успешно привязали библиотеку Java из JAR-файла и применили ее в приложении Xamarin.Android.

Итоги

Из этого пошагового руководства вы узнали, как создали библиотеку привязок для стороннего JAR-файла, добавить эту библиотеку привязок в простейшее тестовое приложение и запустили это приложение для проверки того, как наш код C# вызывает код Java из JAR-файла.