Как вручную включить внешний пакет aar с помощью новой системы сборки Gradle Android

Я экспериментировал с новой системой сборки Android, и я столкнулся с небольшой проблемой. Я скомпилировал собственный пакет aar ActionBarSherlock, который я назвал «actionbarsherlock.aar». То, что я пытаюсь сделать, на самом деле использовать этот aar для создания моего последнего APK. Если я включу всю библиотеку ActionBarSherlock в качестве модуля андроида-библиотеки в свой основной проект, используя проект компиляции («: actionbarsherlock»), я смогу успешно построить без каких-либо проблем.

Но моя проблема заключается в том, что я хочу предоставить эту зависимость как пакет aar file MANUALLY просто, если бы я был JAR, тогда я не могу понять, как правильно включить его в мой проект. Я попытался использовать конфигурацию компиляции, но это не работает. Я продолжаю получать, не могу найти символ во время компиляции, который говорит мне, что class.jar из пакета aar не включается в путь к classам.

Кто-нибудь знает о синтаксисе для ручного включения пакета 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" } 

EDIT: Таким образом, ответ заключается в том, что он в настоящее время не поддерживается, вот и проблема, если вы хотите отслеживать его.

EDIT: В настоящее время, поскольку это все еще не поддерживается напрямую, лучшей альтернативой, по-видимому, является предлагаемое решение от @RanWakshlak

EDIT: Также проще использовать синтаксис, предложенный @VipulShah

Следуйте приведенным ниже инструкциям, чтобы заставить его работать (я тестировал его до 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.

  1. Щелкните правой кнопкой мыши на своем проекте и выберите «Открыть настройки модуля» .

Открыть настройки модуля

  1. Нажмите кнопку «+» в верхнем левом углу windows, чтобы добавить новый модуль.

Добавить новый модуль

  1. Выберите «Импорт .JAR или .AAR Package» и нажмите кнопку «Далее» .

Импорт AAR

  1. Найдите файл AAR с помощью кнопки многоточия «…» рядом с полем «Имя файла».

Найти файл AAR

  1. Сохраните выбранный модуль приложения и щелкните панель « Зависимости», чтобы добавить новый модуль в качестве зависимости.

Панель зависимостей

  1. Используйте кнопку «+» на экране зависимостей и выберите «Зависимость модуля» .

Добавить зависимость модуля

  1. Выберите модуль и нажмите «ОК» .

Выберите модуль

Вы можете ссылаться на файл 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.. 

Я просто преуспел!

  1. Скопируйте файл mylib-0.1.aar в папку libs /

  2. Добавьте эти строки в конец build.gradle (должно быть приложение, а не проект):

     repositories { flatDir { dirs 'libs' } } dependencies { compile 'com.example.lib:mylib:[email protected]' } 
  3. Все идет нормально. Вот самый важный момент:

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') } 
  • Как сообщить Gradle использовать конкретную версию JDK?
  • Как создать подписанный файл apk для выпуска с помощью Gradle?
  • Как запустить задачу копирования с помощью Android-студии в папку с ресурсами
  • Не удалось найти свойство 'outputFile' на com.android.build.gradle.internal.api.ApplicationVariantImpl
  • Не удалось найти com.google.android.gms: play-services: 3.1.59 3.2.25 4.0.30 4.1.32 4.2.40 4.2.42 4.3.23 4.4.52 5.0.77 5.0.89 5.2.08 6.1. 11 6.1.71 6.5.87
  • Кэш зависимостей Gradle может быть поврежден (это иногда происходит после таймаута сетевого соединения).
  • Как исключить все случаи транзитивной зависимости при использовании Gradle?
  • После обновления Android-студия не смогла создать родительский каталог для файла блокировки
  • Как включить зависимость библиотечного модуля в проекте Android Studio?
  • Как / когда создавать файлы обложек Gradle?
  • Как изменить имя пакета приложения Android при сборке с Gradle?
  • Давайте будем гением компьютера.