Как вручную включить внешний пакет aar с помощью новой системы сборки Gradle Android
Я экспериментировал с новой системой сборки Android, и я столкнулся с небольшой проблемой. Я скомпилировал собственный пакет aar ActionBarSherlock, который я назвал «actionbarsherlock.aar». То, что я пытаюсь сделать, на самом деле использовать этот aar для создания моего последнего APK. Если я включу всю библиотеку ActionBarSherlock в качестве модуля андроида-библиотеки в свой основной проект, используя проект компиляции («: actionbarsherlock»), я смогу успешно построить без каких-либо проблем.
Но моя проблема заключается в том, что я хочу предоставить эту зависимость как пакет aar file MANUALLY просто, если бы я был JAR, тогда я не могу понять, как правильно включить его в мой проект. Я попытался использовать конфигурацию компиляции, но это не работает. Я продолжаю получать, не могу найти символ во время компиляции, который говорит мне, что class.jar из пакета aar не включается в путь к classам.
Кто-нибудь знает о синтаксисе для ручного включения пакета aar в качестве файла?
- OpenCV в Android Studio
- Android Studio: Где окно вывода compiler errors?
- Студия Android добавляет нежелательное разрешение после запуска приложения на реальном устройстве
- Обновление конфликта конфликтов для игровых сервисов 9.4.0 Android studio 2.2
- Как импортировать библиотеку материалов в Android Studio?
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
- Многофункциональное приложение, основанное на библиотеке с несколькими вкусами в Android Gradle
- Как импортировать build.gradle в IntelliJ
- Прокси-сервер
- Нет кэшированной версии com.android.tools.build:gradle:0.9.1 для автономного режима
- Как добавить библиотеку (android-support-v7-appcompat) в IntelliJ IDEA
- Сбой сборки Android Studio с «Задачей» не найден в корневом проекте «Мой проект».
- Как использовать библиотеку поддержки Renderscript с Gradle
- AndroidStudio - Зависимости модhive в Gradle
Следуйте приведенным ниже инструкциям, чтобы заставить его работать (я тестировал его до Android Studio 2.2)
Допустим, вы сохранили файл aar в папке libs. (предположим, что имя файла – cards.aar
)
затем в приложении build.gradle
укажите следующий и щелкните проект синхронизации с файлами Gradle. Откройте Project build build.gradle и добавьте flatDir{dirs 'libs'}
как flatDir{dirs 'libs'}
ниже
allprojects { repositories { jcenter() flatDir { dirs 'libs' } } }
и теперь откройте файл build.grdle на уровне приложения и добавьте файл .aar
dependencies { compile(name:'cards', ext:'aar') }
Если все будет хорошо, вы увидите, что запись в библиотеке производится в build -> exploded-aar
Также обратите внимание, что если вы импортируете файл .aar из другого проекта, у которого есть зависимости, вам также необходимо включить их в свой build.gradle.
- Щелкните правой кнопкой мыши на своем проекте и выберите «Открыть настройки модуля» .
- Нажмите кнопку «+» в верхнем левом углу windows, чтобы добавить новый модуль.
- Выберите «Импорт .JAR или .AAR Package» и нажмите кнопку «Далее» .
- Найдите файл AAR с помощью кнопки многоточия «…» рядом с полем «Имя файла».
- Сохраните выбранный модуль приложения и щелкните панель « Зависимости», чтобы добавить новый модуль в качестве зависимости.
- Используйте кнопку «+» на экране зависимостей и выберите «Зависимость модуля» .
- Выберите модуль и нажмите «ОК» .
Вы можете ссылаться на файл aar из репозитория. Maven – вариант, но есть более простое решение: поместите файл aar в каталог libs и добавьте repository каталога.
repositories { mavenCentral() flatDir { dirs 'libs' } }
Затем обратитесь к библиотеке в разделе зависимости:
dependencies { compile 'com.actionbarsherlock:actionbarsherlock:[email protected]' }
Вы можете посмотреть сообщение в блоге Min’an для получения дополнительной информации.
Подход ниже работает с последней студией Android (> v0.8.x):
-
Сохраните файл
libs
папке с папками модуля приложения (например:
)/ /libs/myaar.aar -
Добавьте ниже, чтобы build.gradle вашей папке модуля «приложение» (а не корневой файл проекта build.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
В настоящее время ссылка на локальный файл .aar не поддерживается (как подтвердил Ксавье Дукроше)
Вместо этого вы можете создать локальный repository Maven (гораздо более простой, чем он звучит), и ссылаться на .aar.
Я написал блокпост, в котором подробно описывается, как заставить его работать здесь:
http://www.flexlabs.org/2013/06/using-local-aar-android-library-packages-in-gradle-builds
Вы можете добавить несколько зависимостей aar
с несколькими строками кода.
Добавить локальный repository 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..
Я просто преуспел!
-
Скопируйте файл 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 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
Надеюсь, это сработает.
К сожалению, ни одно из решений здесь не работало (я получаю неразрешенные зависимости). Что в конечном итоге сработало и является самым простым способом IMHO: выделите имя проекта из Android Studio, затем File -> New Module -> Import JAR или AAR Package. Кредит идет на решение в этом сообщении
раньше (по умолчанию)
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
из него, я потерпел неудачу из-за пропущенных зависимостей, поэтому мое решение состоит в том, чтобы добавить все варианты из моей библиотеки с файлом 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 ... }
и library 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
Нажмите «Файл»> «Создать»> «Новый модуль». Нажмите «Импорт пакетов .JAR / .AAR» и нажмите «Далее». Введите местоположение скомпилированного файла AAR или JAR и нажмите «Готово».
Пожалуйста, перейдите по ссылке выше для следующих шагов.
Существует два способа:
- Первый путь
1: откройте свою Android-студию и перейдите к окну «Создать новый модуль» с помощью File-> New-> New Module …
2: Выберите пункт «Импорт .JAR / .AAR Package» и нажмите следующую кнопку
3: Добавить зависимость в файле build.gradle
, принадлежащем вашему модулю Modlue.
dependencies { ... implementation project(path: ':your aar lib name') }
все это.
- второй путь
1 Создайте папку в каталоге libs
, например aars
.
Поместите свою aar lib в папку aars.
3 Добавьте fragment кода
repositories { flatDir { dirs 'libs/aars' } }
в ваш файл build.gradle
принадлежит модулю приложения.
4 Добавьте зависимость в файле build.gradle
который принадлежит вашему 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-файлы в подпроекте и добавить ваши библиотеки как артефакты:
configurations.create("default") artifacts.add("default", file('somelib.jar')) artifacts.add("default", file('someaar.aar'))
поconfigurations.create("default") artifacts.add("default", file('somelib.jar')) artifacts.add("default", file('someaar.aar'))
Дополнительная информация: Обработка-транзитивные зависимости для локальных артефактов-банок и ара
Просто для упрощения ответа
Если файл .aar присутствует локально, включите
compile project(':project_directory')
в зависимости от build.gradle вашего проекта.
Если файл .aar присутствует на удаленном компьютере, включите compile 'com.*********.sdk:project_directory:[email protected]'
в зависимости от build.gradle вашего проекта.
В моем случае просто работайте, когда я добавляю «проект» для компиляции:
repositories { mavenCentral() flatDir { dirs 'libs' } } dependencies { compile project('com.xx:x:1.0.0') }