Добавление локальных файлов.aar в сборку Gradle с использованием flatDirs не работает
Мне известен этот вопрос: добавление локальных файлов.aar в мою сборку Gradle, но решение не работает для меня.
Я попытался добавить это утверждение на верхний уровень моего build.gradle
файл:
repositories {
mavenCentral()
flatDir {
dirs 'libs'
}
}
Я также положил slidingmenu.aar
подать в /libs
и ссылался на это в dependencies
раздел: compile 'com.slidingmenu.lib:slidingmenu:1.0.0@aar'
но это не сработало вообще.
Я старался compile files('libs/slidingmenu.aar')
но не повезло.
Что мне не хватает? Есть идеи?
PS Android Studio 0.8.2
16 ответов
Основываясь на ответе Иосии, вот как я заставил его работать.
Следуя его инструкциям (под редакцией) (Файл -> Новый -> Новый модуль -> Импорт.JAR /.AAR) и импортируйте свой.AAR.
Затем в вашем проекте build.gradle (не на верхнем уровне, а в разделе "app") добавьте следующее (в разделе зависимостей):
dependencies {
compile project(':Name-Of-Your-Project')
}
Примечание. Имя вашего проекта должно совпадать с именем папки, которая была добавлена после импорта файла AAR (на том же уровне, что и app/.idea
под самой верхней папкой уровня). Или, говоря по-другому...
Мое заявление.idea приложение build.gradle (вот где добавить компилируемый проект (':ProjectName') в раздел зависимостей) ProjectName (добавляется автоматически после импорта, соответствует имени вашего файла aar) строить Gradle так далее
У меня это работало под управлением Android Studio 0.8.0. Не забудьте синхронизировать Gradle (используя кнопку на панели инструментов или в меню Файл-> Синхронизировать) после того, как вы это сделаете.
(Спасибо Иосии за то, что она направила меня в правильном направлении)
(Примечание: до этого я пытался добавить его в папку libs, пытаясь манипулировать верхним уровнем build.gradle
и уровень приложения build.gradle
, но ничего из этого не сработало для моих файлов aars -jar's будет работать нормально, но не для файлов aar)
Обновление: как упоминалось @amram99, проблема была исправлена с момента выпуска Android Studio v1.3.
Протестировано и проверено с приведенными ниже спецификациями
- Android Studio v1.3
- Gradle плагин v1.2.3
- Gradle v2.4
Что работает сейчас
Теперь вы можете импортировать локальный файл aar с помощью параметра " Файл"> "Новый"> "Новый модуль"> "Импортировать пакет.JAR/.AAR" в Android Studio v1.3.
Однако приведенный ниже ответ остается верным и эффективным независимо от изменений в Android Studio, так как он основан на скриптах gradle.
Старый ответ: в недавнем обновлении люди на android сломали включение локальных файлов aar с помощью опции меню добавления нового модуля Android Studio. Проверьте проблему, указанную здесь. Независимо от всего, что входит и выходит из списка возможностей IDE, приведенный ниже метод работает, когда дело доходит до работы с локальными файлами aar.(Протестировано сегодня):
Поместите файл aar в каталог libs (создайте его при необходимости), затем добавьте следующий код в свой build.gradle:
dependencies {
compile(name:'nameOfYourAARFileWithoutExtension', ext:'aar')
}
repositories{
flatDir{
dirs 'libs'
}
}
Редактировать: правильный способ (в настоящее время) использовать локальный файл AAR в качестве зависимости сборки - использовать мастер импорта модулей (Файл | Новый модуль | Импорт.JAR или.AAR пакет), который автоматически добавит.aar в качестве модуля библиотеки в вашем проекте.
Старый ответ
Попробуй это:
allprojects {
repositories {
jcenter()
flatDir {
dirs 'libs'
}
}
}
...
compile(name:'slidingmenu', ext:'aar')
Я получил это работает на Android Studio 2.1. У меня есть модуль под названием "Native_Ads", который используется несколькими проектами.
Сначала я создал каталог в своем модуле Native_ads с именем "aars", а затем поместил туда файл aar.
Структура каталогов:
libs/
aars/ <-- newly created
src/
build.gradle
etc
Затем другие изменения:
Файл верхнего уровня Gradle:
allprojects {
repositories {
jcenter()
// For module with aar file in it
flatDir {
dirs project(':Native_Ads').file('aars')
}
}
}
Файл build.gradle модуля приложения: - без изменений
Файл settings.gradle (для включения модуля):
include ':app'
include 'Native_Ads'
project(':Native_Ads').projectDir = new File(rootProject.projectDir, '../path/to/Native_Ads')
Gradle-файл для модуля Native_Ads:
repositories {
jcenter()
flatDir {
dirs 'aars'
}
}
dependencies {
compile(name:'aar_file_name_without_aar_extension', ext:'aar')
}
Вот и все. Очистить и построить.
Это решение работает с Android Studio 4.0.1.
Помимо создания нового модуля, как предложено в решении выше, вы можете попробовать это решение.
Если у вас есть несколько модулей в вашем приложении и вы хотите добавить ARA только к одному из модулей, это решение пригодится.
В вашем корневом проекте build.gradle
добавлять
repositories {
flatDir {
dirs 'libs'
}}
Затем в модуле, в который вы хотите добавить файл.aar локально. просто добавьте строки кода ниже.
dependencies {
api fileTree(include: ['*.aar'], dir: 'libs')
implementation files('libs/<yourAarName>.aar')
}
Удачного кодирования:)
Самый простой способ - добавить его в качестве модуля.
Это создаст новый модуль, содержащий файл aar, так что вам просто нужно включить этот модуль в качестве зависимости впоследствии
В моем случае я просто помещаю файл aar в libs и добавляю
dependencies {
...
api fileTree(dir: 'libs', include: ['*.aar'])
...
}
в build.gradle и все работает. Я думаю, что это похоже на сгенерированную зависимость по умолчанию:
implementation fileTree(dir: 'libs', include: ['*.jar'])
Это моя структура, и как я решаю это:
MyProject / app / libs /mylib-1.0.0.aar
MyProject / приложение /myModulesFolder/myLibXYZ
На build.gradle
из проекта / приложения /myModulesFolder/myLibXYZ
Я поставил это:
repositories {
flatDir {
dirs 'libs', '../../libs'
}
}
compile (name: 'mylib-1.0.0', ext: 'aar')
Готово и работает нормально, мой подмодуль XYZ зависит от некоторой библиотеки из основного модуля.
Вы можете сделать это таким образом. Это должно идти в формате Maven:
repositories {
maven { url uri('folderName')}
}
И тогда ваш AAR должен перейти в структуру папок для идентификатора группы "com.example":
folderName/
com/
example/
verion/
myaar-version.aar
Тогда ссылка как зависимость:
compile 'com.example:myaar:version@aar'
куда version
версия вашего aar-файла (то есть 3.0 и т. д.)
Если вы уже используете Kotlin Gradle DSL, альтернатива его использованию:
Вот моя структура проекта
|-root
|----- app
|--------- libs // I choose to store the aar here
|-------------- my-libs-01.aar
|-------------- my-libs-02.jar
|--------- build.gradle.kts // app module gradle
|----- common-libs // another aar folder/directory
|----------------- common-libs-01.aar
|----------------- common-libs-02.jar
|----- build.gradle.kts // root gradle
Мой app/build.gradle.kts
- Используя простой подход с
fileTree
// android related config above omitted...
dependencies {
// you can do this to include everything in the both directory
// Inside ./root/common-libs & ./root/app/libs
implementation(fileTree(mapOf("dir" to "libs", "include" to listOf("*.jar", "*.aar"))))
implementation(fileTree(mapOf("dir" to "../common-libs", "include" to listOf("*.jar", "*.aar"))))
}
- Используя тот же подход, что и выборка из локального / удаленного репозитория maven с помощью
flatDirs
// android related config above omitted...
repositories {
flatDir {
dirs = mutableSetOf(File("libs"), File("../common-libs")
}
}
dependencies {
implementation(group = "", name = "my-libs-01", ext = "aar")
implementation(group = "", name = "my-libs-02", ext = "jar")
implementation(group = "", name = "common-libs-01", ext = "aar")
implementation(group = "", name = "common-libs-02", ext = "jar")
}
В group
был необходим из-за его обязательного (не необязательного / имеет значение по умолчанию) в kotlin implementation
, Смотри ниже:
// Filename: ReleaseImplementationConfigurationAccessors.kt
package org.gradle.kotlin.dsl
fun DependencyHandler.`releaseImplementation`(
group: String,
name: String,
version: String? = null,
configuration: String? = null,
classifier: String? = null,
ext: String? = null,
dependencyConfiguration: Action<ExternalModuleDependency>? = null
)
Отказ от ответственности: разница с использованием № 1 и flatDirs
№ 2, я все еще мало что знаю, возможно, вы захотите отредактировать / прокомментировать этот ответ.
Ссылки:
В моем случае ни один из ответов выше не сработал! так как у меня был другой продукт repositories{
flatDir{
dirs 'libs'
}
}
не работал! В итоге я указал точное местоположение каталога libs:
repositories{
flatDir{
dirs 'src/main/libs'
}
}
Думаю, нужно вводить flatDirs, как это, когда есть разные productFlavors в build.gradle
Для тех, у кого есть эта проблема с Android Studio 1.4, я заставил ее работать, создав модуль в проекте, который содержит 2 вещи.
build.gradle со следующим содержимым:
configurations.create("default")
artifacts.add("default", file('facebook-android-sdk-4.7.0.aar'))
файл aar (в этом примере "facebook-android-sdk-4.7.0.aar")
Затем включите новую библиотеку в качестве зависимости модуля. Теперь вы можете использовать встроенный AAR без включения источников в проект.
Кредит в Facebook за этот взлом. Я нашел решение при интеграции Android SDK в проект.
Эта строка включает в себя все aar
а также jar
файлы из libs
папка:
implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs/')
Это решение работает с Android Studio 4.0.1.
Помимо создания нового модуля, как предложено в решении выше, вы можете попробовать это решение.
Если у вас есть несколько модулей в вашем приложении и вы хотите добавить ARA только к одному из модулей, это решение пригодится.
В вашем корневом проекте build.gradle
добавлять
repositories {
mavenCentral()
flatDir {
dirs 'libs'
}
Затем в модуле, в который вы хотите добавить файл.aar локально. просто добавьте строки кода ниже.
dependencies {
api fileTree(include: ['*.aar'], dir: 'libs')
implementation files('libs/<yourAarName>.aar')
}
Удачного кодирования:)
В зависимости от build.gradle я добавил файлы .aar следующим образом:
compileOnly files('libs/api-release.aar')
Добавьте ниже в проект реализации файла gradle приложения (путь: ': имя проекта')