意想不到的顶级异常:android studio和andengine重复类

时间:2015-05-17 14:23:00

标签: android andengine

我正在使用Android Studio和AndEngine库以及TexturePacker Extension使用此链接进行设置:

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库中自动创建),不包括模块,重新导入third_party库......但似乎没有什么能解决它。

这是我的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文件?或者我应该怎么做才能解决这个问题? 感谢

3 个答案:

答案 0 :(得分:0)

在我的情况下,你的问题看起来就像你的依赖关系一样。

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

Google Play服务库可能非常庞大,当您在许多第三方库或某些较新的Google库中进行组合时,这可能是您体验的冗余。在实施Google云端存储时,我遇到了类似的问题。通常我现在只是从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'

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

我终于解决了这个问题,它不是支持库。我从3rd_party库中得到了问题,因为texturepacker库的manifest文件在问题中提供的链接步骤之后具有相同的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>

和texturepacker:

<?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>

希望能有所帮助。

感谢所有答案。