Как вручную включить внешний пакет 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

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

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

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

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

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

Импорт AAR

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

Найти файл AAR

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

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

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

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

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

Выбрать модуль

Ответ 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

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

  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 <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 способа:

Первый путь

  1. Откройте Android Studio и перейдите в окно "Создать новый модуль", нажав File-> Новый-> Новый модуль...

enter image description here

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

  2. Добавьте в файл build.gradle зависимость, которая принадлежит вашему Modlue app.

    зависимости {   ...

    implementation project(path: ':your aar lib name')
    

    }

Это все.

Второй способ

  1. Создайте папку в каталоге libs ,, например aars.

  2. Поместите свою aar lib в папку aars.

  3. Добавьте фрагмент кода

repositories { flatDir { dirs 'libs/aars' } }

в файл build.gradle принадлежат модулю приложения.

  1. Добавьте в файл 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

  1. Перейти в ФайлСтруктура проекта

enter image description here

  1. Модули и нажмите на +

enter image description here

  1. Выберите Импорт .aar Package

enter image description here

  1. Найти маршрут .aar

enter image description here

  1. Завершите и примените, затем проверьте, добавлен ли пакет

enter image description here

  1. Теперь в модуле приложения нажмите + и Зависимость модуля

enter image description here

  1. Проверьте пакет библиотеки и ОК

enter image description here

  1. Проверьте добавленную зависимость

enter image description here

  1. И структура проекта, как это

enter image description here

Ответ 19

В моем случае просто работайте, когда я добавляю "проект" для компиляции:

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


dependencies {
   compile project('com.x.x:x:1.0.0')
}

Ответ 20

Вы можете сделать что-то вроде этого:

  1. Поместите свои локальные библиотеки (с расширением:.jar,.aar,...) в папку 'libs' (или другую, если хотите).

  2. В build.gradle (уровень приложения) добавьте эту строку в зависимости

    реализация fileTree (включает: ['*.jar', '*.aar'], dir: 'libs')