解决意外的顶级水平的最佳方法是什么? [英] What is the best way to solve the UNEXPECTED TOP-LEVEL EXCEPTION?
问题描述
当我使应用程序使用许多库时。我通常遇到的错误是超出预期的顶级水平
When I make the application use many libraries. I usualy meet a error is UNEXPECTED TOP-LEVEL EXCEPTION
此错误的原因如下:
- 数字函数> 65k,我们需要为其启用multidex
- 嵌套了一些库,我们需要添加
关于第二种情况,很难检测到嵌套的库是什么。
About second case, it is very difficult to detect what is the lib have been nested.
如果您有此问题的经验,请与我分享。
If you have experience on this issue, please share me.
更新:
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'
}
推荐答案
解决非预期的最高水平例外的最佳方法?
我将建议您执行此两步步骤来解决此问题。
The best ways to solve UNEXPECTED TOP-LEVEL EXCEPTION? I will suggest you for this Two step to solve this.
- 检查附加库的依赖性/ hierarchy
- 检查哪些库类或文件是重复的原因
文件或方法计数超过65k
- 如何检查附加库的依赖关系/层次结构?
- How to Check attached libraries Dependency/hierarchy ?
首先找到从maven / jcenter / mavencentral附加/编译的库中使用的依赖项。因为support-v4& appcompact已包含在从maven附加的库中(例如播放服务包含v4,appcompact已附加,因此无需附加support-v4,因为它已经包含了。)
First found the dependency which is used in library which is attached/compiled from the maven/jcenter/mavencentral.Major issue will come with support because it may possible that support-v4 & appcompact already contains in library which is attached from maven (like play service contains v4 ,appcompact attached then no need to attach support-v4 as it already contains.)
如何在gradle中检查附加库的依赖性/层次结构
Gradle菜单>:modulename >>任务>> android >>运行 androidDependcies
OR
渐变菜单> :app >>任务>> android >>运行 androidDependcies
通过在 Gradle Console 中这样做,您将获得一些东西像下面这样作为输出(输出可能取决于附加的库)。哪个可以给出关于库的复制/层次结构的想法
By doing so in Gradle Console you will get something like below as a output(output may depends on libraries attached) .Which can give idea about duplication/hierarchy of the libraries
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
您也可以从终端检查上述过程。
You can also check this from terminal for the above process .
gradlew app:dependencies
您可以在下面的图片中检查图片价值一千字
You can check below image as "picture is worth a thousand words"
如何检查导致重复输入/方法重复的类或文件超过65k吗?
How to check which class or files causing duplicate entry/or method count exceed 65k ?
而不是检查消息或错误,您将得到 android studio的消息 标签在 Gradle Console
Rather than checking on message or error which you are getting Message tab of android studio check it in Gradle Console
如果出现消息错误,例如传输clas ses到dex :app:transformClassesWithDexForDebug
或:app:transformClassesWithDexForRelease
的最大机会就像是因为多个dex(方法超出65k限制)。
If in message error is like while transferring classes to dex :app:transformClassesWithDexForDebug
or :app:transformClassesWithDexForRelease
maximum chances are like because of Multiple dex (method excess 65k limit).
或者是否存在其他错误(例如与重复条目相关的错误等)。
Or if any other error than it will specify like duplicate entry related etc.
这篇关于解决意外的顶级水平的最佳方法是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!