【问题标题】:Error adding RoboGuice as dependency将 RoboGuice 添加为依赖项时出错
【发布时间】:2015-08-24 18:58:42
【问题描述】:

我正在尝试在我的 Android Studio 项目中安装 RoboGuice 作为依赖项。一旦我尝试运行该项目(甚至在我添加任何新代码之前),我就会因以下输出而崩溃:

信息:Gradle 任务 [:app:assembleDebug] :app:preBuild UP-TO-DATE :app:preDebugBuild UP-TO-DATE :app:checkDebugManifest :app:preReleaseBuild UP-TO-DATE :app:prepareComAndroidSupportAppcompatV72300Library UP-TO-DATE :app:prepareComAndroidSupportSupportV42300Library UP-TO-DATE :app:prepare ComMcxiaokeVolleyLibraryAar100Library UP-TO-DATE :app:prepareDebugDependencies :app:compileDebugAidl 最新 :app:compileDebugRenderscript 最新 :app:generateDebugBuildConfig 最新 :app:generateDebugAssets 最新 :app:mergeDebugAssets 最新 :app:generateDebugResValues 最新 :app:generateDebugResources 最新 :app:mergeDebugResources 最新 :app:processDebugManifest 最新 :app:processDebugResources 最新 :app:generateDebugSources 最新 :app:processDebugJavaRes 最新 :app:compileDebugJava 注意:某些输入文件使用或覆盖已弃用的 API。 注意:使用 -Xlint:deprecation 重新编译以获取详细信息。 :app:compileDebugNdk 最新 :app:compileDebugSources :app:preDexDebug :app:dexDebug 意外的顶级异常: com.android.dex.DexException:多个dex文件定义了Ljavax/inject/Provider; 在 com.android.dx.merge.DexMerger.readSortableTypes(DexMerger.java:596) 在 com.android.dx.merge.DexMerger.getSortedTypes(DexMerger.java:554) 在 com.android.dx.merge.DexMerger.mergeClassDefs(DexMerger.java:535) 在 com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:171) 在 com.android.dx.merge.DexMerger.merge(DexMerger.java:189) 在 com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454) 在 com.android.dx.command.dexer.Main.runMonoDex(Main.java:303) 在 com.android.dx.command.dexer.Main.run(Main.java:246) 在 com.android.dx.command.dexer.Main.main(Main.java:215) 在 com.android.dx.command.Main.main(Main.java:106) 错误:任务 ':app:dexDebug' 执行失败。

com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command'/Library/Java/JavaVirtualMachines/jdk1.7.0_21.jdk/Contents/Home/bin/java '' 以非零退出值 2 结束 信息:构建失败 信息:总时间:10.274 秒 信息:1个错误 信息:0 个警告 信息:在控制台中查看完整的输出

这是我的 gradle 文件:

build.gradle(模块) 应用插件:'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.mysite.myapp"
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:23.0.0'
    compile 'com.google.code.gson:gson:2.3.1'
    compile 'com.mcxiaoke.volley:library-aar:1.0.0'
    compile 'javax.inject:javax.inject:1'
    compile 'org.roboguice:roboguice:3.+'
}

build.gradle(项目)

// Top-level build file where you can add configuration options common to all sub-projects/modules.

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

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
        mavenCentral()
    }
}

我完全感到困惑。谁能看到我做错了什么?谢谢。

【问题讨论】:

  • 您是否也将dependencies 中指定的任何库也放入了libs 文件夹?如果可能,请发布您的 libs 文件夹内容的屏幕截图。
  • 为什么将 compile 'javax.inject:javax.inject:1' 添加到依赖项中?如果在使用 gradle 时不需要恕我直言,Roboguice 应该自行解决这种依赖关系。
  • @Ascorbin - 我整天都在尝试依赖注入。这是早期方法遗留下来的,但似乎是重复的来源。如果您提出它作为答案,我会接受它。谢谢!
  • @Randall 我做到了,谢谢。

标签: android android-studio gradle roboguice


【解决方案1】:

Roboguice 会将其“自己的”javax.inject 作为依赖项,因此当您声明 compile 'javax.inject:javax.inject:1' 时,其中有 2 个会导致

多个dex文件定义Ljavax/inject/Provider

只需删除 javax.inject 依赖项即可。

【讨论】:

    猜你喜欢
    • 2018-04-25
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    • 2016-02-19
    • 1970-01-01
    • 2017-08-24
    • 2020-05-03
    • 2018-02-26
    相关资源
    最近更新 更多