我怎样才能使用` – multi-dex`选项?

[2013-11-13 18:39:09 - XlApp] Dx trouble writing output: Too many method references: 66024; max is 65536. You may try using --multi-dex option. References by package: 13 java.lang 1 java.lang.reflect 5 java.util 1 javax.xml.namespace 66 org.apache.xmlbeans 19 org.apache.xmlbeans.impl.values 1 org.apache.xmlbeans.impl.xb.xmlschema 2500 org.openxmlformats.schemas.drawingml.x2006.chart 1430 org.openxmlformats.schemas.drawingml.x2006.chart.impl 8767 org.openxmlformats.schemas.drawingml.x2006.main 5258 org.openxmlformats.schemas.drawingml.x2006.main.impl 86 org.openxmlformats.schemas.drawingml.x2006.picture 33 org.openxmlformats.schemas.drawingml.x2006.picture.impl 745 org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing 417 org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.impl 230 org.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing 164 org.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing.impl 298 org.openxmlformats.schemas.officeDocument.x2006.customProperties 256 org.openxmlformats.schemas.officeDocument.x2006.customProperties.impl 617 org.openxmlformats.schemas.officeDocument.x2006.docPropsVTypes 596 org.openxmlformats.schemas.officeDocument.x2006.docPropsVTypes.impl 285 org.openxmlformats.schemas.officeDocument.x2006.extendedProperties 196 org.openxmlformats.schemas.officeDocument.x2006.extendedProperties.impl 23 org.openxmlformats.schemas.officeDocument.x2006.math 24 org.openxmlformats.schemas.officeDocument.x2006.relationships 2 org.openxmlformats.schemas.officeDocument.x2006.relationships.impl 2076 org.openxmlformats.schemas.presentationml.x2006.main 1224 org.openxmlformats.schemas.presentationml.x2006.main.impl 1 org.openxmlformats.schemas.schemaLibrary.x2006.main 7271 org.openxmlformats.schemas.spreadsheetml.x2006.main 4556 org.openxmlformats.schemas.spreadsheetml.x2006.main.impl 11448 org.openxmlformats.schemas.wordprocessingml.x2006.main 9217 org.openxmlformats.schemas.wordprocessingml.x2006.main.impl 4 schemaorg_apache_xmlbeans.system.sE130CAA0A01A7CDE5A2B4FEB8B311707 1170 schemasMicrosoftComOfficeExcel 1223 schemasMicrosoftComOfficeExcel.impl 285 schemasMicrosoftComOfficeOffice 124 schemasMicrosoftComOfficeOffice.impl 2 schemasMicrosoftComOfficePowerpoint 3 schemasMicrosoftComOfficeWord 2858 schemasMicrosoftComVml 2529 schemasMicrosoftComVml.impl [2013-11-13 18:39:09 - XlApp] Conversion to Dalvik format failed with error 2 

当我在我的android项目中包含5个外部.jar文件时,出现此错误。 我不知道该怎么做。 请帮助我的人!

我想到做这个build议你可以尝试使用–multi-dex选项

但是我找不到在任何地方使用这个选项的方法。

Related of "我怎样才能使用` – multi-dex`选项?"

如果您正在使用Gradle / Android Studio,则可以将其添加到您的Gradleconfiguration中:

 android { .... dexOptions { preDexLibraries = false } } afterEvaluate { tasks.matching { it.name.startsWith('dex') }.each { dx -> if (dx.additionalParameters == null) { dx.additionalParameters = [] } dx.additionalParameters += '--multi-dex' // this is optional // dx.additionalParameters += "--main-dex-list=$projectDir/multidex.keep".toString() } } 

然后,您需要添加位于sdk/extras/android/support/multidex/library/libs的multidex支持库jar。 通过从MultiDexApplication扩展应用程序或从应用程序的attachBaseContext方法调用Multidex.install()来安装它。

欲了解更多详情,请看这个博客: http : //blog.osom.info/2014/10/multi-dex-to-rescue-from-infamous-65536.html

更新:

这里https://developer.android.com/tools/building/multidex.html你可以find官方的方式来使用与Gradle的multidex。

基本上你需要像这样改变你的gradle文件:

 android { compileSdkVersion 21 buildToolsVersion "21.1.0" defaultConfig { ... minSdkVersion 14 targetSdkVersion 21 ... // Enabling multidex support. multiDexEnabled true } ... } dependencies { compile 'com.android.support:multidex:1.0.0' } 

并将您的应用程序类设置为android.support.multidex.MultiDexApplication,或者如果您已经有一个应用程序类,您可以重写attachBaseContext()方法,并调用MultiDex.install(this)以启用multidex。

更新:您现在可以在以下页面find详细的说明如何configuration多个dex: https : //developer.android.com/tools/building/multidex.html

简单的答案是,目前Android Studio工具不允许您指定生成多个dex文件(–multi-dex)的选项。 所以你需要手动编写你的构build过程……真正的痛苦。

有几个看起来相关的Android bug: 63936和20814

从javadoc文档:

 usage: dx --dex [--debug] [--verbose] [--positions=<style>] [--no-locals] [--no-optimize] [--statistics] [--[no-]optimize-list=<file>] [--no-strict] [--keep-classes] [--output=<file>] [--dump-to=<file>] [--dump-width=<n>] [--dump-method=<name>[*]] [--verbose-dump] [--no-files] [--core-library] [--num-threads=<n>] [--incremental] [--force-jumbo] [--multi-dex [--main-dex-list=<file> [--minimal-main-dex]] [<file>.class | <file>.{zip,jar,apk} | <directory>] ... Convert a set of classfiles into a dex file, optionally embedded in a jar/zip. Output name must end with one of: .dex .jar .zip .apk or be a directory. Positions options: none, important, lines.\n --multi-dex: allows to generate several dex files if needed. This option is exclusive with --incremental, causes --num-threads to be ignored and only supports folder or archive output. --main-dex-list=<file>: <file> is a list of class file names, classes defined by those class files are put in classes.dex. --minimal-main-dex: only classes selected by --main-dex-list are to be put in the main dex. 

dx是一个在android构build过程中用于分解的工具。 在用于默认android构build的build.xml (位于sdk.dir/tools/ant/buildxml )中,它被用作在macrosdex-helper声明的target name="-dex"一部分。 已经过时的Anttask仍然不支持–multi-dex。

dexer源代码中,– dexer -dex-list选项接收文件input,其中包含您想要在主dex中的所有类文件,并用新行隔开。 喜欢这个:

 bin/classes/com/example/MainActivity.class 

没有在这个列表中声明的其他类将转到次要的dex。

或者你可以使用旧的方式 – 多德克斯介绍: http : //android-developers.blogspot.com/2011/07/custom-class-loading-in-dalvik.html

现在,我编辑

 .../sdk/build-tools/19.0.3/dx 

取代最后一行:

 exec java $javaOpts -jar "$jarpath" --multi-dex "$@" 

这是一个黑客。 这是不可维护的。 可能你的CIpipe理员会恨你…

但它的工作!

正如你所知道的,如果使用ant build,你必须修改一下build.xml。 你将输出属性从存档改变到一个目录(即$ project / bin),并且dx步骤将成功完成。 可能是这样的,但ant-tasks.jar和sdklib.jar都需要修改才能完成'apkbuilder'的步骤。

  • ApkBuilder,ApkBuilderTask类

如果有人在这个时候绊倒在这里,你可以检查你添加的库。 一般这个错误:
trouble writing output: Too many method references: 66024; max is 65536. trouble writing output: Too many method references: 66024; max is 65536.当你添加了很多的库。 我看过很多次的例子是当你想添加一个特定的谷歌播放服务,如谷歌播放分析,您添加整个谷歌播放库。 尝试添加特定的库。 这将解决您的问题。