Внешние проекты библиотеки Android с Gradle
Я пытаюсь создать проект Android с Gradle и Android Gradle плагином. Я хотел бы зависеть от библиотечных проектов, найденных во внешних (maven) репозиториях, например. ActionBarSherlock.
Это возможно в соответствии с официальным сайтом :
Использование библиотеки выполняется одним из следующих способов:
Настройка нескольких проектов. Читайте здесь: http://www.gradle.org/docs/current/userguide/multi_project_builds.html
Зависимости через репо, такие как maven или плющ.
Текущее содержимое моего build.gradle:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.2'
}
}
apply plugin: 'android'
repositories {
mavenCentral()
}
dependencies {
compile 'com.actionbarsherlock:library:4.2.0'
}
android {
target = 'android-16'
sourceSets {
main {
manifest {
srcFile 'AndroidManifest.xml'
}
java {
srcDir 'src'
}
res {
srcDir 'res'
}
assets {
srcDir 'assets'
}
resources {
srcDir 'src'
}
}
}
}
Я использую Gradle 1.2. Когда я пытаюсь построить с помощью gradle assemble
, я получаю следующую ошибку:
Error: duplicate files during packaging of APK /[path to project]/build/apk/[project name]-debug-unaligned.apk
Path in archive: AndroidManifest.xml
Origin 1: /[path to project]/build/libs/[apk name]-debug.ap_
Origin 2: /[home directory]/.gradle/caches/artifacts-14/filestore/com.actionbarsherlock/actionbarsherlock/4.2.0/apklib/dd63451a922558005d8c10be1085b488ed731d19/actionbarsherlock-4.2.0.apklib
:packageDebug FAILED
Кажется, он пытается включить AndroidManifest.xml из проекта библиотеки и моего проекта. Если я удалю спецификацию manifest
в sourceSets
, я все равно получаю ту же ошибку.
Сайт упоминает использование apply plugin: 'android-library'
для проектов библиотеки; Я предполагаю, что это только при создании реальной библиотеки (с многопроектной настройкой), так как при этом не создается APK.
Как я могу заставить внешние проекты библиотеки Android работать?
Ответы
Ответ 1
Хотя можно получить зависимости через репозиторий Maven или Ivy, они не упакованы в стандартный архив Jar. Существует новый формат, разработанный специально для этой системы сборки. Тип "aar"
Текущие библиотеки Android, доступные на Maven Central, были созданы с использованием плагина Maven, в котором используется другой формат архива (apklib), поэтому они несовместимы.
Если вы посмотрите на com.actionbarsherlock: actionbacksherlock (который является новым расположением этой библиотеки), вы увидите, что его формат является apklib.
http://search.maven.org/#artifactdetails%7Ccom.actionbarsherlock%7Cactionbarsherlock%7C4.2.0%7Capklib
Рассматривая исходный код, мы проверяем упаковку "aar" и возвращаем для обработки всех остальных как "jar", что, очевидно, является проблемой здесь. Мы должны обнаружить apklib и обеспечить лучшее сообщение об ошибке.
Ответ 2
Теперь вы можете интегрировать ActionBarSherlock как aar.
Просто добавьте это в определение своей зависимости в файле build.gradle:
dependencies {
compile 'com.android.support:support-v4:18.0.+'
compile 'com.actionbarsherlock:actionbarsherlock:[email protected]'
Джейк Уортон опубликовал проект , в котором показано, как использовать ActionBarSherlock с Gradle
Ответ 3
Вы используете более старую версию плагина android gradle.
В последней версии 0.3 в этой области было значительно улучшено.
Я бы посоветовал вам перейти к версии 0.3 этого плагина. Также имейте в виду, что вам нужно использовать более новую версию gradle (1.3 или 1.4).
Дополнительная информация о том, как внешние библиотеки можно использовать с этим плагином.