Как вручную включить внешний пакет aar с помощью новой системы сборки Gradle Android
я экспериментировал с новой системой сборки android, и у меня возникла небольшая проблема. Я собрал свой собственный пакет AAR ActionBarSherlock, который я назвал " actionbarsherlock.ААР. То, что я пытаюсь сделать, на самом деле использует этот aar для создания моего окончательного APK. Если я включу всю библиотеку ActionBarSherlock в качестве модуля Android-библиотеки в свой основной проект, используя compile project (': actionbarsherlock'), я смогу успешно построить без каких-либо проблем.
но мой проблема в том, что я хочу предоставить эту зависимость как файловый пакет AAR вручную, просто если я буду JAR, то я не могу понять, как правильно включить его в свой проект. Я попытался использовать конфигурацию компиляции, но это, похоже, не работает. Я продолжаю получать не могу найти символ во время компиляции, который говорит мне, что классы.jar из пакета aar не включается в путь к классам.
кто-нибудь знает синтаксис для ручного включения пакета aar в качестве файл?
построить.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"
}
EDIT: таким образом, ответ заключается в том, что в настоящее время он не поддерживается, вот вопрос если вы хотите отслеживать его.
EDIT: в настоящее время, поскольку это все еще не поддерживается напрямую, лучшей альтернативой кажется предлагаемое решение от @RanWakshlak
EDIT: также проще, используя синтаксис, предложенный @VipulShah
17 ответов
пожалуйста, выполните следующие действия , чтобы заставить его работать (я протестировал его до Android Studio 2.2)
допустим, вы сохранили файл aar в папке libs. (предположим, имя файла cards.aar
)
затем в приложении build.gradle
укажите следующее и нажмите Синхронизировать проект с файлами Gradle.
Откройте сборку уровня проекта.Gradle и добавить flatDir{dirs 'libs'}
как сделал ниже
allprojects {
repositories {
jcenter()
flatDir {
dirs 'libs'
}
}
}
и теперь откройте сборку уровня приложения.grdle файл и добавить
dependencies {
compile(name:'cards', ext:'aar')
}
если все идет хорошо, вы увидите, что запись библиотеки сделана в build - > exploded-aar
Также обратите внимание, что если вы импортируете .файл aar из другого проекта, который имеет зависимости, которые вам нужно будет включить в свою сборку.Gradle, а также.
- Правой Кнопкой Мыши на проекте и выберите "Настройки Модуля".
- выберите "+" кнопка в левом верхнем углу окна, чтобы добавить новый модуль.
- выберите "импорт .банка или. Пакет AAR" и нажимаем кнопку "далее" кнопка.
- находим файл AAR, используя кнопку "..." рядом с полем "имя файла".
- держите модуль приложения выбранным и нажмите на зависимости панель для добавления нового модуля в качестве зависимости.
- использовать "+" на экране зависимостей и выберите "зависимость модуля".
- выберите модуль и нажмите на кнопку "ОК".
Вы можете ссылаться на файл AAR из репозитория. Maven-это вариант, но есть более простое решение: поместите файл aar в каталог libs и добавьте репозиторий каталогов.
repositories {
mavenCentral()
flatDir {
dirs 'libs'
}
}
затем обратитесь к библиотеке в разделе зависимостей:
dependencies {
compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'
}
Вы можете ознакомиться миньань блоге для получения дополнительной информации.
приведенный ниже подход работает с последней Android studio (> v0.8.x):
сохранить
aar
файл под модулем приложения (например:<project>/<app>/libs/myaar.aar
)-
добавить, чтобы создать.gradle вашей папки модуля " app " (а не корневой сборки проекта.Gradle в). Обратите внимание на имя в строке компиляции, это myaar@aar не myaar.ААР.
dependencies { compile 'package.name.of.your.aar:myaar@aar' } repositories{ flatDir{ dirs 'libs' } }
клик
Tools -> Android -> Sync Project with Gradle Files
В настоящее время ссылка на локальный .файл aar не поддерживается (что подтверждает Xavier Ducrochet)
вместо этого вы можете настроить локальный репозиторий Maven (гораздо более простой, чем кажется) и ссылаться на него .ААР оттуда.
Я написал blogpost подробно, как заставить его работать здесь:
http://www.flexlabs.org/2013/06/using-local-aar-android-library-packages-in-gradle-builds
вы можете добавить несколько aar
зависимости с несколькими строками кода.
Добавить локальный flatDir
репозитория:
repositories {
flatDir {
dirs 'libs'
}
}
добавить aar
на
Я только что преуспел!
скопировать mylib-0.1.ААР на libs/ папку
-
добавьте эти строки в нижнюю часть построить.Gradle в (должно быть приложение, а не проект):
repositories { flatDir { dirs 'libs' } } dependencies { compile 'com.example.lib:mylib:0.1@aar' }
пока все хорошо. Вот самый важный момент:--3-->
Gradle должен получить доступ к сети для зависимостей, если автономный режим не включен.
убедитесь, что вы включили Автономная работа через галку в Структур/Ш
-- или --
настройки параметры прокси-сервера для доступа к сети.
для настройки параметров прокси-сервера необходимо изменить gradle.свойства файл, настройка 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>
надеюсь, что это работает.
к сожалению, ни одно из решений работал для меня (я получаю неразрешенные зависимости). Что, наконец, сработало и является самым простым способом IMHO: выделите имя проекта из Android Studio, затем файл - > новый модуль - > импорт JAR или пакета AAR. Кредит идет на решение в этот пост
before (по умолчанию)
implementation fileTree(include: ['*.jar'], dir: 'libs')
просто добавить '*.aar'
на include
массив.
implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
Он хорошо работает на Android Studio 3.x.
У меня также была эта проблема. Этот отчет о проблеме: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
в моем случае у меня есть некоторые депрессии в моей библиотеке, и когда я создаю aar
из него я потерпел неудачу из-за пропущенных депрессий, поэтому мое решение-добавить все депрессии из моего lib с .
Итак, мой уровень проекта 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
...
}
Я пробовал все решения здесь, но никто не работает, тогда я понимаю, что сделал ошибку, я поставил .aar
в неправильной папке, как вы можете видеть ниже, я думал, что должен поместить в корневую папку, поэтому я создал libs
папка там (1 на картинке), но внутри папки приложения уже есть libs
, вы должны поставить во втором libs
, надеюсь, это поможет тем, у кого такая же проблема, как у меня:
стандартный способ импорта файла AAR в приложение приведен в https://developer.android.com/studio/projects/android-library.html#AddDependency
Выберите Файл > Создать > Новый Модуль. Нажмите Кнопку Импорт .СОСУД./Пакет AAR затем нажмите кнопку Далее. Введите расположение скомпилированного файла AAR или JAR и нажмите кнопку Готово.
пожалуйста, обратитесь к ссылке выше для следующих шагов.
есть 2 пути:
- Первый способ
1:Откройте Android Studio и перейдите в окно "создать новый модуль"по файлу->создать->новый модуль ...
2:выберите "Импорт .СОСУД./AAR Package" пункт и нажмите кнопку Далее
3:Добавить зависимость в , принадлежащих app
Modlue.
dependencies {
...
implementation project(path: ':your aar lib name')
}
вот и все.
- второй путь
1 создайте папку в libs
,каталог, например aars
.
2 Поместите AAR lib в папку aars.
3 Добавьте фрагмент кода
repositories {
flatDir {
dirs 'libs/aars'
}
}
в своем build.gradle
файл принадлежит модулю приложения.
4 добавить зависимость в , принадлежащих app
Modlue.
dependencies {
...
compile(name:'your aar lib name', ext:'aar')
}
вот и все
если вы можете прочитать китайский, то вы можете проверить блог 什么是AAR文件以及如何在Android开发中使用
Я нашел этот обходной путь в трекере проблем Android: https://code.google.com/p/android/issues/detail?id=55863#c21
трюк (не исправление) заключается в изоляции вашего .AAR файлы в подпроект и добавляя ваш libs как артефакты:
configurations.create("default")
artifacts.add("default", file('somelib.jar'))
artifacts.add("default", file('someaar.aar'))
Подробнее: обработка-транзитивные-зависимости-для-локальных-артефактов-банки-и-aar
просто, чтобы упростить ответ
Если .файл AAR локально присутствует, а затем включаетcompile project(':project_directory')
в зависимости от сборки.gradle вашего проекта.
Если .файл AAR, присутствующий на remote, затем включает
compile 'com.*********.sdk:project_directory:0.0.1@aar'
в зависимости от сборки.gradle вашего проекта.
в моем случае просто работать, когда я Добавить проект "" для составления:
repositories {
mavenCentral()
flatDir {
dirs 'libs'
}
}
dependencies {
compile project('com.x.x:x:1.0.0')
}