【问题标题】:What is the best way to solve the UNEXPECTED TOP-LEVEL EXCEPTION?解决 UNEXPECTED TOP-LEVEL EXCEPTION 的最佳方法是什么?
【发布时间】:2016-02-19 09:33:21
【问题描述】:

当我让应用程序使用许多库时。我通常遇到一个错误是UNEXPECTED TOP-LEVEL EXCEPTION

这个错误有一些原因:

  • 数字函数> 65k,需要开启multidex
  • 有一些库是嵌套的,我们需要在 build.gradle 中添加排除。

关于第二种情况,很难检测出嵌套了什么lib。

如果你有这方面的经验,请分享给我。

更新:

dependencies {
    compile files('libs/ormlite-android-4.48.jar')
    compile files('libs/ormlite-core-4.48.jar')
    //    compile 'com.obsez.android.lib.filechooser:filechooser:1.1.2'
    //    compile 'com.github.bumptech.glide:glide:3.6.1'
    compile 'com.android.support:recyclerview-v7:23.1.1'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.jakewharton:butterknife:7.0.1'
    compile 'cn.lightsky.infiniteindicator:library:1.0.5'
    compile 'com.firebase:firebase-client-android:2.3.1'
    compile 'de.hdodenhof:circleimageview:2.0.0'
    compile 'com.mcxiaoke.volley:library:1.0.15'
    compile('com.google.apis:google-api-services-drive:v2-rev170-1.20.0') {
        exclude group: 'org.apache.httpcomponents'
    }
    compile('com.google.api-client:google-api-client-android:1.20.0') {
        exclude group: 'org.apache.httpcomponents'
    }
    compile('com.google.android.gms:play-services:8.4.0') {
        exclude group: 'com.android.support', module: 'support-v4'
    }
    compile 'com.nononsenseapps:filepicker:2.4.1'
}

【问题讨论】:

  • 没有最好的方法,因为原因可能不同。每种情况都有一个解决方案,其中包含 UNEXPECTED TOP-LEVEL EXCEPTION。发布您的问题,一些用户将帮助您解决
  • 嗨,@GabrieleMariotti 先生,我有更新我的案例,这让我很长时间,所以我想询问一般案例。
  • 发布 gradle 问题的堆栈跟踪。使用 gradlew assemble --info 获取更多详细信息。
  • 嗨,Gradlew --info 没有错误并且在 logcat 中只有错误:Error:Execution failed for task ':app:transformClassesWithDexForDebug'. > com.android.build.api.transform.TransformException: com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.8.0_25\bin\java.exe'' finished with non-zero exit value 2
  • 不幸的是它没有帮助。 UNEXPECTED TOP-LEVEL EXCEPTION 附近应该是对实际问题的简短描述。

标签: android exception build.gradle


【解决方案1】:

解决 UNEXPECTED TOP-LEVEL EXCEPTION 的最佳方法? 我会建议你用这两个步骤来解决这个问题。

  • 检查附加的库依赖/层次结构
  • 检查哪些库类或文件是导致重复的原因 文件或方法数超过 65k


  • 如何检查附加库的依赖关系/层次结构?

首先找到在从 maven/jcenter/mavencentral 附加/编译的库中使用的依赖项。主要问题将附带支持,因为 support-v4 和 appcompact 可能已经包含在从 maven 附加的库中(比如 play service 包含 v4 ,appcompact 附加然后不需要附加 support-v4 因为它已经包含了。)

如何在 gradle 中检查附加库的依赖关系/层次结构

Gradle 菜单 > :modulename >> 任务 >> android >> 运行“androidDependcies”

Gradle 菜单 > :app >> 任务 >> android >> 运行“androidDependcies”

通过在 Gradle 控制台 中执行此操作,您将获得如下所示的输出(输出可能取决于附加的库)。这可以提供有关库的重复/层次结构的想法

release
+--- LOCAL: picasso-2.5.2.jar
+--- LOCAL: YouTubeAndroidPlayerApi.jar
+--- LOCAL: commons-lang-2.6.jar
+--- LOCAL: signpost-core-1.2.1.1.jar
+--- LOCAL: kxml2_2.3.0.jar
+--- LOCAL: classes.jar
+--- LOCAL: signpost-commonshttp4-1.2.1.1.jar
+--- LOCAL: json-simple-1.1.1.jar
+--- LOCAL: universal-image-loader-1.9.3.jar
+--- LOCAL: linkedin-j-.jar
+--- LOCAL: maps.jar
+--- LOCAL: nineoldandroids-2.4.0.jar
+--- com.android.support:multidex:1.0.1
+--- com.android.support:multidex:1.0.1
+--- com.android.support:appcompat-v7:23.1.1
|    \--- com.android.support:support-v4:23.1.1
|         \--- LOCAL: internal_impl-23.1.1.jar
+--- com.google.android.gms:play-services-maps:7.3.0
|    \--- com.google.android.gms:play-services-base:7.3.0
|         \--- com.android.support:support-v4:23.1.1
|              \--- LOCAL: internal_impl-23.1.1.jar
+--- com.google.android.gms:play-services-gcm:7.3.0
|    \--- com.google.android.gms:play-services-base:7.3.0
|         \--- com.android.support:support-v4:23.1.1
|              \--- LOCAL: internal_impl-23.1.1.jar
+--- com.google.android.gms:play-services-location:7.3.0
|    +--- com.google.android.gms:play-services-base:7.3.0
|    |    \--- com.android.support:support-v4:23.1.1
|    |         \--- LOCAL: internal_impl-23.1.1.jar
|    \--- com.google.android.gms:play-services-maps:7.3.0
|         \--- com.google.android.gms:play-services-base:7.3.0
|              \--- com.android.support:support-v4:23.1.1
|                   \--- LOCAL: internal_impl-23.1.1.jar
+--- com.google.android.gms:play-services-ads:7.3.0
|    +--- com.google.android.gms:play-services-base:7.3.0
|    |    \--- com.android.support:support-v4:23.1.1
|    |         \--- LOCAL: internal_impl-23.1.1.jar
|    \--- com.google.android.gms:play-services-analytics:7.3.0
|         \--- com.google.android.gms:play-services-base:7.3.0
|              \--- com.android.support:support-v4:23.1.1
|                   \--- LOCAL: internal_impl-23.1.1.jar
+--- com.google.android.gms:play-services-analytics:7.3.0
|    \--- com.google.android.gms:play-services-base:7.3.0
|         \--- com.android.support:support-v4:23.1.1
|              \--- LOCAL: internal_impl-23.1.1.jar
+--- com.google.android.gms:play-services-plus:7.3.0
|    \--- com.google.android.gms:play-services-base:7.3.0
|         \--- com.android.support:support-v4:23.1.1
|              \--- LOCAL: internal_impl-23.1.1.jar
\--- com.android.support:recyclerview-v7:23.1.1
     \--- com.android.support:support-v4:23.1.1
          \--- LOCAL: internal_impl-23.1.1.jar

您也可以从终端检查上述过程。

gradlew app:dependencies

你可以检查下图为“图片值一千字”

如何检查导致重复条目/或方法计数超过 65k 的类或文件?

而不是检查您收到的消息或错误,android studio 的 Message 选项卡在 Gradle Console

中检查它

如果消息中的错误就像将类转移到 dex :app:transformClassesWithDexForDebug:app:transformClassesWithDexForRelease 时,最大机会是因为 Multiple dex(方法超过 65k 限制)。

或者如果有任何其他错误会指定,例如与重复条目相关等。

【讨论】:

    猜你喜欢
    • 2013-06-30
    • 2015-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-08
    相关资源
    最近更新 更多