我遇到了这个错误,没有找到错误消息的命中,所以我想我会分享我想出的解决方案来解决重复我工作的问题。
在编写用于(大型)应用程序的新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 ticket,or this one,this SO answer,this other SO answer)都涉及更改主应用程序和#39;代码远远超出了我想要做的范围。
还有其他解决方案吗?
答案 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详细说明了同样的问题和最终相同的解决方案。