我遇到了这个错误,但没有找到错误消息,所以我想我应该分享我想出的解决方案,以防止其他面临问题的人重复我的工作。
当编写一个新的 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 ...>
Using --multi-dex
错误消息所建议的可能是一个解决方案,但我不是应用程序项目的所有者,它已经有一个大型复杂的构建过程,无论如何我都会犹豫是否要更改它。
我可以使用几乎没有字段的无操作测试库项目来重现此问题,但在错误输出中它被列为具有 6000 多个字段。在错误输出中列出的软件包中,有少数具有类似的 6k+ 字段计数,但绝大多数都有更合理的
这个问题类似于“方法太多”问题Facebook 因黑客攻击而闻名。 FB 解决方案似乎很疯狂,我找到的唯一其他解决方案(例如,这个 Android 错误单, 或者这个, 这个答案, 这另一个答案)都涉及更改主应用程序的代码,这远远超出了我想要做的范围。
还有其他解决办法吗?
解决方案是改变package在 AndroidManifest 中以匹配主应用程序的包。
像这样的清单:
<manifest package="com.example.testlibrary" ...
导致 6k+ 字段和构建失败。更改它以匹配主应用程序的包
<manifest package="com.example.mainapplication" ...
从而使项目建设顺利进行。
请注意,只有清单中的包发生了变化,我没有对库的 Java 源代码或其布局进行任何更改(Java 包仍然是 com.example.testlibrary,其目录结构与之匹配)。
我假设不同的包名称导致所有 Android 字段再次包含在该包下。错误列表中包含 6k+ 字段的所有包的包名称都与主应用程序不同。
我也(后来,grr)发现这篇博文其中详细介绍了相同的问题和最终相同的解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)