他のいくつかのライブラリプロジェクト(SlidingMenu、ActionbarSherlock)を使用するプロジェクトがあり、これらの両方でAndroidサポートライブラリを使用しています。
UNEXPECTED TOP-LEVEL EXCEPTION:
Java.lang.IllegalArgumentException: already added: Landroid/support/v4/app/LoaderManager;
at com.Android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.Java:123)
at com.Android.dx.dex.file.DexFile.add(DexFile.Java:163)
at com.Android.dx.command.dexer.Main.processClass(Main.Java:490)
at com.Android.dx.command.dexer.Main.processFileBytes(Main.Java:459)
at com.Android.dx.command.dexer.Main.access$400(Main.Java:67)
at com.Android.dx.command.dexer.Main$1.processFileBytes(Main.Java:398)
at com.Android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.Java:245)
at com.Android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.Java:131)
at com.Android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.Java:109)
at com.Android.dx.command.dexer.Main.processOne(Main.Java:422)
at com.Android.dx.command.dexer.Main.processAllFiles(Main.Java:333)
at com.Android.dx.command.dexer.Main.run(Main.Java:209)
at com.Android.dx.command.dexer.Main.main(Main.Java:174)
at com.Android.dx.command.Main.main(Main.Java:91)
両方のライブラリプロジェクトは、サポートライブラリに依存しています。
dependencies {
compile files('libs/Android-support-v4.jar')
}
サポートライブラリがリポジトリアーティファクトを持つまで、複数のライブラリプロジェクトに含めることはできません。サポートライブラリのみを含むライブラリプロジェクトを作成し、他のすべてのライブラリをそれに依存させることができます。
Update: これは現在可能です 。
これは、SDKマネージャーからAndroid Support Repository
をダウンロードし、
compile files("libs/Android-support-v4.jar")
と
compile 'com.Android.support:support-v4:13.0.0'
これは、サポートライブラリを使用するすべてのプロジェクトで実行する必要があります。 Androidサポートリポジトリは、ビルドシステムによってリポジトリのリストに自動的に追加されます(どの部分に追加されるのか不明で、まだ十分なgradleがわからない)。
Xavからの回答に基づいて、Android-support-v4.jarに依存する他のモジュールがある場合、Android-support-v4.jarを含むライブラリプロジェクトを作成し、jarファイルではなくこのプロジェクトを参照します。
例えば。:
この構造を持つプロジェクトを追加します。
- Android-support
- libs
- Android-support-v4.jar
- AndroidManifest.xml
- build.gradle
AndroidManifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:versionCode="1" Android:versionName="1.0" package="com.example.support.lib">
<uses-sdk Android:minSdkVersion="7" Android:targetSdkVersion="7"/>
<application />
</manifest>
build.gradle:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.Android.tools.build:gradle:0.4.2'
}
}
apply plugin: 'Android-library'
dependencies {
compile files ("libs/Android-support-v4.jar")
}
Android {
compileSdkVersion 17
buildToolsVersion "17"
defaultConfig {
minSdkVersion 7
targetSdkVersion 7
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
}
}
}
プロジェクトのsettings.gradleにこのプロジェクトを含めることを忘れないでください:
include ':Android-support'
今ではなく、サポートライブラリを必要とするプロジェクトごとに、
compile files ("libs/Android-support-v4.jar")
次の行を使用します。
compile project (':Android-support')
参考までに、これを追加して、gradleビルドでAndroid-support-v4.jarを除外する必要がありました。
コンパイルfileTree(dir: 'libs'、include: '* .jar'、exclude: 'Android-support-v4.jar')
EclipseのADTプラグインのプロジェクトエクスポート機能を使用してbuild.gradleを作成しました。
Eclipseクラスパスに同じ名前/パッケージ/ jarのクラスが複数含まれている場合、ADT
はUNEXPECTED TOP-LEVEL EXCEPTION
などの例外をスローします。この場合、LoaderManager
クラスの複数のインスタンスが発生しています。
解決策:同じjarライブラリが2回含まれています。アプリケーションと参照されているすべてのAndroidライブラリをチェックし、すべてのjarが1回だけ含まれていることを確認します。