Добавление локальных файлов.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

  1. Используя простой подход с 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"))))
}
  1. Используя тот же подход, что и выборка из локального / удаленного репозитория 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, я все еще мало что знаю, возможно, вы захотите отредактировать / прокомментировать этот ответ.

Ссылки:

  1. /questions/46895894/kak-ya-mogu-dobavit-lokalnyie-resursyi-ispolzuya-gradle-kotlin-dsl/55140493#55140493
  2. https://github.com/gradle/gradle/issues/9272

В моем случае ни один из ответов выше не сработал! так как у меня был другой продукт repositories{ flatDir{ dirs 'libs' } }

не работал! В итоге я указал точное местоположение каталога libs:

repositories{
flatDir{
    dirs 'src/main/libs'
}

}

Думаю, нужно вводить flatDirs, как это, когда есть разные productFlavors в build.gradle

Для тех, у кого есть эта проблема с Android Studio 1.4, я заставил ее работать, создав модуль в проекте, который содержит 2 вещи.

  1. build.gradle со следующим содержимым:

    configurations.create("default")

    artifacts.add("default", file('facebook-android-sdk-4.7.0.aar'))

  2. файл 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 приложения (путь: ': имя проекта')

Другие вопросы по тегам