16

GradleとAndroidGradleプラグインを使用してAndroidプロジェクトをビルドしようとしています。ActionBarSherlockなどの外部(Maven)リポジトリにあるライブラリプロジェクトに依存したいと思います。

公式サイトによると、これは可能のようです:

ライブラリの使用は、次のいずれかの方法で行われます。

マルチプロジェクトのセットアップ。ここを読んでください:http ://www.gradle.org/docs/current/userguide/multi_project_builds.html

mavenやivyなどのリポジトリを介した依存関係。

私の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'
            }
        }
    }
}

Gradle1.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ライブラリプロジェクトの依存関係を機能させるにはどうすればよいですか?

4

3 に答える 3

20

MavenまたはIvyリポジトリーを介して依存関係を取得することは可能ですが、それらは標準のJarアーカイブにパッケージ化されていません。このビルドシステム用に特別に設計された新しいフォーマットがあります。タイプは「aar」です

Maven Centralで利用可能な現在のAndroidライブラリは、異なるアーカイブ形式('apklib')を使用するMavenプラグインを使用して作成されているため、互換性がありません。

com.actionbarsherlock:actionbacksherlock(そのライブラリの新しい場所)を見ると、その形式がapklibであることがわかります。 http://search.maven.org/#artifactdetails%7Ccom.actionbarsherlock%7Cactionbarsherlock%7C4.2.0%7Capklib

ソースコードを見て、「aar」パッケージをチェックし、他のすべてを「jar」として処理するように戻します。これは明らかにここで問題になります。apklibを検出し、より適切なエラーメッセージを提供する必要があります。

于 2013-03-13T01:23:05.233 に答える
14

これで、ActionBarSherlockをaarとして統合できます。

これをbuild.gradleファイルの依存関係定義に追加するだけです。

dependencies {
    compile 'com.android.support:support-v4:18.0.+'
    compile 'com.actionbarsherlock:actionbarsherlock:4.4.0@aar'

Jake Whartonが、GradleでActionBarSherlockを使用する方法を示すサンプルプロジェクトを公開しました

于 2013-08-10T11:46:28.447 に答える
-1

古いバージョンのandroidgradleプラグインを使用しています。
最新バージョン0.3では、この領域で多くの改善が行われました。

このプラグインのバージョン0.3にアップグレードすることをお勧めします。その場合は、より新しいバージョンのgradle(1.3または1.4)を使用する必要があることにも注意してください。

このプラグインで外部ライブラリを使用する方法の詳細。

于 2013-03-06T07:18:12.860 に答える