问题标签 [android-multidex]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
9548 浏览

android - 在 Android 中启用 MultiDex Support 以在 Eclipse 中实现 65K+ 方法

我正在尝试在 Eclipse 中构建 Multidex apk,但无法成功。

我尝试了以下步骤,用于在 android 应用程序中配置 Multidex 支持:

  1. 我已将位于 /extras/android/support/multidex/ 的 Multidex 库添加到我的项目中。
  2. 由于我的应用程序具有自定义应用程序类,我已将 android.support.multidex.MultiDexApplication 类扩展到我的应用程序。

我仍然无法构建apk。

Android 开发人员 也没有任何在 Eclipse 中构建 Multidex apk 的文档,它只有 gradle 和 Android Studio 的文档。

0 投票
2 回答
2967 浏览

android - 实现MultiDex导致编译这么久,最后出现heap space错误

我有一个大型 Android 项目,其中出现Unable to execute dex: method ID not in [0, 0xffff]: 65536错误;我相信你们中的一些人之前肯定已经经历过这个问题。这是由于应用程序中引用的方法过多而导致的错误。

我在网上寻找了不同的来源,发现可能是最好的解决方案。

我做了以下事情:

  1. multiDexEnabled = true在build.gradledefaultConfig块中添加
  2. 添加了以下依赖项:

    /li>
  3. 在我的 App 类中覆盖了以下代码。

    /li>

现在,错误消失了,但我有一个新问题。当我运行应用程序时,编译器需要 3 多分钟来编译和运行应用程序,最后给我这个错误:

我了解此错误是由于内存使用量过大而导致的,但我不知道如何解决。我正在使用 Android Studio 1.0.2 和 Android API 21。

谢谢!

编辑

我已经检查了如何在 MonoDevelop 中编译 MonoDroid App 时修复“OutOfMemoryError: java heap space”,但这并没有涵盖问题的原因,而且我没有使用 Xamarin Studio。

编辑2

确切的症状是这样的:
当我编译代码时,gradle 控制台向我显示数百条警告说“忽略匿名内部类的 InnerClasses 属性”(其他一些 stackoverflow 答案表明这不是严重的警告),然后什么也不显示但是光标闪烁了一会儿,大约一分钟后,它给了我错误。

0 投票
1 回答
662 浏览

android - Android:SugarORM 和 multidex

我正在使用使用 SugarORM 的 Android 项目。现在方法限制增加了很多,我不得不激活 multidex 支持。但是现在我遇到了 SugarORM 的问题,它只创建 classes.dex 文件中的表。似乎完全忽略了 classes2.dex。这真的是Sugar中的一个错误吗?有什么好方法可以绕过这个问题吗?

0 投票
3 回答
7709 浏览

android - MultiDexTestRunner 的哪个包?android.support.multidex 或 com.android.test.runner

该页面http://developer.android.com/tools/building/multidex.html#testing 建议

但是在运行测试时会产生 ClassNotFoundException。

API 文档和 dexdump 显示有 com.android.test.runner.MultiDexTestRunner。

因此,如果我不相信文档并指定

然后我得到

我怀疑文档页面是错误的,正确的路径是 com.android.test.runner.MultiDexTestRunner ...另外我还有其他问题。

请注意,multidex 应用程序工作正常。不知何故,第二个 MultiDexApplication 包含在测试 apk 中。

问题:
MultiDexTestRunner 的正确路径是什么?为什么我在测试 apk 中获得了第二个 MultiDexApplication?

0 投票
4 回答
12688 浏览

java - Android 工作室 java.lang.NoClassDefFoundError: android.support.v4.app.NavUtilsJB

这是我用 android studio 1.0.2 实现的错误日志

配置

如何解决这个错误?gradlew clean 没有帮助。构建文件夹删除也不起作用。Android Studio 在编译时没有显示错误。

0 投票
2 回答
1972 浏览

android - How do I make classes.dex as small as possible, when using multidex?

Our app is about 100k methods. We have no issues getting the application built using multidex (we are using gradle, latest build tools, multiDexEnabled true and preDexLibraries false.

We're publishing to the Amazon App Store, and in their great wisdom, they arbitrarily inject about 2000 methods after uploading. We've been contacted by them, to tell us that we should shrink down our primary classes.dex file, and move more into the secondary dex files.

I'm at a bit of a loss as to how we can so finely control what goes where.

I'm watching the build process, and am seeing build/intermediates/multi-dex/[flavor]/maindexlist.txt. This appears to be a list of files to keep in the main dex file. It's not that large, has about 500 entries.

I'm also seeing the same directory, components.flags. Which is an auto-generated ProGuard config to shrink down to this. After that's run, it outputs into (same directory still) componentClasses.jar.

This componentClasses jar looks just right. It has a fairly minimal (around 10% of the total) set of classes, that are the ones absolutely required to be in the main dex file.

But when it reaches the dex step, it still packs as much as it possibly can into the primary classes.dex. No matter what we add/remove/tune, it always packs just under the absolute limit (65536) methods into there. Then spills over the remains into classes2.dex.

In order to guarantee there is scope for Amazon to inject their 2000 methods into the primary dex file, I want to ensure that only the classes that are absolutely required to be in that primary dex file, are.

How do I go about doing that?

0 投票
3 回答
1424 浏览

android - Gradle 和 Android Studio 升级后的 NoClassDefFound

由于我升级了 Android Studio,我有点被迫将 Gradle 的版本、buildToolsVersion 和 java 的版本升级到 7。

我的问题是我实际上可以完美地在 Android Lollipop 上运行该项目,但是我失去了向后兼容性,我无法在 API 21 之前的设备上运行应用程序。

Android Studio 版本: 1.0.2
Gradle Wrapper 版本: gradle-2.2.1-all

我遵循了使用 Gradle指南为 Multidex 配置您的应用程序的每一步。

TL;DR代码编译完美,在 Android Lollipop 上运行,不运行之前的 Lollipop。

正如 Dependency 也声明的那样

项目的根依赖项。

我的应用程序类根据要求扩展了 MultiDexApplication。

我在 Android 4.0.3 设备上运行项目时得到的堆栈跟踪:

编辑 02/10/15:添加了 MundoDescuentoApplication.java 和 LoginForm.java

堆栈跟踪中出现的类中的行是private static final Injector injector = Guice.createInjector(new ApplicationGuiceModule(), new GsonModule());

LoginForm.java

我已经失去了这方面的所有线索,任何帮助将不胜感激!

0 投票
3 回答
2117 浏览

android - 在 kitkat 上使用 multidex 时的 Resources$NotFoundException

我有这个需要 multidex 的应用程序,它在棒棒糖上运行良好,但是当我在 kitkat 下运行它时,它给了我一个Resources$NotFoundException

我的毕业配置是:

我的Application课扩展了MultiDexApplication

这是一个例外:

那么我做错了什么?

谢谢。

编辑:这是它崩溃的地方:

在 setContentView 上。

编辑:添加更多的 gradle 文件:

编辑:我应该提到我不在 Android Studio 1.1 rc1 上并且仍然有问题。

编辑:如果我删除了它抱怨的可绘制对象的使用,那么它工作正常。这是可绘制的:

它在同一模块的布局文件(迷你控制器)中使用如下:

该布局文件是我在主模块主要活动布局上使用的自定义视图的一部分,如下所示:

编辑:想通了这个问题。由于它是导致它的背景,我尝试在 View 实例化中而不是在 xml 中设置背景,它给了我这个错误java.lang.UnsupportedOperationException: Can't convert to color: type=0x2,告诉我颜色有问题,所以我<solid android:color="?attr/colorPrimary"></solid>用不同的颜色替换它并且它工作。

0 投票
0 回答
373 浏览

android - 处理重复输入错误的最佳方法

我正在尝试在我的 android studio 项目中使用 Appium,所以我必须创建一个新的测试包,并且我必须在我的 Appium 依赖项中添加一个新库:

之后,当我尝试运行相对于 Appium 的测试时,甚至当我尝试运行我的项目时,我收到了以下错误消息:

事实上,我在 com.google.common.annotations 包中发现了这个重复的类,但我不知道管理此类错误的最佳实践是什么。

我试图清理,重建我试图找到一种方法来排除这个重复的类,但目前我没有找到一个好的解决方案来解决我的问题。

0 投票
1 回答
7678 浏览

android - Android ProGuard +MultiDex 导致 ClassNotFoundException

MultiDex在我的android项目中启用了。在我尝试启用 proguard 之前它工作正常。我可以成功构建项目,但在启动时出现运行时异常。它无法找到 Application 类和MainActivity. 我在启用之前遇到了同样的问题MultiDex。现在我猜由于某种原因MultiDex无法正常使用ProGuard. 这是我在 logcat 中得到的 -

之后,堆栈跟踪的其余部分是关于 MainActivity 的 ClassNotFoundException:

编辑- 这是我的 proguard 规则文件: