Как включить JAR-зависимость в библиотеку AAR

Резюме:

У меня есть файл AAR, который зависит от JAR-файла, когда я создаю проект AAR, он не содержит JAR-код.

Детали:

У меня есть проект библиотеки Java SDK, который содержит код, который мы используем для веб-проектов Java и т. Д., Эта библиотека создается с использованием Gradle и располагается на внутреннем сервере-нексусе (как JAR).

objective состоит в том, чтобы обеспечить версию Android этой JAR-библиотеки через библиотеку AAR, которую могут использовать несколько приложений Android, и минимизировать усилия (и шаблонный код) для ее реализации. Этот файл AAR также загружается на сервер nexus, который будет использоваться проектами приложений Android.

Мой проект AAR включает в себя зависимость gradleиента для моей Java SDK-библиотеки (JAR), но при построении AAR не включает в себя какие-либо classы.

Код:

Это файл gradleиента проекта Java SDK:

 apply plugin: 'java' //noinspection GroovyUnusedAssignment sourceCompatibility = 1.7 version = '1.1.1' repositories { mavenCentral() } jar { from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) } } } dependencies { testCompile group: 'junit', name: 'junit', version: '4.11' testCompile 'org.apache.directory.studio:org.apache.commons.io:2.4' compile 'org.springframework:spring-web:3.1.1.RELEASE' compile 'com.google.code.gson:gson:2.3' } 

Это файл gradleиента для моего проекта AAR, обратите внимание, что я удалил объявления репозитория Maven на мой сервер nexus. Думаю, это не имеет значения для этого вопроса.

 apply plugin: 'com.android.library' android { compileSdkVersion 23 buildToolsVersion "23.0.1" defaultConfig { minSdkVersion 16 targetSdkVersion 23 versionCode 1 versionName "2.2.2" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } lintOptions { abortOnError false } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.1.0' compile ('com.mycompany:javasdk:1.1.1') } 

Это файл gradleиента для моего Android-проекта, снова я удалил ссылки сервера nexus:

 apply plugin: 'com.android.application' android { compileSdkVersion 23 buildToolsVersion "23.0.1" defaultConfig { applicationId "com.mycompany.application1" minSdkVersion 16 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) testCompile 'junit:junit:4.12' compile 'com.android.support:appcompat-v7:23.1.0' compile ('com.mycompany:androidsdk:[email protected]') } 

ПРИМЕЧАНИЕ. Сначала я решил проблему, добавив JAR в каталог lib проекта AAR, но это нежелательно. Это делает бесполезным сервер Nexus. Было бы неплохо, что мы можем просто набросать номер версии JAR в файле gradle проекта AAR, и обновление происходит автоматически во время компиляции.

ПРИМЕЧАНИЕ 2. Я попытался добавить transitive=true для моей зависимости AAR в Android-проекте, но ничего не решил, реальная проблема в том, что при создании проекта AAR код проекта JAR не попадает в комплект.

Вы можете добавить эту задачу:

 task copyLibs(type: Copy) { from configurations.compile into 'libs' } 

Зависимости будут загружены из вашего Nexus, но когда вам понадобится пакет библиотеки, сначала выполните эту задачу, и файлы jar будут скопированы и включены в окончательный aar .

По умолчанию AAR не включает никаких зависимостей. Решение, упомянутое @Hector, должно работать для плагина gradle <3.0. Для Gradle plugin 3.0+ попробуйте настроить конфигурацию, как указано здесь .

 android { ... } // Add a new configuration to hold your dependencies configurations { myConfig } dependencies { .... myConfig 'com.android.support:appcompat-v7:26.1.0' myConfig 'com.android.support:support-v4:26.1.0' ... } task copyLibs(type: Copy) { from configurations.myConfig into "libs" } 
  • Countdowntimer в минутах и ​​секундах
  • Может ли основной метод в Java возвращать что-то?
  • SDK Manager.exe не работает
  • Как Java реализует объединение строк?
  • Создание арреалиста объектов
  • Программно скрыть / показать Android Soft Keyboard
  • сортировка списка карт
  • Преобразование java.util.Properties в HashMap
  • Как установить фоновые рисунки программно в Android
  • Проблемы с https (нет сертификата партнера) в android
  • Как установить тайм-аут в библиотеке дооснащения?
  • Давайте будем гением компьютера.