Android java library jar

Привязка 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.

Читайте также:  Laravelcollective html laravel 8

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

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

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

Добавление существующего элемента

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

Выберите JAR-файл и нажмите кнопку Добавить.

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

Jar-файл, добавленный в проект

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

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

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

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

Выберите EmbeddedJar build action (Действие сборки EmbeddedJar)

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

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

Для целевого уровня API задано значение API 19

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

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

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

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

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

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

Добавление нового проекта BindingTest

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

Добавить ссылку справа

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

Выбор проекта JarBinding

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

Читайте также:  What is indentation in html

JarBinding отображается в разделе Ссылки

Измените макет BindingTest (Main.axml), чтобы в нем был один ImageView :

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

Измените метод OnCreate , чтобы в нем использовался класс Picasso для загрузки изображение по URL-адресу и отображения в ImageView :

public class MainActivity : Activity < protected override void OnCreate(Bundle bundle) < base.OnCreate(bundle); SetContentView(Resource.Layout.Main); ImageView imageView = FindViewById(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. Приложение откроется и после небольшой задержки (в зависимости от условий сети) скачает и отобразит изображение, примерно как на следующем снимке экрана:

Снимок экрана: выполнение BindingTest

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

Сводка

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

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

Источник

Создание standalone библиотеки под android

В этой статье я расскажу как создать библиотеку, которая использует другие библиотеки и при этом уместить всё в одном jar.

Допустим мы пишем библиотеку, она использует другие библиотеки и, в частности, для примера, support library. Если бы мы использовали maven, то в pom файле просто прописали зависимости и не парились. Но что если нашу библиотеку будут использовать люди, которые не пользуются системами сборок или пользуются ant’ ом?

Мы можем положить зависимости рядом с нашим jar. Но тогда неизбежны конфликты библиотек разных версий, например, если мы используем одну версию support library, а в самом приложении другая. Тогда придется руками одну из них удалять.

Можно пойти другим путем, вспомним что jar это обычный zip файл. Мы распакуем все зависимости, получим байт-код в виде .class файлов, далее компилируем код нашей библиотеки, кладем все .class файлы в одно место и собираем из них jar. Но если в приложении используются те же библиотеки что и у нас, то получим ошибку что в проекте два одинаковых класса.

Для решения этой проблемы воспользуемся утилитой jarjar. Она переименовывает все классы в jar файле. На примере support library — все классы находятся в пакете android.support.v4

java -jar jarjar.jar process   rulesFile - файл с правилами переименования inJar, outJar - тут все понятно 
rule android.support.v4.** inner.android.support.v4.@1 

и сохраним в файл rules.txt

java -jar jarjar.jar rules.txt android-support-v4.jar android-support-v4-renamed.jar 

В итоге получили jar’ку с переименованными классами. Далее мы распаковываем все наши зависимости с переименованными классами и компилируем. Получаем библиотеку, которая содержит весь код нужный для выполнения.

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

И в заключение небольшой скрипт на gradle который всё это делает

apply plugin: 'java' defaultTasks 'proguard' task unpackJars(dependsOn: compileJava) < //распаковываем классы из библиотек file('libs').listFiles().each < File file ->if (file.name.endsWith('.jar')) < copy < from(zipTree(file.path)) into('build/classes/main') >> > //собираем jar'ку tasks.jar.execute() > task proguard(type: proguard.gradle.ProGuardTask, dependsOn: unpackJars) < injars 'build/libs/library.jar' outjars 'build/libs/proguard_library.jar' libraryjars '/Applications/my/Android Studio.app/sdk/platforms/android-10/android.jar' //укажем что классы нашей библиотеки удалять не нужно keep 'class com.CasualSoftware.classloader.library.**' >dependencies

Вои и всё, после выполнения скрипта мы получим proguard_library.jar, который можно добавлять к приложению и использовать.

Читайте также:  Перемешать массив си шарп

В моём случае библиотека использует support library и dropbox sdk, и весит 50 кБ.

Этим же способом можно уменьшать размер вашего apk, все зависимости можно подключать не как jar файлы, а распаковывать в .classes и применять proguard, тогда он удалит неиспользуемые классы из библиотек. Так можно подключать к проекту тяжелые фреймворки не боясь увеличения размера apk

Источник

Develop an Android Library — Part 1

Author_img

What does a “library” mean in programming world?
“ A library is a precompiled code and resources that can be used in other projects easily “ In Android, mainly two types of libraries are used: JAR and AAR.

What is JAR:

Full form of JAR is Java Archived. A JAR file is a Zipped formatted file with .jar extension, containing Java Class files, metadata and other resources like text, images etc. JAR files may also contain one Manifest.MF file. This file contains information like which Java class is the entry point, classpaths etc.

What is AAR:

It may also include one or more of the following entries:

  • /assets/
  • /libs/lib_name.jar
  • /jni/abi_name/bin_name.so
  • /proguard.txt
  • /lint.jar

Build a library:

Create a JAR in Android Studio:

screen-shot-2017-02-07-at-6-13-33-pm

Select File -> New -> New Module and select “Java Library” from the selection :

Click Next -> Finish
It will create a new java library project.
But you cannot add any android Framework dependency in this library.

How to create a library for android then? Simply select “Android Library” instead of “Java Library” in the last step above . done !!

But how to get the .jar file for both of these libraries?

For “Java Library”, use ./gradlew build to create .jar . Output file will be inside /build/libs/ folder.

For “Android Library”, we will have to use one custom Gradle task:
Copy-paste the following code snippet inside build.gradle file:

task deleteJar(type : Delete) < delete 'libs/myLib.jar' >task createJar(type : Copy) < from ('build/intermediates/bundles/release/') into ('libs') include ('classes.jar') rename ('classes.jar','myLib.jar') >createJar.dependsOn(deleteJar,build)

Now use the command ./gradlew createJar to build the jar. The output file will be inside /yourLibrary/libs/ folder.

screen-shot-2017-02-08-at-11-45-13-am

Create an AAR in Android Studio:

screen-shot-2017-02-08-at-11-49-17-am

Generating an AAR is easier than jar. Just use “./gradlew assembleRelease” and it will generate release AAR inside /yourLib/build/outputs/aar/ folder.

Use AAR or JAR file in Android Studio:

JAR :

add the following line inside dependencies <> tab of build.gradle
compile files(‘libs/myJarLib.jar’)
myJarLib.jar should be inside ‘libs’ folder.

screen-shot-2017-02-08-at-3-20-25-pm

AAR :

Add the following inside dependencies <> tab :
compile(name:”myAarLib” ,ext : ‘aar’)

and ( not inside dependencies<>)

Rebuild the project and it should work.

Источник

Оцените статью