【问题标题】:Gradle android-library build fails. java.lang.IllegalArgumentException: already addedGradle android-library 构建失败。 java.lang.IllegalArgumentException:已添加
【发布时间】:2013-12-01 18:01:27
【问题描述】:

我正在尝试构建我的 android 库项目,其中包含子测试项目。构建命令:gradle clean connectedCheck
在任务 :dexTest 之后我得到了错误:

意外的顶级异常:
java.lang.IllegalArgumentException:已添加:Lorg/json/simple/ItemList;
意外的顶级异常:
java.lang.IllegalArgumentException:已添加:Landroid/support/v4/accessibilityservice/AccessibilityServiceInfoCompat;
意外的顶级异常:
java.lang.IllegalArgumentException:已添加:Lorg/apache/commons/lang3/CharRange$1;

命令 gradle clean build 成功结束。所以我的问题是我无法运行我的测试。当我更改插件时,在我的 build.gradle 文件中,从 'android-library' 到 'android' 一切正常。

另外,我添加了 --info 参数并得到了这个,在错误之前

命令:/home/username/adt-bundle/sdk/build-tools/18.1.1/dx --dex --output /home/username/android/build/libs/android-test.dex /home/用户名/android/build/classes/test /home/username/android/build/dependency-cache/test /home/username/android/libs/json_simple.jar /home/username/android/build/bundles/debug/classes. jar /home/username/android/build/bundles/debug/libs/json_simple.jar /home/username/android/libs/android-support-v4.jar /home/username/android/build/bundles/debug/libs/ commons-lang3-3.1.jar /home/username/android/build/bundles/debug/libs/android-support-v4.jar /home/username/android/libs/commons-lang3-3.1.jar

那是什么?为什么它使用文件夹 build/bundles/debug/libs/ 中的库?这就是为什么我有错误 java.lang.IllegalArgumentException 但为什么 gradle 从那个我不明白的目录中获取库的原因。

这是我的 build.gradle 文件

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.6.3'
    }
}

apply plugin: 'android-library'

android {
    compileSdkVersion 18
    buildToolsVersion "18.1.1"
    defaultConfig {
        minSdkVersion 8
        targetSdkVersion 18
        testPackageName "ua.cooperok.stringcalc.tests"
        testInstrumentationRunner "android.test.InstrumentationTestRunner"
    }
    sourceSets {
        main {
            manifest.srcFile file('AndroidManifest.xml')
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }
        instrumentTest {
            manifest.srcFile file('tests/AndroidManifest.xml')
            java.srcDirs = ['tests/src']
            resources.srcDirs = ['tests/src']
            res.srcDirs = ['tests/res']
            assets.srcDirs = ['tests/assets']
        }
    }
    dependencies {
        compile fileTree(dir: 'libs', include: '*.jar')
    }
}

可能是 android-library 插件中的错误?

【问题讨论】:

  • 好吧,您的 gradle build 成功了,因为在该任务期间根本没有调用 dexTest。
  • 你能显示你libs文件夹中的所有jar文件名吗?
  • 嘿,你解决了吗?我在code.google.com/p/android/issues/detail?id=61429 上看到了你的评论。我遇到了同样的错误并卡住了。
  • 不,我还没解决。我的 libs 文件夹包含 3 个 jar 文件,您可以找到它们,它们以路径 /home/username/android/libs/ 开头。我只有一个解决方案,但显然不好。为了运行测试,我将插件更改为 android 并编译库之类的应用程序,如果测试良好,我将插件更改回 android-library。
  • 这听起来很不方便。你试过this #8吗?它对我有用。

标签: android gradle


【解决方案1】:

虽然我不知道这个问题的确切答案,但我在 IntelliJ IDEA 中支持 gradle 的 JetBrains 同事建议在 https://code.google.com/p/android/ 提问,因为这显然是 Google Android Gradle Plugin 中的一个问题(并且可能是一个错误) Eclipse,鉴于您在 Eclipse 中工作,据我从我们的谈话中回忆。

【讨论】:

  • 感谢您的建议。我也在 linux shell 中运行 gradle,但不在 Eclipse 中
【解决方案2】:

现在问题不再相关。在 0.7.2 版的构建工具中,它已被修复。
来自tech doc的更新片段
- 解决测试库项目时本地 jar 的问题。

【讨论】:

    猜你喜欢
    • 2012-01-16
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 1970-01-01
    • 2013-06-13
    • 2015-02-06
    • 1970-01-01
    • 2018-11-28
    相关资源
    最近更新 更多