添加支持设计库后应用不会运行
App won't run after adding support design library
我目前正在尝试在我的应用程序上实施 android 设计库,但是在更新我的 SDK 等之后遇到了很多问题,现在我在实际使用它时遇到了麻烦。当 运行 应用程序(gradle 已经同步、清理并重建项目)时,它给了我这个错误:
* What went wrong:
Execution failed for task ':app:dexDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.7.0_45\bin\java.exe'' finished with non-zero exit value 2
我不知道为什么以及如何发生这种情况,但只有当我在我的代码中添加 snackbar 行时它才会触发:
Snackbar
.make(getWindow().getDecorView().getRootView(), R.string.message, Snackbar.LENGTH_LONG)
.setAction(R.string.close, new View.OnClickListener() {
@Override
public void onClick(View v) {
}
})
.show();
任何人都可以指出这个问题发生的位置和方式吗?我还检查了我所有的图书馆,没有任何重复。 TIA
经过一段时间我终于解决了。 gradle 控制台没有向我提供问题的真正原因,而只是 returns 我在问题上提供的那些行。我所做的是 运行 gradle dexDebug --stacktrace --info --debug
然后真正的问题出现了:
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
at com.android.dx.merge.DexMerger.updateIndex(DexMerger.java:502)
at com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:277)
at com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:491)
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:168)
at com.android.dx.merge.DexMerger.merge(DexMerger.java:189)
at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:303)
at com.android.dx.command.dexer.Main.run(Main.java:246)
at com.android.dx.command.dexer.Main.main(Main.java:215)
at com.android.dx.command.Main.main(Main.java:106)
现在可以通过以下方式解决:
defaultConfig {
...
multiDexEnabled = true
}
但这不应该是问题,当我检查外部库时,我发现 play-services 7.5.0 版本确实导致了我这个问题:
所以我把版本降到了6.5.87。再次删除我的 build.gradle 上的 multiDexEnabled,同步并清理,现在它可以工作了! :D
我目前正在尝试在我的应用程序上实施 android 设计库,但是在更新我的 SDK 等之后遇到了很多问题,现在我在实际使用它时遇到了麻烦。当 运行 应用程序(gradle 已经同步、清理并重建项目)时,它给了我这个错误:
* What went wrong:
Execution failed for task ':app:dexDebug'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'C:\Program Files\Java\jdk1.7.0_45\bin\java.exe'' finished with non-zero exit value 2
我不知道为什么以及如何发生这种情况,但只有当我在我的代码中添加 snackbar 行时它才会触发:
Snackbar
.make(getWindow().getDecorView().getRootView(), R.string.message, Snackbar.LENGTH_LONG)
.setAction(R.string.close, new View.OnClickListener() {
@Override
public void onClick(View v) {
}
})
.show();
任何人都可以指出这个问题发生的位置和方式吗?我还检查了我所有的图书馆,没有任何重复。 TIA
经过一段时间我终于解决了。 gradle 控制台没有向我提供问题的真正原因,而只是 returns 我在问题上提供的那些行。我所做的是 运行 gradle dexDebug --stacktrace --info --debug
然后真正的问题出现了:
UNEXPECTED TOP-LEVEL EXCEPTION:
com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536
at com.android.dx.merge.DexMerger.updateIndex(DexMerger.java:502)
at com.android.dx.merge.DexMerger$IdMerger.mergeSorted(DexMerger.java:277)
at com.android.dx.merge.DexMerger.mergeMethodIds(DexMerger.java:491)
at com.android.dx.merge.DexMerger.mergeDexes(DexMerger.java:168)
at com.android.dx.merge.DexMerger.merge(DexMerger.java:189)
at com.android.dx.command.dexer.Main.mergeLibraryDexBuffers(Main.java:454)
at com.android.dx.command.dexer.Main.runMonoDex(Main.java:303)
at com.android.dx.command.dexer.Main.run(Main.java:246)
at com.android.dx.command.dexer.Main.main(Main.java:215)
at com.android.dx.command.Main.main(Main.java:106)
现在可以通过以下方式解决:
defaultConfig {
...
multiDexEnabled = true
}
但这不应该是问题,当我检查外部库时,我发现 play-services 7.5.0 版本确实导致了我这个问题:
所以我把版本降到了6.5.87。再次删除我的 build.gradle 上的 multiDexEnabled,同步并清理,现在它可以工作了! :D