【问题标题】:"trouble writing output: Too many field references: 70185; max is 65536. You may try using --multi-dex option." when building Android project“写入输出问题:字段引用过多:70185;最大值为 65536。您可以尝试使用 --multi-dex 选项。”在构建 Android 项目时
【发布时间】:2014-05-20 01:26:49
【问题描述】:

我遇到了这个错误,但没有找到错误消息的匹配项,所以我想我会分享我想出的解决方案,以拯救面临重复我工作的问题的其他人。

在编写用于(大型)应用程序的新 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+ 字段计数,但绝大多数具有更合理的

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

还有其他解决办法吗?

【问题讨论】:

    标签: android apk android-library dex apklib


    【解决方案1】:

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

    这样的清单:

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

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

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

    导致项目构建成功。

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

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

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

    【讨论】:

    • 我该怎么做?我试图将包重命名为其他名称,但我仍然有同样的错误,...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多