Как вручную включить внешний пакет aar с помощью новой системы Gradle Android Build
Я экспериментировал с новой системой сборки Android, и у меня возникла небольшая проблема. Я скомпилировал собственный пакет aar ActionBarSherlock, который я назвал "actionbarsherlock.aar". То, что я пытаюсь сделать, на самом деле использовать этот aar для создания моего последнего APK. Если я включу всю библиотеку ActionBarSherlock в качестве модуля андроида-библиотеки в свой основной проект, используя проект компиляции ( ": actionbarsherlock" ), я смогу успешно построить без каких-либо проблем.
Но моя проблема заключается в том, что я хочу предоставить эту зависимость как файл aar файла в отдельности, просто если бы я был JAR, тогда я не могу понять, как правильно включить его в мой проект. Я попытался использовать конфигурацию компиляции, но это не работает. Я продолжаю получать не могу найти символ во время компиляции, который говорит мне, что class.jar из пакета aar не попадает в путь к классам.
Кто-нибудь знает о синтаксисе для ручного включения пакета aar в качестве файла?
build.gradle
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.4'
}
}
apply plugin: 'android'
repositories {
mavenCentral()
}
dependencies {
compile files('libs/actionbarsherlock.aar')
}
android {
compileSdkVersion 15
buildToolsVersion "17.0"
}
РЕДАКТИРОВАТЬ: Таким образом, ответ заключается в том, что он в настоящее время не поддерживается, здесь issue, если вы хотите его отслеживать.
EDIT: В настоящее время, поскольку это все еще не поддерживается напрямую, лучшей альтернативой, по-видимому, является предлагаемое решение от @RanWakshlak
EDIT: проще, используя синтаксис, предложенный @VipulShah
Ответы
Ответ 1
Пожалуйста, следуйте нижеприведенным инструкциям, чтобы заставить его работать (я тестировал его до Android Studio 2.2)
Допустим, вы сохранили файл aar в папке libs. (предположим, что имя файла cards.aar
)
затем в приложении build.gradle
укажите следующую команду и нажмите "Синхронизировать проект" с файлами Gradle.
Открыть уровень проекта build.gradle и добавить flatDir{dirs 'libs'}
, как показано ниже
allprojects {
repositories {
jcenter()
flatDir {
dirs 'libs'
}
}
}
и теперь откройте файл build.grdle на уровне приложения и добавьте .aar
файл
dependencies {
compile(name:'cards', ext:'aar')
}
Если все будет хорошо, вы увидите, что запись в библиотеке производится в build → exploded-aar
Также обратите внимание, что если вы импортируете файл .aar из другого проекта, у которого есть зависимости, вам также необходимо включить их в свой build.gradle.
Ответ 2
- Щелкните правой кнопкой мыши на своем проекте и выберите "Открыть настройки модуля" .
![Открыть настройки модуля]()
- Нажмите кнопку "+" в левом верхнем углу окна, чтобы добавить новый модуль.
![Добавить новый модуль]()
- Выберите "Импорт пакета .JAR или .AAR" и нажмите кнопку "Далее" .
![Импорт AAR]()
- Найдите файл AAR с помощью кнопки многоточия "..." рядом с полем "Имя файла".
![Найти файл AAR]()
- Откроем модуль приложения и щелкните панель Зависимости, чтобы добавить новый модуль в качестве зависимости.
![Панель зависимостей]()
- Используйте кнопку "+" на экране зависимостей и выберите "зависимость модуля" .
![Добавить зависимость от модуля]()
- Выберите модуль и нажмите "ОК" .
![Выбрать модуль]()
Ответ 3
Вы можете ссылаться на файл AAR из хранилища.
Maven - это вариант, но есть более простое решение: поместите файл aar в каталог libs и добавьте репозиторий каталога.
repositories {
mavenCentral()
flatDir {
dirs 'libs'
}
}
Затем обратитесь к библиотеке в разделе зависимостей:
dependencies {
implementation 'com.actionbarsherlock:actionbarsherlock:[email protected]'
}
Вы можете проверить сообщение в блоге Min'an для получения дополнительной информации.
Ответ 4
Ниже представлен подход к последней студией Android ( > v0.8.x):
-
Сохраните файл aar
в папке приложения libs
(например: <project>/<app>/libs/myaar.aar
)
-
Добавьте ниже, чтобы создать .gradle вашей папки "app" (не root вашего проекта root.gradle). Обратите внимание на имя в строке компиляции, это myaar @aar not myaar.aar.
dependencies {
compile 'package.name.of.your.aar:[email protected]'
}
repositories{
flatDir{
dirs 'libs'
}
}
-
Нажмите Tools -> Android -> Sync Project with Gradle Files
Ответ 5
раньше (по умолчанию)
implementation fileTree(include: ['*.jar'], dir: 'libs')
просто добавьте '*.aar'
во include
массив.
implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
это хорошо работает на Android Studio 3.x.
если вы хотите игнорировать некоторые библиотеки? делай так
implementation fileTree(include: ['*.jar', '*.aar'], exclude: 'test_aar*', dir: 'libs')
debugImplementation files('libs/test_aar-debug.aar')
releaseImplementation files('libs/test_aar-release.aar')
Ответ 6
В настоящее время ссылка на локальный файл .aar не поддерживается (как подтвердил Ксавьер Дюкрочет)
Вместо этого вы можете настроить локальный репозиторий Maven (гораздо более простой, чем он звучит) и ссылаться на .aar.
Я написал блокпост, в котором подробно описывается, как заставить его работать здесь:
http://www.flexlabs.org/2013/06/using-local-aar-android-library-packages-in-gradle-builds
Ответ 7
Я просто преуспел!
-
Скопируйте файл mylib-0.1.aar в папку libs/
-
Добавьте эти строки в конец build.gradle (должно быть приложение, а не проект):
repositories {
flatDir {
dirs 'libs'
}
}
dependencies {
compile 'com.example.lib:mylib:[email protected]'
}
-
Все идет нормально. Вот самый важный момент:
Gradle должен получить доступ к сети для зависимостей, если не включен режим автономной работы.
Убедитесь, что вы включили автономную работу с помощью флажка в Project Structures/Gradle
-- ИЛИ --
Настройте параметры прокси для доступа к сети.
Чтобы настроить параметры прокси-сервера, вы должны изменить файл проекта gradle.properties, настроив http и https отдельно, как показано ниже:
systemProp.http.proxyHost=proxy.example.com
systemProp.http.proxyPort=8080
systemProp.http.proxyUser=user
systemProp.http.proxyPassword=pass
systemProp.http.nonProxyHosts=localhost
systemProp.http.auth.ntlm.domain=example <for NT auth>
systemProp.https.proxyHost=proxy.example.com
systemProp.https.proxyPort=8080
systemProp.https.proxyUser=user
systemProp.https.proxyPassword=pass
systemProp.https.nonProxyHosts=localhost
systemProp.https.auth.ntlm.domain=example <for NT auth>
Надеюсь, это сработает.
Ответ 8
Вы можете добавить несколько зависимостей aar
только с несколькими строками кода.
Добавить локальный репозиторий flatDir
:
repositories {
flatDir {
dirs 'libs'
}
}
Добавьте каждый aar
в каталог libs
в конфигурацию зависимостей compile
:
fileTree(dir: 'libs', include: '**/*.aar')
.each { File file ->
dependencies.add("compile", [name: file.name.lastIndexOf('.').with { it != -1 ? file.name[0..<it] : file.name }, ext: 'aar'])
}
Ответ 9
К сожалению, ни одно из решений здесь не работало (я получаю неразрешенные зависимости). Что в конечном итоге сработало и является самым простым способом IMHO: выделите имя проекта из Android Studio, затем File → New Module → Import JAR или AAR Package. Кредит переходит к решению в этот пост
Ответ 10
Есть 2 способа:
Первый путь
- Откройте Android Studio и перейдите в окно "Создать новый модуль", нажав File-> Новый-> Новый модуль...
![enter image description here]()
Выберите пункт "Импорт пакета .JAR/.AAR" и нажмите кнопку "Далее"
Добавьте в файл build.gradle
зависимость, которая принадлежит вашему Modlue app
.
зависимости { ...
implementation project(path: ':your aar lib name')
}
Это все.
Второй способ
Создайте папку в каталоге libs
,, например aars
.
Поместите свою aar lib в папку aars.
Добавьте фрагмент кода
repositories {
flatDir {
dirs 'libs/aars'
}
}
в файл build.gradle
принадлежат модулю приложения.
- Добавьте в файл
build.gradle
зависимость, которая принадлежит вашему Modlue app
.
dependencies {
...
compile(name:'your aar lib name', ext:'aar')
}
Это все.
Если вы можете читать по-китайски ,, вы можете проверить блог 在 是 AAR 文以及 以及 如何 在 Android 开发 中 在
Ответ 11
У меня также была эта проблема. В этом выпуске сообщается: https://code.google.com/p/android/issues/detail?id=55863, по-видимому, говорит о том, что прямое обращение к файлу .AAR не поддерживается.
Возможно, альтернативой сейчас является определение библиотеки actionbarsherlock как библиотеки Gradle в родительском каталоге вашего проекта и соответствующей ссылки.
Синтаксис определен здесь http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Referencing-a-Library
Ответ 12
С Android Studio 3.4 и Gradle 5 вы можете просто сделать это следующим образом
dependencies {
implementation files('libs/actionbarsherlock.aar')
}
Ответ 13
В моем случае у меня есть некоторые варианты в моей библиотеке, и когда я создаю aar
из него, я потерпел неудачу из-за пропущенных зависимостей, поэтому мое решение состоит в том, чтобы добавить все зависимости из моей библиотеки с файлом arr
.
Итак, мой уровень проекта build.gradle
выглядит так:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.2'
}
}
allprojects {
repositories {
mavenCentral()
//add it to be able to add depency to aar-files from libs folder in build.gradle(yoursAppModule)
flatDir {
dirs 'libs'
}
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
build.gradle(modile app)
так:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "com.example.sampleapp"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
//your project depencies
...
//add lib via aar-depency
compile(name: 'aarLibFileNameHere', ext: 'aar')
//add all its internal depencies, as arr don't have it
...
}
и библиотека build.gradle
:
apply plugin: 'com.android.library'
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
//here goes library projects dependencies, which you must include
//in yours build.gradle(modile app) too
...
}
Ответ 14
Я попробовал все решение здесь, но никто не работает, тогда я понимаю, что сделал ошибку, я положил .aar
в неправильную папку, как вы можете видеть ниже, я думал, что должен поместить в корневую папку, поэтому я создал libs
там (1 на картинке), но внутри папки приложения уже есть libs
, вы должны добавить второй libs
, надеюсь, что эта помощь поможет тем, у кого есть такая же проблема, как у меня:
![введите описание изображения здесь]()
Ответ 15
Стандартный способ импорта файла AAR в приложение приведен в https://developer.android.com/studio/projects/android-library.html#AddDependency
Выберите "Файл" > "Создать" > "Новый модуль".
Нажмите "Импорт пакетов .JAR/.AAR" и нажмите "Далее".
Введите местоположение скомпилированного файла AAR или JAR и нажмите "Готово".
Пожалуйста, перейдите по ссылке выше для следующих шагов.
Ответ 16
Я нашел это обходное решение для отслеживания проблем на Android:
https://code.google.com/p/android/issues/detail?id=55863#c21
Трюк (а не исправление) заключается в том, чтобы изолировать ваши .AAR файлы в подпроекте и добавить ваши библиотеки как артефакты:
configurations.create("default")
artifacts.add("default", file('somelib.jar'))
artifacts.add("default", file('someaar.aar'))
Дополнительная информация:
Handling-transitive-dependencies-for-local-artifacts-jars-and-aar
Ответ 17
Просто для упрощения ответа
Если файл .aar присутствует локально, включите
compile project(':project_directory')
в зависимостях build.gradle вашего проекта.
Если файл .aar присутствует на пульте дистанционного управления, включите
compile 'com.*********.sdk:project_directory:[email protected]'
в зависимостях build.gradle вашего проекта.
Ответ 18
ОБНОВЛЕНИЕ ANDROID STUDIO 3.4
- Перейти в Файл → Структура проекта
![enter image description here]()
- Модули и нажмите на +
![enter image description here]()
- Выберите Импорт .aar Package
![enter image description here]()
- Найти маршрут .aar
![enter image description here]()
- Завершите и примените, затем проверьте, добавлен ли пакет
![enter image description here]()
- Теперь в модуле приложения нажмите + и Зависимость модуля
![enter image description here]()
- Проверьте пакет библиотеки и ОК
![enter image description here]()
- Проверьте добавленную зависимость
![enter image description here]()
- И структура проекта, как это
![enter image description here]()
Ответ 19
В моем случае просто работайте, когда я добавляю "проект" для компиляции:
repositories {
mavenCentral()
flatDir {
dirs 'libs'
}
}
dependencies {
compile project('com.x.x:x:1.0.0')
}
Ответ 20
Вы можете сделать что-то вроде этого:
-
Поместите свои локальные библиотеки (с расширением:.jar,.aar,...) в папку 'libs' (или другую, если хотите).
-
В build.gradle (уровень приложения) добавьте эту строку в зависимости
реализация fileTree (включает: ['*.jar', '*.aar'], dir: 'libs')