【问题标题】:UNEXPECTED TOP-LEVEL EXCEPTION: android studio and andengine duplicate classes意外的顶级异常:android studio 和 andengine 重复类
【发布时间】:2015-05-17 14:23:00
【问题描述】:

我正在使用 Android Studio 和 AndEngine 库和 TexturePacker 扩展,使用此链接进行设置:

Setting Up AndEngine with Android Studio

我遇到了这个问题:

Error:Class org.andengine.BuildConfig has already been added to output. Please remove duplicate copies.

1 error; aborting

Error:Execution failed for task ':app:dexDebug'.

> com.android.ide.common.internal.LoggedErrorException: Failed to run command:

C:\Users\Diego\android-sdks\build-tools\21.1.2\dx.bat --dex --no-optimize --output C:\Users\Diego\NEXT\Next\app\build\intermediates\dex\debug --input-list=C:\Users\Diego\NEXT\Next\app\build\intermediates\tmp\dex\debug\inputList.txt

Error Code:

1

Output:

UNEXPECTED TOP-LEVEL EXCEPTION:

java.lang.IllegalArgumentException: already added: Lorg/andengine/BuildConfig;

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:83)
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:280)
at com.android.dx.command.dexer.M...(Main.java:246)
at com.android.dx.command.dexer.Main.main(Main.java:215)
at com.android.dx.command.Main.main(Main.java:106)

1 error; aborting

我什么都试过了。清理项目,删除 BuildConfig 类(它们是在 texturepacker 库中自动创建的),排除模块,重新导入第三方库......但似乎没有什么可以修复它。

这里是我的 build.gradle 文件:

应用:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        applicationId "com.zmaxstudios.next"
        minSdkVersion 14
        targetSdkVersion 21
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    dexOptions {
        preDexLibraries = false
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.3'
    compile 'com.android.support:support-v13:21.0.3'
    compile project(':third_party:andengine')
    compile project(':third_party:texturepacker')
}

AndEngine > build.gradle

apply plugin: 'android-library'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 21
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-project.txt')
        }
    }

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        instrumentTest.setRoot('tests')
    }
}

Texturepacker > build.gradle

apply plugin: 'android-library'

android {
    compileSdkVersion 21
    buildToolsVersion "21.1.2"

    defaultConfig {
        minSdkVersion 14
        targetSdkVersion 21
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_7
        targetCompatibility JavaVersion.VERSION_1_7
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-project.txt')
        }
    }

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
        }

        instrumentTest.setRoot('tests')
    }
}

dependencies {
    compile project(':third_party:andengine')
}

如何删除重复的 BuildConfig 文件?或者我应该怎么做才能解决这个问题? 谢谢

【问题讨论】:

  • 如果您从应用的 build.gradle 中删除 compile project(':third_party:andengine') 会发生什么?它还具有 Texturepacker 作为依赖项,也使用 andengine
  • @Blackbelt 完全相同的问题!!

标签: android andengine


【解决方案1】:

您的问题似乎在于您的依赖关系,在我的情况下是这样的。

compile 'com.google.android.gms:play-services:6.5.87'// and here's the issue

Google Play 服务库可能非常大,当与许多第三方库或一些较新的 Google 库结合使用时,这可能会成为您体验的冗余。我在实施 Google Cloud Storage 时遇到了类似的问题。通常,我现在只包含我真正需要的 android 支持库,即

compile 'com.google.apis:google-api-services-storage:v1-rev18-1.19.0'
compile 'com.google.http-client:google-http-client-jackson2:1.20.0'
compile 'com.google.oauth-client:google-oauth-client-jetty:1.20.0'
compile 'com.google.api-client:google-api-client-java6:1.20.0'
compile 'com.google.android.gms:play-services-maps:7.3.0'
compile 'com.google.android.gms:play-services-location:7.3.0'

【讨论】:

  • 但我没有使用 Google Play 服务,也不需要代码。也许我不理解你。
  • 明白,这就是为什么我将“在我的情况下”包括在内。所以我不熟悉您使用的所有库。它是否出现在简化版本中,仅使用 compile 'com.android.support:appcompat-v7:21.0.3' compile 'com.android.support:support-v13:21.0.3' 没有您的第三方库,仅用于调试dex 问题。
【解决方案2】:

能否请您从依赖项中删除这一行?我在这里看到您正在使用两个支持库。清理并构建您的项目

compile 'com.android.support:support-v13:21.0.3'

【讨论】:

    【解决方案3】:

    我终于解决了这个问题,它与支持库无关。我从第三方库中得到了问题,因为 texturepacker 库的清单文件按照问题中提供的链接中的步骤具有相同的 andengine 包,因此 BuildConfig.java 类被复制。现在,清单文件是:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="org.andengine" >
    
        <application>
    
        </application>
    
    </manifest>
    

    和纹理打包器:

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="org.andengine.extension.texturepacker.opengl.texture.util.texturepacker" >
    
    <application>
    
    </application>
    
    </manifest>
    

    希望对您有所帮助。

    谢谢大家的回答。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-09-07
      • 2015-08-29
      • 2014-11-04
      • 1970-01-01
      • 2015-04-04
      • 2014-09-06
      • 2016-01-31
      • 1970-01-01
      相关资源
      最近更新 更多