“编写输出时出现问题:字段引用太多:70185;最大值为65536.您可以尝试使用--multi-dex选项。”在构建Android项目时

时间:2014-05-20 01:26:49

标签: android apk android-library dex apklib

我遇到了这个错误,没有找到错误消息的命中,所以我想我会分享我想出的解决方案来解决重复我工作的问题。

在编写用于(大型)应用程序的新Android库(apklib)时,当我将新项目添加为依赖项时,我在dexing期间收到以下错误:

  

编写输出时出现问题:字段引用太多:70185;最大值为65536   您可以尝试使用--multi-dex选项   包装参考:
  < ...包含字段数的包的长列表...>

它失败的特定构建步骤是:

java -jar $ANDROID_SDK/build-tools/19.0.3/lib/dx.jar --dex \
--output=$PROJECT_HOME/target/classes.dex \
<... long list of apklib and jar dependencies elided ...>

根据错误消息的建议使用--multi-dex可能是一个解决方案,但我不是应用程序项目的所有者,并且它已经有一个庞大的复杂构建过程,我会毫不犹豫地改变它。

我可以使用没有字段的无操作测试库项目重现此问题,但在错误输出中它列为具有6000+字段。在错误输出中列出的软件包中,有少数具有类似的6k +字段计数,但绝大多数具有更合理的&lt; 1k字段数。

此问题类似于&#34;太多方法&#34; Facebook famously hacked their way around的问题。 FB解决方案似乎很疯狂,我发现的唯一其他解决方案(例如this Android bug ticketor this onethis SO answerthis other SO answer)都涉及更改主应用程序和#39;代码远远超出了我想要做的范围。

还有其他解决方案吗?

1 个答案:

答案 0 :(得分:2)

解决方案是更改AndroidManifest中的package以匹配主应用程序包。

这样的清单:

<manifest package="com.example.testlibrary" ...

导致6k +字段并构建失败。更改它以匹配主应用程序包

<manifest package="com.example.mainapplication" ...

成功完成了项目建设。

请注意,只有清单中的包正在更改,我没有对库的Java源代码或其布局进行任何更改(Java包仍然是com.example.testlibrary,其目录结构与之匹配)。

我假设不同的包名称导致所有Android字段再次包含在该包中。错误列表中包含6k +字段的所有包都具有与主应用程序不同的包名称。

我也(后来,grr),发现this blog post详细说明了同样的问题和最终相同的解决方案。