Android Studio 更新至 1.0 损坏 MultiDex [英] Android Studio update to 1.0 corrupts MultiDex

查看:39
本文介绍了Android Studio 更新至 1.0 损坏 MultiDex的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

嗨有类似的错误,如重复输入.

Hi Have similar error like duplicate entry.

FAILURE:构建失败,出现异常.

FAILURE: Build failed with an exception.

  • 出了什么问题:任务:eBooks:packageAllDebugClassesForMultiDex"执行失败.

  • What went wrong: Execution failed for task ':eBooks:packageAllDebugClassesForMultiDex'.

java.util.zip.ZipException:重复条目:android/support/annotation/AttrRes.class

java.util.zip.ZipException: duplicate entry: android/support/annotation/AttrRes.class

  • 试试:使用 --stacktrace 选项运行以获取堆栈跟踪.使用 --info 或 --debug 选项运行以获得更多日志输出.

  • Try: Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.

    构建失败

    总时间:1 分 46.13 秒

    Total time: 1 mins 46.13 secs

    apply plugin: 'com.android.application'
    
    dependencies {
        compile fileTree(dir: 'libs', include: '*.jar')
        compile project(':ui-reader')
    
        compile "com.android.support:support-v4:23.1.1"
        compile "com.android.support:support-v13:20.0.0"
        compile files('libs/Flurry_3.2.1.jar')
    }
    
    android {
        compileSdkVersion 21
        buildToolsVersion "20.0.0"
    
        configurations {
            all*.exclude group: 'com.android.support', module: 'support-v4'
        }
    
        defaultConfig {
            // Enabling multidex support.
            multiDexEnabled true
        }
    
        lintOptions {
            abortOnError false
        }
    
        sourceSets {
    
            main {
                manifest.srcFile 'AndroidManifest.xml'
                java.srcDirs = ['src']
                resources.srcDirs = ['src']
                aidl.srcDirs = ['src']
                renderscript.srcDirs = ['src']
                res.srcDirs = ['res']
                assets.srcDirs = ['assets']
            }
    
            // Move the tests to tests/java, tests/res, etc...
            instrumentTest.setRoot('tests')
    
            // Move the build types to build-types/<type>
            // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
            // This moves them out of them default location under src/<type>/... which would
            // conflict with src/ being used by the main source set.
            // Adding new build types or product flavors should be accompanied
            // by a similar customization.
            debug.setRoot('build-types/debug')
            release.setRoot('build-types/release')
        }
    }
    

    谁能告诉我如何找到重复的类文件在 jar 文件中的位置以及如何获得如下输出

    Can anyone tell me how to find where the duplicate class file is available in jar file and how to get output like the following

    com.squareup.okhttp:okhttp:1.6.0|||+--- com.intellij:annotations:+ -> 12.0

    com.squareup.okhttp:okhttp:1.6.0 | | | +--- com.intellij:annotations:+ -> 12.0

    推荐答案

    我仅通过包含 aviary-sdk 库就能够在测试项目中重现这一点.我不需要multi-dex,也没有研究不同的SDK版本,这对我来说似乎有点神秘.

    I was able to reproduce this in a test project just by including the aviary-sdk library. I didn't need multi-dex, and I didn't investigate different SDK versions, which seems a little mysterious to me.

    如果您没有 multi-dex,则会出现经典的multiple dex files define..."错误,这意味着您在构建中多次包含相同的符号,这是不允许的做.

    If you don't have multi-dex, you get the classic "multiple dex files define..." error which means you've included the same symbol more than once in your build, which you're not allowed to do.

    这些问题可能需要一点侦查;这就是 gradle dependencies 任务非常方便的地方.如果您进入模块的目录(不是顶级目录)并运行此任务:

    These problems can take a little bit of sleuthing; that's where the gradle dependencies task can be very handy. If you go into your module's directory (not the top-level directory) and run this task:

    ../gradlew dependencies
    

    你得到:

    compile - Classpath for compiling the main sources.
    +--- com.aviary.android.feather.sdk:aviary-sdk:3.4.3.351
    |    \--- com.aviary.android.feather.sdk:sdk-library:3.5.1
    |         +--- it.sephiroth.android.library.hlistviewanimations:hlistviewanimations-library:1.0.1
    |         |    +--- it.sephiroth.android.library.horizontallistview:hlistview:1.2.2
    |         |    |    \--- com.android.support:support-v4:19.1.+ -> 21.0.3
    |         |    |         \--- com.android.support:support-annotations:21.0.3
    |         |    \--- com.nineoldandroids:library:2.4.0
    |         +--- com.nineoldandroids:library:2.4.0
    |         +--- it.sephiroth.android.library.disklruimagecache:DiskLruImageCache:1.0.2
    |         |    +--- org.apache.commons:commons-io:1.3.2
    |         |    \--- com.jakewharton:disklrucache:2.0.2
    |         +--- com.aviary.android.feather.sdk:cds-library:3.2.4
    |         |    +--- com.aviary.android.feather.sdk:common-library:3.1.2 -> 3.1.8.1
    |         |    |    +--- org.apache.commons:commons-lang3:3.3.2
    |         |    |    +--- com.squareup.okhttp:okhttp-urlconnection:1.6.0
    |         |    |    |    \--- com.squareup.okhttp:okhttp:1.6.0
    |         |    |    +--- com.squareup.okhttp:okhttp:1.6.0
    |         |    |    +--- com.intellij:annotations:+ -> 12.0
    |         |    |    \--- commons-io:commons-io:2.4
    |         |    \--- com.android.support:support-v4:19.+ -> 21.0.3 (*)
    |         +--- it.sephiroth.android.library.disklrumulticache:disklrumulticache:1.0.2
    |         |    +--- org.apache.commons:commons-io:1.3.2
    |         |    \--- com.jakewharton:disklrucache:2.0.2
    |         +--- it.sephiroth.android.library.picasso:picasso:2.3.3.2
    |         |    +--- com.squareup.okhttp:okhttp-urlconnection:1.6.0 (*)
    |         |    +--- com.squareup.okhttp:okhttp:1.6.0
    |         |    \--- com.intellij:annotations:12.0
    |         +--- com.android.support:support-v4:19.+ -> 21.0.3 (*)
    |         +--- it.sephiroth.android.exif:android-exif-extended:1.0.2
    |         |    +--- org.apache.commons:commons-lang3:3.3.2
    |         |    \--- org.apache.commons:commons-io:1.3.2
    |         +--- it.sephiroth.android.library.imagezoom:imagezoom:1.0.5
    |         |    \--- it.sephiroth.android.library.easing:android-easing:1.0.3
    |         +--- com.aviary.android.feather.sdk:receipt-library:2.0.2
    |         |    +--- com.aviary.android.feather.sdk:common-library:3.1.2 -> 3.1.8.1 (*)
    |         |    +--- it.sephiroth.android.library.ab:ab-test:2.0.3
    |         |    \--- com.android.support:support-v4:19.+ -> 21.0.3 (*)
    |         +--- com.aviary.android.feather.sdk:common-library:3.1.2 -> 3.1.8.1 (*)
    |         +--- it.sephiroth.android.library.horizontallistview:hlistview:1.2.2 (*)
    |         +--- it.sephiroth.android.library.fork.listviewanimations:listviewanimations-library-core:2.6.1
    |         |    \--- com.nineoldandroids:library:2.4.0
    |         +--- com.aviary.android.feather.sdk:tracking-library:3.0.1
    |         |    \--- com.aviary.android.feather.sdk:common-library:3.1.8.1 (*)
    |         \--- com.aviary.android.feather.sdk:headless-library:3.4.002000000
    |              \--- com.aviary.android.feather.sdk:common-library:3.1.2 -> 3.1.8.1 (*)
    

    如果你仔细看,你会看到两者:

    If you look carefully, you'll see both:

    commons-io:commons-io:2.4

    commons-io:commons-io:2.4

    org.apache.commons:commons-io:1.3.2

    org.apache.commons:commons-io:1.3.2

    在那里,我没有确认,但我假设是相同类的不同包装,包括 org/apache/commons/io/CopyUtils.class.

    in there, which I didn't confirm, but I assume are different packagings of the same classes which include org/apache/commons/io/CopyUtils.class.

    如果您通过以下方式排除 commons-io:

    If you exclude commons-io via:

    compile ('com.aviary.android.feather.sdk:aviary-sdk:3.4.3.351') {
        exclude group: 'commons-io'
    }
    

    它会建立.没试过运行,不知道运行时会不会出现符号丢失;如果有,您可以尝试对从依赖项中排除的内容进行更多手术,或者您可以重新打包依赖项以修复错误,或联系其作者.

    it will build. I haven't tried to run it, so I don't know if there will be missing symbols at runtime; if there are, you could try to be more surgical about what you exclude from the dependency, or perhaps you could repackage the dependency to fix the errors, or contact its author.

    这篇关于Android Studio 更新至 1.0 损坏 MultiDex的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

  • 查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆