为Maven

时间:2015-09-22 17:51:30

标签: android maven build multidex

我遇到了Android项目的一些构建问题。我们必须开始使用multidex支持,因为我们已超过65K的方法限制。我遇到问题的一件事是创建主要的dex列表文件。我可以构建所有内容但是在我将apk下载到我的设备上之后应用程序崩溃并且我得到了像NoClassDefFoundError或VerifyError这样的unorthodx错误。所以,我认为它与multidex有关,我很困惑。我应该只将所有类文件添加到列表中吗?感谢。

1 个答案:

答案 0 :(得分:0)

我对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选项(请参阅here)?我猜这是生成一些dex文件的主要原因,这就是为什么在我的情况下将一个包拆分为2个文件时出现问题的原因。所以我们应该避免如上所述获得整个MainDexList。