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

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

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

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

Solutions Collecting From Web of "Как вручную включить внешний пакет aar с использованием новой системы сборки Gradle Android"

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

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

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

Импорт AAR

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

Найти файл AAR

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

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

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

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

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

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

Вы можете ссылаться на файл aar из репозитория. Maven – это вариант, но есть более простое решение: поместите файл aar в каталог libs и добавьте репозиторий каталога.

 repositories { mavenCentral() flatDir { dirs 'libs' } } 

Затем обратитесь к библиотеке в разделе зависимости:

 dependencies { compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar' } 

Вы можете посмотреть сообщение в блоге Min'an для получения дополнительной информации.

Следующий подход работает с последней студией Android (> v0.8.x):

  • Сохраните файл libs папке с папками модуля приложения (например: <project>/<app>/libs/myaar.aar )

  • Добавьте ниже, чтобы создать.gradle вашей папки «app» (не root вашего проекта root.gradle). Обратите внимание на имя в строке компиляции, это myaar @ aar not myaar.aar.

     dependencies { compile 'package.name.of.your.aar:myaar@aar' } repositories{ flatDir{ dirs 'libs' } } 
  • Нажмите « Tools -> Android -> Sync Project with Gradle Files

В настоящее время ссылка на локальный файл .aar не поддерживается (как подтвердил Ксавье Дюкрочет)

Вместо этого вы можете создать локальный репозиторий Maven (гораздо более простой, чем он звучит) и ссылаться на .aar.

Я написал блокпост, в котором подробно описывается, как заставить его работать здесь:

http://www.flexlabs.org/2013/06/using-local-aar-android-library-packages-in-gradle-builds

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

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

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

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

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> 

Надеюсь, это сработает.

К сожалению, ни одно из решений здесь не работало (я получаю неразрешенные зависимости). Что, наконец, сработало и является самым простым способом IMHO: выделите имя проекта из Android Studio, затем File -> New Module -> Import JAR или AAR Package. Кредит идет на решение в этом сообщении

Вы можете добавить несколько зависимостей 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']) } 

У меня также была эта проблема. Этот отчет о проблеме: 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 ... } 

Я нашел это обходное решение для отслеживания проблем 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 в неправильную папку, как вы можете видеть ниже, я думал, что должен поместить в корневую папку, поэтому я создал там папку libs ( 1 на картинке), но внутри папки приложения уже есть libs , вы должны поместить во вторую libs , надеюсь, что эта помощь поможет тем, у кого такая же проблема, как и у меня:

Введите описание изображения здесь