Java как создать библиотеку
Перейти к содержимому

Java как создать библиотеку

  • автор:

Привязка библиотеки Java

Сообщество Android имеет множество библиотек Java, которые можно использовать в приложении. В этом руководство объясняется, как внедрить библиотеки Java в приложение Xamarin.Android, создав библиотеку привязок.

Обзор

Экосистема библиотек сторонних производителей для Android уже очень велика. С учетом этого часто лучше использовать готовую библиотеку Android, чем создавать новую. Xamarin.Android предлагает два способа использования таких библиотек:

  • Создайте библиотеку привязок, которая автоматически заключает библиотеку в программы-оболочки C#, позволяя обращаться к коду Java с помощью вызовов C#.
  • Используйте собственный интерфейс Java (JNI), чтобы отправлять вызовы напрямую в библиотеку кода Java. Платформа программирования JNI позволяет вызывать код Java из собственных приложений или библиотек. Она также является вызываемой.

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

Xamarin.Android реализует привязки через вызываемые программы-оболочки Managed Callable Wrappers (MCW). MCW служат мостом для JNI, который используется при вызове кода Java из управляемого кода. Вызываемые оболочки управляемого кода поддерживают также подклассы типов Java и переопределение виртуальных методов для типов Java. Аналогично, когда управляемый код нужно вызывать из кода среды выполнения Android, это выполняется через другой мост JNI — Android Callable Wrappers (ACW). Эта архитектура показана на следующей схеме.

Архитектура моста Android JNI

Библиотека привязок — это сборка, содержащая вызываемые оболочки управляемого кода для типов Java. Предположим, нам нужно заключить тип Java MyClass в библиотеку привязок:

package com.xamarin.mycode; public class MyClass < public String myMethod (int i) < . >> 

Создав библиотеку привязок для JAR-файла, содержащую MyClass , мы сможем создать его экземпляр и обращаться к его методам прямо из кода C#:

var instance = new MyClass (); string result = instance.MyMethod (42); 

Чтобы создать библиотеку привязок, вам потребуется шаблон библиотеки привязок Java для Xamarin.Android. Полученный таким образом проект привязки содержит сборку .NET с несколькими классами MCW, один или несколько JAR-файлов и ресурсы для встроенных проектов библиотеки Android. Вы также можете создать библиотеки привязок для AAR-файлов (архив Android) и проектов библиотеки Android для Eclipse. Указывая ссылку на полученный DLL-файл сборки библиотеки привязок, вы сможете применить существующую библиотеку Java в проекте Xamarin.Android.

Создавая ссылки на типы из библиотеки привязок, нужно указывать пространство имен этой библиотеки привязок. Обычно директива using добавляется в начало файла исходного кода на C#, что является версией пространства имен .NET для имени пакета Java. Например, у пакета Java для вашего файла .jar привязки может быть следующее имя:

com.company.package 

Тогда вам потребуется включить следующий оператор using в начало файла с исходным кодом C#, чтобы получить доступ к типам из JAR-файла привязки:

using Com.Company.Package; 

При создании привязки для существующей библиотеки Android необходимо учитывать следующие моменты.

  • Существуют ли внешние зависимости у этой библиотеки? — Все зависимости Java, необходимые библиотеке Android, должны быть включены в проект Xamarin.Android как ReferenceJar или EmbeddedReferenceJar. Все собственные сборки должны быть добавлены в проект привязки как EmbeddedNativeLibrary.
  • Для какой версии Android API предназначена библиотека Android? — Невозможно «понизить» уровень API Android; Убедитесь, что проект привязки Xamarin.Android предназначен для того же уровня API (или выше), что и библиотека Android.
  • Какая версия JDK использовалась для компиляции этой библиотеки? — Ошибки привязки могут возникать, если библиотека Android была создана с использованием другой версии JDK, отличной от используемой в Xamarin.Android. Если есть возможность, перекомпилируйте библиотеку Android, используя ту же версию пакета JDK, которая используется в вашей установке Xamarin.Android.

Действия при сборке

При создании библиотеки привязок действия сборки задаются в JAR-файле или . AAR-файлы, которые вы включаете в проект библиотеки привязок. Каждое действие сборки определяет, как jar или . AAR-файл будет внедрен в вашу библиотеку привязок или будет ссылаться на нее. Эти действия сборки представлены в следующем списке.

  • EmbeddedJar — внедряет JAR-файл в итоговую библиотеку DLL библиотеки привязок в качестве внедренного ресурса. Это самое простое и самое распространенное действие сборки. Используйте этот вариант, если вам нужно автоматически компилировать .jar в байтовый код и распространять вместе с библиотекой привязок.
  • InputJar — не внедряет JAR-файл в итоговую библиотеку привязок .DLL. В этом варианта DLL-файл будет содержать зависимость времени выполнения от файла .jar. Используйте этот вариант, если вы не собираетесь включать .jar в библиотеку привязок (например, из-за ограничений лицензирования). Если вы выберете этот вариант, нужно обеспечить присутствие исходного файла .jar на всех устройствах, где будет выполняться приложение.
  • LibraryProjectZip — внедряет . AAR-файл в результирующий .DLL библиотеки привязок. Этот вариант аналогичен использованию EmbeddedJar за исключением того, что вы можете обращаться к ресурсам и коду из привязанного файла .aar. Выберите этот вариант, если вы решили включить файл .aar в библиотеку привязок.
  • ReferenceJar — указывает ссылочный JAR-файл: ссылочный JAR-файл является JAR-файлом , который является одним из привязанных .jar или . AAR-файлы зависят от. Ссылочный файл .jar используется только для разрешения зависимостей времени компиляции. Если вы укажете такое действие сборки, привязки C# для ссылочного файла .jar не создаются и он не включается в итоговый DLL-файл библиотеки привязок. Используйте этот вариант, если вы собираетесь создать дополнительную библиотеку привязок для ссылочного файла .jar, но она еще не готова. Это действие сборки удобно для упаковки нескольких файлов .jar и (или) файлов .aar в несколько взаимозависимых библиотек привязки.
  • EmbeddedReferenceJar — внедряет ссылочный JAR-файл в результирующий .DLL библиотеки привязок. Используйте это действие сборки, если вы собираетесь создать в библиотеке привязок привязки C# как для исходного файла .jar или .aar, так и для всех файлов .jar, на которые он ссылается.
  • EmbeddedNativeLibrary — внедряет собственный .so в привязку. Это действие сборки применяется для файлов .so, от которых зависит файл .jar, для которого создается привязка. Возможно, вам придется вручную загрузить библиотеку .so перед выполнением кода из библиотеки Java. Это действие описано ниже.

Более подробно действия сборки описаны в следующих руководствах.

Кроме того, указанные ниже действия сборки помогут вам импортировать документацию по API для Java и преобразовать их в документацию XML для C#.

  • JavaDocJar используется для ссылки на файл .jar архива Javadoc для библиотеки Java, которая соответствует стилю пакетов Maven (обычно это FOOBAR-javadoc**.jar** ).
  • JavaDocIndex используется для ссылки на файл index.html в справочной документации HTML по API.
  • JavaSourceJar дополняет JavaDocJar , чтобы сначала создать JavaDoc из исходных документов, а затем применить полученный результат как JavaDocIndex для библиотеки Java, которая соответствует стилю пакетов Maven (обычно это FOOBAR-sources**.jar** ).

Документация по API должна иметь стандартный формат doclet из пакетов SDK для Java 8, Java 7 или Java 6 (это три разных формата) или стиль DroidDoc.

Включение собственной библиотеки в привязку

Возможно, вам потребуется включить библиотеку .so в проект привязки Xamarin.Android в составе привязки библиотеки Java. При выполнении кода Java из оболочки Xamarin.Android не сможет вызвать JNI и выдаст ошибку java.lang.UnsatisfiedLinkError: Native method not found: (встроенный метод не обнаружен) в журнале LogCat для приложения.

Чтобы исправить это, вручную загрузите нужную библиотеку SO с помощью вызова Java.Lang.JavaSystem.LoadLibrary . Предположим для примера, что проект Xamarin.Android использует общую библиотеку libpocketsphinx_jni.so, включенную в проект с помощью действия привязки EmbeddedNativeLibrary. В этом случае следующий фрагмент кода (который нужно добавить перед использованием общей библиотеки) загрузит нужную библиотеку SO.

Java.Lang.JavaSystem.LoadLibrary("pocketsphinx_jni"); 

Адаптация API Java к C⧣

Генератор привязок Xamarin.Android заменяет некоторые идиомы и шаблоны Java в соответствии с технологиями .NET. В следующем списке описывается сопоставление Java с C#/.NET:

  • Методы получения и настройки в Java соответствуют свойствам в .NET.
  • Поля в Java соответствуют свойствам в .NET.
  • Прослушиватели и интерфейсы прослушивателей в Java соответствуют событиям в .NET. Параметры методов в интерфейсах обратного вызова будут представлены подклассом EventArgs .
  • Статический вложенный класс в Java соответствует вложенному классу в .NET.
  • Внутренний класс в Java соответствует вложенному классу с конструктором экземпляра в C#.

Сценарии привязки данных

Следующие руководства по привязке данных помогут вам правильно организовать одну или несколько библиотек Java для включения в приложение.

  • Руководство по использованию привязки файла .jar содержит пошаговую инструкцию по созданию библиотек привязок для файлов .jar.
  • Руководство по использованию привязки файла .aar содержит пошаговую инструкцию по созданию библиотек привязок для файлов .aar. Именно это руководство поможет вам создать привязку для библиотеки Android Studio.
  • Руководство по использованию привязки проекта библиотеки Eclipse включает пошаговую инструкцию по созданию библиотек привязок из проектов библиотек Android. Именно это руководство поможет вам создать привязку для проекта библиотеки Eclipse Android.
  • Руководство по настройке привязок описывает модификации, которые нужно вручную внести в привязки для устранения ошибок сборки и получения API, в большей степени соответствующего стандартам C#.
  • Руководство по устранению неполадок с привязками включает типичные сценарии возникновения ошибок, описывает возможные причины и предлагает рекомендации по их устранению.

Связанные ссылки

  • Работа с JNI
  • Метаданные GAPI
  • Использование собственных библиотек

Как создать свою библиотеку java

Чтобы создать свою библиотеку Java с использованием Gradle , следуйте этим шагам:

  • Установите Gradle на свой компьютер, если еще не установлен.
  • Создайте новый проект Gradle . Для этого запустите команду в командной строке или терминале в нужной вам директории:

Это создаст новый проект с заданной структурой каталогов и файлов для библиотеки Java

  • Откройте файл build.gradle в своем любимом редакторе и добавьте зависимости, если это необходимо. Вы можете добавлять зависимости на другие библиотеки Java , которые вы используете в своей библиотеке, например:
dependencies  implementation 'com.google.guava:guava:30.0-jre' testImplementation 'junit:junit:4.13.2' > 

Это добавляет зависимости на библиотеки Google Guava и JUnit для реализации и тестирования вашей библиотеки соответственно.

  • Создайте классы, интерфейсы и другие ресурсы для вашей библиотеки в директории src/main/java . Например, вы можете создать класс MyLibrary в пакете com.example.mylibrary следующим образом:
package com.example.mylibrary; public class MyLibrary  public static String getMessage()  return "Hello, World!"; > > 
  • Соберите свою библиотеку, запустив команду gradle build в командной строке или терминале. Это создаст JAR-файл вашей библиотеки в директории build/libs
  • Используйте свою библиотеку в других проектах Java , добавив зависимость на JAR-файл вашей библиотеки в файл build.gradle проекта, например:
dependencies  implementation files('libs/mylibrary.jar') > 

Это добавляет зависимость на JAR-файл mylibrary.jar , который вы создали в предыдущем шаге.

Вот пример кода для использования библиотеки в другом проекте Java :

import com.example.mylibrary.MyLibrary; public class Main  public static void main(String[] args)  String message = MyLibrary.getMessage(); System.out.println(message); // => "Hello, World!" > > 

Как создать библиотеку?

У меня есть три «куска» кода — интерфейс, абстрактный класс и класс. Класс наследует абстрактный класс, а абстрактный класс наследует интерфейс. Класс переопределяет и реализует все методы из интерфейса и Абстрактного Класса. Я хочу сделать из них библиотеку, а точнее пока только jar файл, чтобы импортировать их в свой код. Нужно ли мне делать их в разных проектах, но в одной раскладке(package)? Если да, то как мне их из разных проектов запилить в один jar-файл? Или вообще можно не писать интерфейс и абстрактный класс, а оставить просто класс?

Отслеживать
Anton Sorokin
задан 4 авг 2017 в 5:49
Anton Sorokin Anton Sorokin
7,008 6 6 золотых знаков 37 37 серебряных знаков 65 65 бронзовых знаков

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

Все эти блоки кода надо положить в один проект.
Затем создать jar-файл.
После этого импортируем этот файл в [другой] проект.

Отслеживать
ответ дан 4 авг 2017 в 7:30
Anton Sorokin Anton Sorokin
7,008 6 6 золотых знаков 37 37 серебряных знаков 65 65 бронзовых знаков

  • java
  • netbeans
  • библиотеки
  • jar
    Важное на Мете
Похожие

Подписаться на ленту

Лента вопроса

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

Дизайн сайта / логотип © 2024 Stack Exchange Inc; пользовательские материалы лицензированы в соответствии с CC BY-SA . rev 2024.1.17.3574

Java как создать библиотеку

Если предоставить в распоряжение программиста только язык программирования и не снабдить его набором готовых модулей, предназначенных для решения самых распространенных задач, ему придется отвлекаться на множество мелких деталей.

Обычно все профессиональные системы разработки приложений на языке программирования C++ содержат в своем составе набор стандартных библиотечных функций или библиотеки классов. В комплекте со всеми средствами разработки Java поставляются достаточно развитые библиотеки классов, значительно упрощающие программирование. В этом разделе мы кратко расскажем о составе и назначении библиотек классов Java.

Встроенные классы

В языке Java все классы происходят от класса Object, и, соответственно, наследуют методы этого класса. Некоторые библиотеки классов подключаются автоматически, и мы будем называть их встроенными. К таким относится, в частности, библиотека с названием java.lang. Другие библиотеки классов вы должны подключать в исходном тексте приложения Java явным образом с помощью оператора import.

Замещающие классы

Очень часто в наших приложениях вместо базовых типов переменных мы будем использовать объекты встроенных классов, которые называются замещающими классами (wrapper classes). Ниже мы перечислили названия этих классов и названия базовых типов данных, которые они замещают:

Базовый тип данных Замещающий класс
boolean Boolean
char Character
int Integer
long Long
float Float
double Double

Заметим, что для преобразования базовых типов данных в объекты замещающего класса и обратно вы не можете применять оператор присваивания. Вместо этого необходимо использовать соответствующие конструкторы и методы замещающих классов.

Класс String

Класс String предназначен для работы с такими часто встречающимися объектами, как текстовые строки. Методы этого класса позволяют выполнять над строками практически все операции, которые вы делали раньше при помощи библиотечных функций C. Это преобразование строки в число и обратно с любым заданным основанием, определение длины строки, сравнение строк, извлечение подстроки и так далее.

Хотя в языке Java не допускается перезагрузка (переопределение) операторов, для объектов класса Stirng и объектов всех произошедших от него классов сделана встроенная перезагрузка операторов «+» и «+ #000080″>System.out.println(«x x = «, числа x и символа перехода на следующую строку ‘\n’. Значение переменной x автоматически преобразуется в текстовую строку (что выполняется только для текстовых строк) и полученная таким образом текстовая строка сливается со строкой «x = «.

Другие встроенные классы

Среди других встроенных классов отметим класс Math, предназначенный для выполнения математических операций, таких как вычисление синуса, косинуса и тангенса.

Предусмотрены также классы для выполнения запуска процессов и потоков, управления системой безопасности, а также для решения прочих системных задач.

Библиотека встроенных классов содержит очень важные классы для работы с исключениями. Эти классы нужны для обработки ошибочных ситуаций, которые могут возникнуть (и возникают!) при работе приложений или аплетов Java.

Подключаемые библиотеки классов

Ниже мы кратко перечислим подключаемые библиотеки классов для того чтобы вы могли оценить возможности набора классов Java. Подробное описание этих классов есть в справочной системе Java WorkShop и в различной литературе, посвященной Java. Мы же ограничимся описанием тех классов, которые будем использовать в наших примерах приложений.

Библиотека классов java.util

Библиотека классов java.util очень полезна при составлении приложений, потому что в ней имеются классы для создания таких структур, как динамические массивы, стеки и словари. Есть классы для работы с генератором псевдослучайных чисел, для разбора строк на составляющие элементы (токены), для работы с календарной датой и временем.

Библиотека классов java.io

В библиотеке классов java.io собраны классы, имеющие отношение к вводу и выводу данных через потоки. Заметим, что с использованием этих классов можно работать не только с потоками байт, но также и с потоками данных других типов, например числами int или текстовыми строками.

Библиотека классов java.net

Язык программирования Java разрабатывался в предположении, что им будут пользоваться для создания сетевых приложений. Поэтому было бы странно, если бы в составе среды разработки приложений Java не поставлялась библиотека классов для работы в сети. Библиотека классов java.net предназначена как раз для этого. Она содержит классы, с помощью которых можно работать с универсальными сетевыми адресами URL, передавать данные с использованием сокетов TCP и UDP, выполнять различные операции с адресами IP. Эта библиотека содержит также классы для выполнения преобразований двоичных данных в текстовый формат, что часто бывает необходимо.

В качестве примера приложения, составленного на языке программирования Java и ориентированного на работу в сети Internet, можно привести игру Java Color Lines (рис. 7).

Это сетевая версия известной игры Lines, которая выполнена в виде нескольких аплетов, взаимодействующих между собой и между сервером Web, на котором они расположены. Так как список имен игроков и достигнутых ими результатов хранится на сервере, вы можете поучаствовать в мировом турнире, сразившись с игроками из разных стран.

Библиотека классов java.awt

Для создания пользовательского интерфейса аплеты Java могут и должны использовать библиотеку классов java.awt. AWT — это сокращение от Abstract Window Toolkit (инструментарий для работы с абстрактными окнами).

Классы, входящие в состав библиотеки java.awt, предоставляют возможность создания пользовательского интерфейса способом, не зависящим от платформы, на которой выполняется аплет Java. Вы можете создавать обычные окна и диалоговые панели, кнопки, переключатели, списки, меню, полосы просмотра, однострочные и многострочные поля для ввода текстовой информации.

Библиотека классов java.awt.image

В среде любой операционной системы работа с графическими изображениями является достаточно сложной задачей. В операционной системе Windows для этого применяется графический интерфейс GDI. Если вы будете рисовать графические изображения в среде OS/2 или X-Windows, вам, очевидно, придется использовать другой программный интерфейс. Большую сложность также вызывает разбор заголовков графических файлов, так как они могут иметь различный формат и иногда содержат неправильную или противоречивую информацию.

Когда вы программируете на Java, рисование и обработка графических изображений выполняется намного проще, так как вам доступна специально предназначенная для этого библиотека классов java.awt.image. Помимо широкого разнообразия и удобства определенных в ней классов и методов, отметим способность этой библиотеки работать с графическими изображениями в формате GIF. Этот формат широко используется в Internet, так как он позволяет сжимать файлы графических изображений во много раз без потери качества за счет устранения избыточности.

Библиотека классов java.awt.peer

Библиотека классов java.awt.peer служит для подключения компонент AWT (например, кнопок, списков, полей редактирования текстовой информации, переключателей и так далее) к реализациям, зависящим от платформы, в процессе создания этих компонент.

Библиотека классов java.applet

Как нетрудно догадаться из названия, библиотека классов java.applet инкапсулирует поведение аплетов Java. Когда вы будете создавать свои аплеты, вам будет нужен класс Applet, расположенный в этой библиотеке классов. Дополнительно в библиотеке классов java.applet определены интерфейсы для подключения аплетов к содержащим их документам и классы для проигрывания звуковых фрагментов.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *