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


  1. Правой Кнопкой Мыши на проекте и выберите "Настройки Модуля".

Open module settings

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

Add new module

  1. выберите "импорт .банка или. Пакет AAR" и нажимаем кнопку "далее" кнопка.

Import AAR

  1. находим файл AAR, используя кнопку "..." рядом с полем "имя файла".

Find AAR file

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

Dependencies pane

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

Add module dependency

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

Choose module


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


Я только что преуспел!

  1. скопировать mylib-0.1.ААР на libs/ папку

  2. добавьте эти строки в нижнюю часть построить.Gradle в (должно быть приложение, а не проект):

    repositories {
       flatDir {
           dirs 'libs'
       }
    }
    dependencies {
        compile 'com.example.lib:mylib:0.1@aar'
    }
    
  3. пока все хорошо. Вот самый важный момент:--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, надеюсь, это поможет тем, у кого такая же проблема, как у меня:

enter image description here


стандартный способ импорта файла AAR в приложение приведен в https://developer.android.com/studio/projects/android-library.html#AddDependency

Выберите Файл > Создать > Новый Модуль. Нажмите Кнопку Импорт .СОСУД./Пакет AAR затем нажмите кнопку Далее. Введите расположение скомпилированного файла AAR или JAR и нажмите кнопку Готово.

пожалуйста, обратитесь к ссылке выше для следующих шагов.


есть 2 пути:

  • Первый способ

1:Откройте Android Studio и перейдите в окно "создать новый модуль"по файлу->создать->новый модуль ...

enter image description here

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')
}