【问题标题】:Gradle project - can build but not run itGradle 项目 - 可以构建但不能运行
【发布时间】:2016-03-18 06:57:41
【问题描述】:

我的 Android 项目包含 3 个build.gradle 文件:

项目build.gradle:

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
//        mavenLocal()
        jcenter()
    }
    dependencies {
//        classpath 'com.android.tools.build:gradle:1.1.0'
        classpath 'com.android.tools.build:gradle:1.1.3'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

MYAPPbuild.gradle

apply plugin: 'com.android.library'
android {
    dexOptions {
        preDexLibraries = false
    }

    compileSdkVersion 17
    buildToolsVersion "21.1.1"

    defaultConfig {
        minSdkVersion 8
        targetSdkVersion 17
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile 'com.android.support:support-v4:18.0.0'
    compile files('libs/CWAC-AdapterWrapper.jar')
}

和 Facebook SDK:

apply plugin: 'com.android.library'

android {
    dexOptions {
        preDexLibraries = false
    }
    compileSdkVersion 8
    buildToolsVersion "21.1.1"

    defaultConfig {
        minSdkVersion 8
        targetSdkVersion 8
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    } }

dependencies {
    compile 'com.android.support:support-v4:18.0.0' 
}

我能够构建项目但不能运行它。例外是:

> Note: Some input files use or override a deprecated API. Note:
> Recompile with -Xlint:deprecation for details. Note: Some input files
> use unchecked or unsafe operations. Note: Recompile with
> -Xlint:unchecked for details. :awakenings:dexDebug UNEXPECTED TOP-LEVEL EXCEPTION: java.lang.IllegalArgumentException: already
> added: Ledu/mit/mobile/android/imagecache/DiskCache$1;    at
> com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:122)
>   at com.android.dx.dex.file.DexFile.add(DexFile.java:161)    at
> com.android.dx.command.dexer.Main.processClass(Main.java:732)     at
> com.android.dx.command.dexer.Main.processFileBytes(Main.java:673)     at
> com.android.dx.command.dexer.Main.access$300(Main.java:82)    at
> com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:602)
>   at
> com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
>   at
> com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
>   at
> com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
>   at com.android.dx.command.dexer.Main.processOne(Main.java:632)  at
> com.android.dx.command.dexer.Main.processAllFiles(Main.java:510)  at
> com.android.dx.command.dexer.Main.runMonoDex(Main.java:279)   at
> com.android.dx.command.dexer.Main.run(Main.java:245)  at
> com.android.dx.command.dexer.Main.main(Main.java:214)     at
> com.android.dx.command.Main.main(Main.java:106) UNEXPECTED TOP-LEVEL
> EXCEPTION: java.lang.IllegalArgumentException: already added:
> Lcom/facebook/AccessToken$1;  at
> com.android.dx.dex.file.ClassDefsSection.add(ClassDefsSection.java:122)
>   at com.android.dx.dex.file.DexFile.add(DexFile.java:161)    at
> com.android.dx.command.dexer.Main.processClass(Main.java:732)     at
> com.android.dx.command.dexer.Main.processFileBytes(Main.java:673)     at
> com.android.dx.command.dexer.Main.access$300(Main.java:82)    at
> com.android.dx.command.dexer.Main$1.processFileBytes(Main.java:602)
>   at
> com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:284)
>   at
> com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:166)
>   at
> com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:144)
>   at com.android.dx.command.dexer.Main.processOne(Main.java:632)  at
> com.android.dx.command.dexer.Main.processAllFiles(Main.java:510)  at
> com.android.dx.command.dexer.Main.runMonoDex(Main.java:279)   at
> com.android.dx.command.dexer.Main.run(Main.java:245)  at
> com.android.dx.command.dexer.Main.main(Main.java:214)     at
> com.android.dx.command.Main.main(Main.java:106) 2 errors; aborting
> Error:Execution failed for task ':awakenings:dexDebug'.
> > com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command
> 'C:\Program Files\Java\jdk1.8.0_20\bin\java.exe'' finished with
> non-zero exit value 1

有些东西是重复的,但我不知道是什么。你知道它为什么不运行吗?

问题似乎是我的 DEX 中包含 TWICE 的前 2 个模块

settings.gradle 包括 ':androidImageCachemaster' 包括 ':facebookSDK'

然后

¸¸依赖项{ 编译项目(':facebookSDK') 编译项目(':androidImageCachemaster')

这是屏幕截图

【问题讨论】:

  • 你是在做一个图书馆还是一个应用程序?
  • 我正在构建应用程序,实际上是在导入已经制作好的 Eclipse 项目。现在将尝试您的样品..
  • 您需要将构建 Gradle 更改为 com.android.application。
  • 你看到我的回答了吗?请选择一个。

标签: java android gradle


【解决方案1】:

文件中是否有一个叫DiskCache的函数: com.android.dx.command.Main.main

这似乎与 facebook sdk 中的功能冲突。尝试重命名您的功能

更新-------

在您的 build.grade 中尝试这个。这应该编译依赖项,但将其从最终构建中排除:

android {
    compileSdkVersion x
    buildToolsVersion "x"

    packagingOptions {
        exclude 'support-v4'
    }
    ...
}

【讨论】:

  • 不,它与功能无关,它与项目模块有关。请检查我的解释
  • 对于 Facebook build.gradle 请尝试。您要导入同一个库两次,因此您想将它从一个地方排除。编译'com.android.support:support-v4:18.0.0'{排除组:'com.google.android',模块:'support-v4'}
  • 我也想知道为什么你将你的 compileSdkVersion 设置为与你的 buildToolsVersion 不同?
  • compileSdkVersion now = buildToolsVersion 但它没有帮助。 “排除组:”选项可能会有所帮助,但我无法编译。如何排除 facebookSDK 和 androidImageCachemaster 使其不会编译两次?
【解决方案2】:

build.gradle:

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    repositories {
        jcenter()
    }

    dependencies {
        classpath 'com.android.tools.build:gradle:1.1.3'
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

Android 版 Facebook:

  1. 在此处下载 Facebook for Android Gradle 库:https://developers.facebook.com/docs/android

  2. 将其作为模块导入您自己的项目。

  3. 它会将其添加为一个模块。所以添加到你自己的build.gradlecompile project(':facebook-android-sdk-4.0.1') 作为依赖项。

app/build.gradle:

在此处下载 Facebook for Android Gradle 库:https://developers.facebook.com/docs/android

apply plugin: 'com.android.application' // changed to application

android {
    compileSdkVersion 22 // <-- updated
    buildToolsVersion "22.0.1" // <-- updated

    defaultConfig {
        minSdkVersion 11 // <-- updated
        targetSdkVersion 22 // <-- updated
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile 'com.android.support:support-v4:22.0.0' // <-- updated
    compile files('libs/CWAC-AdapterWrapper.jar')
    // compile project(':facebook-android-sdk-4.0.1') // <-- something like this
}

【讨论】:

    【解决方案3】:

    问题的答案是这样的: 我的项目两次包含这两个模块:
    'androidImageCachemaster'
    'facebookSDK'

    在我从项目中删除引用后,一切运行顺利。

    【讨论】:

    • 答案如何?在您的问题中,我没有在您的 build.gradle 文件中看到这些依赖项。
    猜你喜欢
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-11
    • 2020-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多