0

我遇到了一些 Android 项目的构建问题。我们不得不开始使用 multidex 支持,因为我们有超过 65K 的方法限制。我遇到的一件事是创建主 dex 列表文件。我可以构建所有东西,但是在我将 apk 下载到我的设备上后,应用程序崩溃了,并且出现了诸如 NoClassDefFoundError 或 VerifyError 之类的非正统错误。所以,我认为这与multidex有关,我很困惑。我应该将所有类文件添加到列表中吗?谢谢。

4

1 回答 1

1

我对 activeandroid 有同样的警告

VFY: unable to resolve static method 

然后致命的 NoClassDefFound 错误完成运行时过程。当设备 api 低于目标 sdk api 版本时,有时会发生一些静态方法找不到。我发现 mainDexClasses 脚本有助于将所有类加入到一个 dex 文件中。不幸的是,这个实用程序不适合我的情况。所以我使用 dexdump 实用程序来获取设备找不到的所有类

${ANDROID_HOME}/build-tools/[sdkNum]/dexdump target/classes.dex |grep "Class descriptor"|grep activeandroid >> MainDexList.txt

并像上面一样将 classes2.dex 中的类添加到 MainDexList.txt。请注意,只有 activeandroid 包而不是整个类的列表。接下来,像这样删除多余的前缀和后缀

sed -r "s/  Class descriptor  : 'L//g" MainDexList.txt>MainDexList.tmp;\
sed -r "s/;'/.class/g" MainDexList.tmp > MainDexList;\
rm MainDexList.tmp 

然后指定 MainDexList

<mainDexList>MainDexList</mainDexList>

在 android-plugin 配置的 dex 部分中或将此文件用于 dx 实用程序。

我不清楚为什么 65k 会限制方法数。您是否启用了 multiDex 选项(请参见此处)?我想这是生成一些 dex 文件的主要原因,这就是为什么在我的情况下将一个包拆分为 2 个文件时会出现问题的原因。所以我们应该避免如上所述获取整个 MainDexList。

于 2016-09-29T13:17:25.900 回答