Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Экосистема библиотек сторонних производителей для Android уже очень велика. С учетом этого часто лучше использовать готовую библиотеку Android, чем создавать новую.
.NET для Android позволяет выполнять это с помощью библиотеки привязок, которая автоматически упаковывает библиотеку с помощью оболочки C#, чтобы можно было вызвать код Java с помощью вызовов C#.
Это реализуется с помощью управляемых вызываемых оболочков (MCW). MCW служит мостом к JNI, используемым для вызова кода Java из управляемого кода. Управляемые вызываемые оболочки также поддерживают создание подклассов для типов Java и переопределение виртуальных методов в этих типах. Когда код среды выполнения Android (ART) желает вызвать управляемый код, он делает это через другой мост JNI, известный как Android Callable Wrappers (ACW). Эта архитектура показана на следующей схеме.
Библиотека привязок — это сборка, содержащая управляемые вызываемые оболочки для типов Java. Предположим, нам нужно заключить тип Java MyClass в библиотеку привязок:
package com.contoso.mycode;
public class MyClass
{
public String myMethod (int i) { ... }
}
Создав библиотеку привязок для JAR-файла, содержащую MyClass, мы сможем создать его экземпляр и обращаться к его методам прямо из кода C#:
var instance = new MyClass ();
string result = instance.MyMethod (42);
Чтобы создать эту библиотеку привязок, используйте шаблон Android Java Binding Library для .NET для Android. Полученный проект привязки создает сборку .NET с классами MCW, .jar/.aar файлами и ресурсами для проектов библиотек Android, включенными в нее. Ссылаясь на полученную сборку библиотеки привязок, вы можете повторно использовать существующую библиотеку Java в проекте .NET для Android.
При обращении к типам в вашей библиотеке привязок нужно использовать пространство имен этой библиотеки. Обычно директива using добавляется в начало файла исходного кода на C#, что является версией пространства имен .NET для имени пакета Java. Например, у Java-пакета для вашего файла .jar может быть следующее имя привязки:
com.contoso.package
Тогда вам потребуется включить следующий оператор using в начало файла с исходным кодом C#, чтобы получить доступ к типам из JAR-файла привязки:
using Com.Contoso.Package;
При создании привязки для существующей библиотеки Android необходимо учитывать следующие моменты.
Существуют ли внешние зависимости у этой библиотеки? — Все зависимости Java, необходимые библиотеке Android, должны быть включены в проект .NET для Android через пакет NuGet или в качестве AndroidLibrary. Все собственные сборки необходимо добавить в проект привязки как AndroidNativeLibrary.
Для какой версии Android API предназначена библиотека Android? — Невозможно "понижение" уровня API Android; Убедитесь, что проект привязки .NET для Android предназначен для того же уровня API (или выше), что и библиотека Android.
Адаптация API Java к C⧣
Генератор привязки .NET для Android изменит некоторые идиомы и шаблоны Java, чтобы соответствовать шаблонам .NET. В следующем списке описывается сопоставление Java с C#/.NET:
Методы получения и настройки в Java соответствуют свойствам в .NET.
Поля в Java соответствуют свойствам в .NET.
Слушатели и интерфейсы слушателей в Java аналогичны событиям в .NET. Параметры методов в интерфейсах обратного вызова будут представлены подклассом
EventArgs.Статический вложенный класс в Java соответствует вложенному классу в .NET.
Внутренний класс в Java представляет собой вложенный класс с экземплярным конструктором в C#.
Включение нативной библиотеки в привязку
Может потребоваться включить библиотеку .so в проект привязки .NET для Android в рамках привязки библиотеки Java. При выполнении упакованного кода Java .NET для Android не сможет выполнить вызов JNI и сообщение об ошибке java.lang.UnsatisfiedLinkError: нативный метод не найден: появится в выходе приложения.
Чтобы исправить это, вручную загрузите нужную библиотеку SO с помощью вызова Java.Lang.JavaSystem.LoadLibrary. Например, если проект .NET для Android имеет разделяемую библиотеку libpocketsphinx_jni.so, включенную в проект привязки с типом сборки AndroidNativeLibrary, следующий фрагмент кода (выполняемый перед использованием разделяемой библиотеки) загружает библиотеку .so:
Java.Lang.JavaSystem.LoadLibrary("pocketsphinx_jni");
Сценарии привязки
Следующие руководства по привязке данных помогут вам правильно организовать одну или несколько библиотек Java для включения в приложение.
Привязка библиотеки Java — это пошаговое руководство по созданию библиотек привязок для локально доступных файлов .jar/ и .aar.
Создание привязки библиотеки Java из Maven — это пошаговое руководство по созданию библиотек привязок для файлов .jar и .aar, размещаемых в репозитории Maven.
Настройка привязок объясняет, как вносить изменения вручную в привязку, чтобы устранить ошибки сборки и сформировать результирующий API, чтобы он был более "C#-like".
Устранение неполадок привязок содержит распространенные сценарии ошибок привязки , объясняет возможные причины и предлагает предложения по устранению этих ошибок.