Unexpected top level exception - multiple library

2019-04-13 02:29发布

问题:

My understanding is some library is included more than once. The question is which one and how to avoid that?

Suspected library that is included more than once:
the Android Support Library.

What I have tried:
Exclude it in Gradle build script of the main module using one of the following method:
Method #1: Use the "configurations" block:

configurations {
    // to avoid double inclusion of support libraries
    all*.exclude group: 'com.android.support', module: 'support-v4'
}

Result: the Support Library seems to excluded entirely in the project ==> class not found issue e.g.

cannot access FragmentActivity
public class AccountInfoFragment extends SherlockFragment implements DataLoadedCallback<AccountPO>,DialogInterface.OnClickListener{
       ^
  class file for android.support.v4.app.FragmentActivity not found

Method #2: Exclude the support library for each library Result: The issue still persists

============================
Full stacktrace of the error:

Error:Gradle: Execution failed for task ':myapp:dexDebug'.
> com.android.ide.common.internal.LoggedErrorException: Failed to run command:
    /Users/Eric/android-sdk/build-tools/20.0.0/dx --dex --output /Users/Eric/tmp/myapp/android/myapp/build/intermediates/dex/debug /Users/Eric/tmp/myapp/android/myapp/build/intermediates/pre-dexed/debug/achartengine-1.1.0-7b47dc124cf34522f2e00089bcce20da1d9daafb.jar /Users/Eric/tmp/myapp/android/myapp/build/intermediates/pre-dexed/debug/bolts-android-1.1.2-1b7811ba358dc7261c04da44cffff27dc19a95bf.jar /Users/Eric/tmp/myapp/android/myapp/build/intermediates/pre-dexed/debug/butterknife-6.0.0-082df546717f9c6d67265ed2604a6e3f41c72433.jar /Users/Eric/tmp/myapp/android/myapp/build/intermediates/pre-dexed/debug/classes-0cac1f6067badf2d1a4d82a980533915dbf98e06.jar /Users/Eric/tmp/myapp/android/myapp/build/intermediates/pre-dexed/debug/classes-142f671af697f6b9cba92b14354ee4300ae51e78.jar /Users/Eric/tmp/myapp/android/myapp/build/intermediates/pre-dexed/debug/classes-1e46bc8a7eb72e7727956d5e4352924ceb2b77a1.jar /Users/Eric/tmp/myapp/android/myapp/build/intermediates/pre-dexed/debug/classes-2c99dae7d9219c15273149d0d35ba0b1f9a13be5.jar /Users/Eric/tmp/myapp/android/myapp/build/intermediates/pre-dexed/debug/classes-48179d4374e2a25c67fea5ff71940fdfa99c61af.jar /Users/Eric/tmp/myapp/android/myapp/build/intermediates/pre-dexed/debug/classes-5183a95913a34be595f3376ba556e27844076538.jar /Users/Eric/tmp/myapp/android/myapp/build/intermediates/pre-dexed/debug/classes-6239731b5893bbcac7b1f4fc00df9518ec99637e.jar /Users/Eric/tmp/myapp/android/myapp/build/intermediates/pre-dexed/debug/classes-9fba0552287b788dec5e8eb7c445da4f8436284e.jar /Users/Eric/tmp/myapp/android/myapp/build/intermediates/pre-dexed/debug/classes-d86676a0689fbe4db96155cf7fa3df07e0b92607.jar /Users/Eric/tmp/myapp/android/myapp/build/intermediates/pre-dexed/debug/classes-df5e5215cac30fe94844ee6599f93ad546c972e9.jar /Users/Eric/tmp/myapp/android/myapp/build/intermediates/pre-dexed/debug/google-api-client-1.19.0-5a21a128d4462f2c5855dfff5449401b40497140.jar /Users/Eric/tmp/myapp/android/myapp/build/intermediates/pre-dexed/debug/google-api-services-youtube-v3-rev120-1.19.0-9ac8e0973005ba61bbc204b23361c6c6da738b15.jar /Users/Eric/tmp/myapp/android/myapp/build/intermediates/pre-dexed/debug/google-http-client-1.19.0-7c0204c696118dd85912cda4299a80e7d78cdb01.jar /Users/Eric/tmp/myapp/android/myapp/build/intermediates/pre-dexed/debug/google-http-client-jackson2-1.19.0-614a0de809cae5a131374375fed96d5690c14406.jar /Users/Eric/tmp/myapp/android/myapp/build/intermediates/pre-dexed/debug/google-oauth-client-1.19.0-912669bfd391aae62209d0888c1253a88d580884.jar /Users/Eric/tmp/myapp/android/myapp/build/intermediates/pre-dexed/debug/gson-2.2.4-57ce5e3c7d648a64a73b4451cf3aa3791012f40c.jar /Users/Eric/tmp/myapp/android/myapp/build/intermediates/pre-dexed/debug/guava-jdk5-13.0-06c5cb09cd942dfb26581195ae6fe876a835b72e.jar /Users/Eric/tmp/myapp/android/myapp/build/intermediates/pre-dexed/debug/internal_impl-21.0.2-214aff042b70e000fd89d9989b4a222cb0e76d35.jar /Users/Eric/tmp/myapp/android/myapp/build/intermediates/pre-dexed/debug/internal_impl-21.0.2-9dd6ca746d46a7622f5db326e40a2140066d8202.jar /Users/Eric/tmp/myapp/android/myapp/build/intermediates/pre-dexed/debug/jackson-core-2.1.3-7aed478d80f48350038b4c88f157afa4fe4f0444.jar /Users/Eric/tmp/myapp/android/myapp/build/intermediates/pre-dexed/debug/jsr305-1.3.9-ff9aa60162778ae9cafa0fd673bd873256924307.jar /Users/Eric/tmp/myapp/android/myapp/build/intermediates/pre-dexed/debug/support-annotations-21.0.2-ef4b81549522b9e9e235cf8bc8a048c6787daa07.jar /Users/Eric/tmp/myapp/android/myapp/build/intermediates/pre-dexed/debug/universal-image-loader-1.9.3-d8f5630239430ef645489ff77450683807cdd3a9.jar /Users/Eric/tmp/myapp/android/myapp/build/intermediates/pre-dexed/debug/YouTubeAndroidPlayerApi-070374576a0bdf40ef3d80ff2e993e0863558c69.jar /Users/Eric/tmp/myapp/android/myapp/build/intermediates/classes/debug
  Error Code:
    2
  Output:
    UNEXPECTED TOP-LEVEL EXCEPTION:
    java.lang.IllegalArgumentException: method ID not in [0, 0xffff]: 65536
        at com.android.dx.merge.DexMerger$6.updateIndex(DexMerger.java:501)
        at com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:276)
        at com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:490)
        at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:167)
        at com.android.dx.merge.DexMerger.merge(DexMerger.java:188)
        at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:439)
        at com.android.dx.command.dexer.Main.runMonoDex(Main.java:287)
        at com.android.dx.command.dexer.Main.run(Main.java:230)
        at com.android.dx.command.dexer.Main.main(Main.java:199)
        at com.android.dx.command.Main.main(Main.java:103)

I can see internal_impl appearing twice!

============================
Following method #2, my main module's build.gradle is as follows:

apply plugin: 'android'

buildscript {
    repositories {
        mavenCentral()
    }

}

android {
    compileSdkVersion 19
    buildToolsVersion "20.0.0"
    lintOptions {
        abortOnError false
    }
    defaultConfig {
        applicationId "com.xyz"
        minSdkVersion 14
        targetSdkVersion 19
    }

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


}

dependencies {
    // compile 'com.android.support:support-v13:+'
    compile 'com.google.android.gms:play-services:+'

    compile (project(':sherlockNavigationDrawer')) {
    exclude group: 'com.android.support', module: 'support-v13'
}
compile (project(':facebookSDK')) {
    exclude group: 'com.android.support', module: 'support-v13'
}
compile (project(':myLibrary')) {
    exclude group: 'com.android.support', module: 'support-v13'
    exclude group: 'com.actionbarsherlock', module: 'actionbarsherlock'
}
compile (project(':viewPagerLibrary')) {
    exclude group: 'com.android.support', module: 'support-v13'
}

    compile 'org.apmem.tools:layouts:1.5@aar'
    compile 'com.github.amlcurran.showcaseview:library:5.0.0'
    compile 'com.jakewharton:butterknife:6.0.0'

    // compile 'com.android.support:support-v13:21.0.0'

    compile 'com.google.apis:google-api-services-youtube:v3-rev120-1.19.0'
    compile files('libs/achartengine-1.1.0.jar')
    compile files('libs/YouTubeAndroidPlayerApi.jar')
}  

When I ran ./gradlew -q dependencies myapp:dependencies I got the following (no duplicate):

_debugApk - ## Internal use, do not manually configure ##
+--- project :sherlockNavigationDrawer
|    \--- com.actionbarsherlock:actionbarsherlock:4.4.0
+--- project :facebookSDK
+--- project :myLibrary
|    +--- com.google.code.gson:gson:2.2.4
|    \--- com.nostra13.universalimageloader:universal-image-loader:1.9.3
+--- project :viewPagerLibrary
+--- org.apmem.tools:layouts:1.5
+--- com.github.amlcurran.showcaseview:library:5.0.0
+--- com.jakewharton:butterknife:6.0.0
+--- com.google.android.gms:play-services:+ -> 6.5.87
|    \--- com.android.support:support-v4:21.0.0
|         \--- com.android.support:support-annotations:21.0.0
\--- com.google.apis:google-api-services-youtube:v3-rev120-1.19.0
     \--- com.google.api-client:google-api-client:1.19.0
          +--- com.google.oauth-client:google-oauth-client:1.19.0
          |    +--- com.google.http-client:google-http-client:1.19.0
          |    |    +--- com.google.code.findbugs:jsr305:1.3.9
          |    |    \--- org.apache.httpcomponents:httpclient:4.0.1
          |    |         +--- org.apache.httpcomponents:httpcore:4.0.1
          |    |         +--- commons-logging:commons-logging:1.1.1
          |    |         \--- commons-codec:commons-codec:1.3
          |    \--- com.google.code.findbugs:jsr305:1.3.9
          +--- com.google.http-client:google-http-client-jackson2:1.19.0
          |    +--- com.google.http-client:google-http-client:1.19.0 (*)
          |    \--- com.fasterxml.jackson.core:jackson-core:2.1.3
          \--- com.google.guava:guava-jdk5:13.0  

Original results of ./gradlew -q dependencies myapp:dependencies without any exclude:

_debugApk - ## Internal use, do not manually configure ##
+--- com.android.support:multidex:1.0.0 -> 1.0.1
+--- com.android.support:multidex:1.0.+ -> 1.0.1
+--- project :sherlockNavigationDrawer
|    +--- com.actionbarsherlock:actionbarsherlock:4.4.0
|    \--- com.android.support:support-v13:+ -> 21.0.3
|         \--- com.android.support:support-v4:21.0.3
|              \--- com.android.support:support-annotations:21.0.3
+--- project :facebookSDK
|    \--- com.android.support:support-v13:+ -> 21.0.3 (*)
+--- project :myLibrary
|    +--- com.android.support:support-v13:+ -> 21.0.3 (*)
|    +--- com.google.code.gson:gson:2.2.4
|    +--- com.actionbarsherlock:actionbarsherlock:4.4.0
|    \--- com.nostra13.universalimageloader:universal-image-loader:1.9.3
+--- project :viewPagerLibrary
|    \--- com.android.support:support-v13:+ -> 21.0.3 (*)
+--- org.apmem.tools:layouts:1.5
+--- com.github.amlcurran.showcaseview:library:5.0.0
+--- com.jakewharton:butterknife:6.0.0
+--- com.google.android.gms:play-services:+ -> 6.5.87
|    \--- com.android.support:support-v4:21.0.0 -> 21.0.3 (*)
+--- com.android.support:support-v13:21.0.0 -> 21.0.3 (*)
\--- com.google.apis:google-api-services-youtube:v3-rev120-1.19.0
     \--- com.google.api-client:google-api-client:1.19.0
          +--- com.google.oauth-client:google-oauth-client:1.19.0
          |    +--- com.google.http-client:google-http-client:1.19.0
          |    |    +--- com.google.code.findbugs:jsr305:1.3.9
          |    |    \--- org.apache.httpcomponents:httpclient:4.0.1
          |    |         +--- org.apache.httpcomponents:httpcore:4.0.1
          |    |         +--- commons-logging:commons-logging:1.1.1
          |    |         \--- commons-codec:commons-codec:1.3
          |    \--- com.google.code.findbugs:jsr305:1.3.9
          +--- com.google.http-client:google-http-client-jackson2:1.19.0
          |    +--- com.google.http-client:google-http-client:1.19.0 (*)
          |    \--- com.fasterxml.jackson.core:jackson-core:2.1.3
          \--- com.google.guava:guava-jdk5:13.0

_debugCompile - ## Internal use, do not manually configure ##
+--- com.android.support:multidex:1.0.0 -> 1.0.1
+--- com.android.support:multidex:1.0.+ -> 1.0.1
+--- project :sherlockNavigationDrawer
|    +--- com.actionbarsherlock:actionbarsherlock:4.4.0
|    \--- com.android.support:support-v13:+ -> 21.0.3
|         \--- com.android.support:support-v4:21.0.3
|              \--- com.android.support:support-annotations:21.0.3
+--- project :facebookSDK
|    \--- com.android.support:support-v13:+ -> 21.0.3 (*)
+--- project :myLibrary
|    +--- com.android.support:support-v13:+ -> 21.0.3 (*)
|    +--- com.google.code.gson:gson:2.2.4
|    +--- com.actionbarsherlock:actionbarsherlock:4.4.0
|    \--- com.nostra13.universalimageloader:universal-image-loader:1.9.3
+--- project :viewPagerLibrary
|    \--- com.android.support:support-v13:+ -> 21.0.3 (*)
+--- org.apmem.tools:layouts:1.5
+--- com.github.amlcurran.showcaseview:library:5.0.0
+--- com.jakewharton:butterknife:6.0.0
+--- com.google.android.gms:play-services:+ -> 6.5.87
|    \--- com.android.support:support-v4:21.0.0 -> 21.0.3 (*)
+--- com.android.support:support-v13:21.0.0 -> 21.0.3 (*)
\--- com.google.apis:google-api-services-youtube:v3-rev120-1.19.0
     \--- com.google.api-client:google-api-client:1.19.0
          +--- com.google.oauth-client:google-oauth-client:1.19.0
          |    +--- com.google.http-client:google-http-client:1.19.0
          |    |    +--- com.google.code.findbugs:jsr305:1.3.9
          |    |    \--- org.apache.httpcomponents:httpclient:4.0.1
          |    |         +--- org.apache.httpcomponents:httpcore:4.0.1
          |    |         +--- commons-logging:commons-logging:1.1.1
          |    |         \--- commons-codec:commons-codec:1.3
          |    \--- com.google.code.findbugs:jsr305:1.3.9
          +--- com.google.http-client:google-http-client-jackson2:1.19.0
          |    +--- com.google.http-client:google-http-client:1.19.0 (*)
          |    \--- com.fasterxml.jackson.core:jackson-core:2.1.3
          \--- com.google.guava:guava-jdk5:13.0

_debugTestApk - ## Internal use, do not manually configure ##
No dependencies

_debugTestCompile - ## Internal use, do not manually configure ##
No dependencies

_releaseApk - ## Internal use, do not manually configure ##
+--- com.android.support:multidex:1.0.0 -> 1.0.1
+--- com.android.support:multidex:1.0.+ -> 1.0.1
+--- project :sherlockNavigationDrawer
|    +--- com.actionbarsherlock:actionbarsherlock:4.4.0
|    \--- com.android.support:support-v13:+ -> 21.0.3
|         \--- com.android.support:support-v4:21.0.3
|              \--- com.android.support:support-annotations:21.0.3
+--- project :facebookSDK
|    \--- com.android.support:support-v13:+ -> 21.0.3 (*)
+--- project :myLibrary
|    +--- com.android.support:support-v13:+ -> 21.0.3 (*)
|    +--- com.google.code.gson:gson:2.2.4
|    +--- com.actionbarsherlock:actionbarsherlock:4.4.0
|    \--- com.nostra13.universalimageloader:universal-image-loader:1.9.3
+--- project :viewPagerLibrary
|    \--- com.android.support:support-v13:+ -> 21.0.3 (*)
+--- org.apmem.tools:layouts:1.5
+--- com.github.amlcurran.showcaseview:library:5.0.0
+--- com.jakewharton:butterknife:6.0.0
+--- com.google.android.gms:play-services:+ -> 6.5.87
|    \--- com.android.support:support-v4:21.0.0 -> 21.0.3 (*)
+--- com.android.support:support-v13:21.0.0 -> 21.0.3 (*)
\--- com.google.apis:google-api-services-youtube:v3-rev120-1.19.0
     \--- com.google.api-client:google-api-client:1.19.0
          +--- com.google.oauth-client:google-oauth-client:1.19.0
          |    +--- com.google.http-client:google-http-client:1.19.0
          |    |    +--- com.google.code.findbugs:jsr305:1.3.9
          |    |    \--- org.apache.httpcomponents:httpclient:4.0.1
          |    |         +--- org.apache.httpcomponents:httpcore:4.0.1
          |    |         +--- commons-logging:commons-logging:1.1.1
          |    |         \--- commons-codec:commons-codec:1.3
          |    \--- com.google.code.findbugs:jsr305:1.3.9
          +--- com.google.http-client:google-http-client-jackson2:1.19.0
          |    +--- com.google.http-client:google-http-client:1.19.0 (*)
          |    \--- com.fasterxml.jackson.core:jackson-core:2.1.3
          \--- com.google.guava:guava-jdk5:13.0

_releaseCompile - ## Internal use, do not manually configure ##
+--- com.android.support:multidex:1.0.0 -> 1.0.1
+--- com.android.support:multidex:1.0.+ -> 1.0.1
+--- project :sherlockNavigationDrawer
|    +--- com.actionbarsherlock:actionbarsherlock:4.4.0
|    \--- com.android.support:support-v13:+ -> 21.0.3
|         \--- com.android.support:support-v4:21.0.3
|              \--- com.android.support:support-annotations:21.0.3
+--- project :facebookSDK
|    \--- com.android.support:support-v13:+ -> 21.0.3 (*)
+--- project :myLibrary
|    +--- com.android.support:support-v13:+ -> 21.0.3 (*)
|    +--- com.google.code.gson:gson:2.2.4
|    +--- com.actionbarsherlock:actionbarsherlock:4.4.0
|    \--- com.nostra13.universalimageloader:universal-image-loader:1.9.3
+--- project :viewPagerLibrary
|    \--- com.android.support:support-v13:+ -> 21.0.3 (*)
+--- org.apmem.tools:layouts:1.5
+--- com.github.amlcurran.showcaseview:library:5.0.0
+--- com.jakewharton:butterknife:6.0.0
+--- com.google.android.gms:play-services:+ -> 6.5.87
|    \--- com.android.support:support-v4:21.0.0 -> 21.0.3 (*)
+--- com.android.support:support-v13:21.0.0 -> 21.0.3 (*)
\--- com.google.apis:google-api-services-youtube:v3-rev120-1.19.0
     \--- com.google.api-client:google-api-client:1.19.0
          +--- com.google.oauth-client:google-oauth-client:1.19.0
          |    +--- com.google.http-client:google-http-client:1.19.0
          |    |    +--- com.google.code.findbugs:jsr305:1.3.9
          |    |    \--- org.apache.httpcomponents:httpclient:4.0.1
          |    |         +--- org.apache.httpcomponents:httpcore:4.0.1
          |    |         +--- commons-logging:commons-logging:1.1.1
          |    |         \--- commons-codec:commons-codec:1.3
          |    \--- com.google.code.findbugs:jsr305:1.3.9
          +--- com.google.http-client:google-http-client-jackson2:1.19.0
          |    +--- com.google.http-client:google-http-client:1.19.0 (*)
          |    \--- com.fasterxml.jackson.core:jackson-core:2.1.3
          \--- com.google.guava:guava-jdk5:13.0

androidJacocoAgent - The Jacoco agent to use to get coverage data.
\--- org.jacoco:org.jacoco.agent:0.7.1.201405082137

androidJacocoAnt - The Jacoco ant tasks to use to get execute Gradle tasks.
\--- org.jacoco:org.jacoco.ant:0.7.1.201405082137
     +--- org.jacoco:org.jacoco.core:0.7.1.201405082137
     |    \--- org.ow2.asm:asm-debug-all:5.0.1
     +--- org.jacoco:org.jacoco.report:0.7.1.201405082137
     |    +--- org.jacoco:org.jacoco.core:0.7.1.201405082137 (*)
     |    \--- org.ow2.asm:asm-debug-all:5.0.1
     \--- org.jacoco:org.jacoco.agent:0.7.1.201405082137

androidTestApk - Classpath packaged with the compiled androidTest classes.
No dependencies

androidTestCompile - Classpath for compiling the androidTest sources.
No dependencies

androidTestProvided - Classpath for only compiling the androidTest sources.
No dependencies

apk - Classpath packaged with the compiled main classes.
No dependencies

archives - Configuration for archive artifacts.
No dependencies

compile - Classpath for compiling the main sources.
+--- com.android.support:multidex:1.0.+ -> 1.0.1
+--- project :sherlockNavigationDrawer
|    +--- com.actionbarsherlock:actionbarsherlock:4.4.0
|    \--- com.android.support:support-v13:+ -> 21.0.3
|         \--- com.android.support:support-v4:21.0.3
|              \--- com.android.support:support-annotations:21.0.3
+--- project :facebookSDK
|    \--- com.android.support:support-v13:+ -> 21.0.3 (*)
+--- project :myLibrary
|    +--- com.android.support:support-v13:+ -> 21.0.3 (*)
|    +--- com.google.code.gson:gson:2.2.4
|    +--- com.actionbarsherlock:actionbarsherlock:4.4.0
|    \--- com.nostra13.universalimageloader:universal-image-loader:1.9.3
+--- project :viewPagerLibrary
|    \--- com.android.support:support-v13:+ -> 21.0.3 (*)
+--- org.apmem.tools:layouts:1.5
+--- com.github.amlcurran.showcaseview:library:5.0.0
+--- com.jakewharton:butterknife:6.0.0
+--- com.google.android.gms:play-services:+ -> 6.5.87
|    \--- com.android.support:support-v4:21.0.0 -> 21.0.3 (*)
+--- com.android.support:support-v13:21.0.0 -> 21.0.3 (*)
\--- com.google.apis:google-api-services-youtube:v3-rev120-1.19.0
     \--- com.google.api-client:google-api-client:1.19.0
          +--- com.google.oauth-client:google-oauth-client:1.19.0
          |    +--- com.google.http-client:google-http-client:1.19.0
          |    |    +--- com.google.code.findbugs:jsr305:1.3.9
          |    |    \--- org.apache.httpcomponents:httpclient:4.0.1
          |    |         +--- org.apache.httpcomponents:httpcore:4.0.1
          |    |         +--- commons-logging:commons-logging:1.1.1
          |    |         \--- commons-codec:commons-codec:1.3
          |    \--- com.google.code.findbugs:jsr305:1.3.9
          +--- com.google.http-client:google-http-client-jackson2:1.19.0
          |    +--- com.google.http-client:google-http-client:1.19.0 (*)
          |    \--- com.fasterxml.jackson.core:jackson-core:2.1.3
          \--- com.google.guava:guava-jdk5:13.0

However, when I run the Android Studio "Analyze Dependencies" function, I still see "android-support-v13.jar"appearing 4 times.

I'm using Android Gradle plugin version 0.14.2

My project structure:

Updates 5 Jan 2015
Enabling multidex has allowed me to run the app. However, I don't believe my app has reached the 65k methods limit yet. So, this should only be considered a workaround.

回答1:

Like Scott Barta said, it's a limitation of the dex File and not a problem with multiple library. This issue was triggered because Google Play service library beacame realy huge and you are including it : compile 'com.google.android.gms:play-services:+'

This is why google provided granularity management of play service: https://developer.android.com/google/play-services/setup.html#split

You can now select only needed services to include in your project and reduce your dex file size. You should be able to remove multidex this way.

Hope it will helps someone



回答2:

I use Intellij 13.0.1 to build non-gradle projects so this might not work for you.However,to know how many libraries my project uses,or to add/remove any I usually go to file > Project Structure > Modules and then view the dependencies to resolve any error.You can also delete duplicates.