Android gradle构建和支持库

Vit*_*biy 34 android build gradle

我有一个项目,使用一些其他库项目(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)
Run Code Online (Sandbox Code Playgroud)

两个库项目都依赖于支持lib:

dependencies {
    compile files('libs/android-support-v4.jar')
}
Run Code Online (Sandbox Code Playgroud)

abh*_*erg 51

现在可以Android Support Repository从SDK Manager 下载并替换

compile files("libs/android-support-v4.jar")
Run Code Online (Sandbox Code Playgroud)

compile 'com.android.support:support-v4:13.0.0'
Run Code Online (Sandbox Code Playgroud)

必须对使用支持库的所有项目执行此操作.Android支持存储库会自动添加到构建系统的存储库列表中(不确定哪个部分添加了它,还不知道足够的gradle).

资源


Xav*_*het 19

在我们让支持库具有存储库工件之前,您不能将其包含在多个库项目中.您可以创建一个仅包含支持库的库项目,并让所有其他库依赖它.

更新:现在可以了.


raf*_*llo 13

根据Xav的答案,如果你有其他模块依赖于android-support-v4.jar,创建一个包含android-support-v4.jar的库项目,并引用这个项目而不是jar文件.

例如:

添加具有此结构的项目:

- android-support
  - libs
    - android-support-v4.jar
  - AndroidManifest.xml
  - build.gradle
Run Code Online (Sandbox Code Playgroud)

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>
Run Code Online (Sandbox Code Playgroud)

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

    }
}
Run Code Online (Sandbox Code Playgroud)

记得在项目settings.gradle中包含此项目:

include  ':android-support'
Run Code Online (Sandbox Code Playgroud)

现在,对于需要支持库的每个项目,而不是

compile files ("libs/android-support-v4.jar")
Run Code Online (Sandbox Code Playgroud)

使用以下行:

compile project (':android-support')
Run Code Online (Sandbox Code Playgroud)