0

我在编译 Android 应用程序时遇到了一个重要问题。

使用Windev Mobile,它生成java代码,编译并创建apk,但是,当apk创建时,发生错误:

命令行:"myjavapath\java.exe" -Xmx1024m -Djava.ext.dirs=.\platform-tools\lib -jar .\platform-tools\lib\dx.jar --dex --output "path\classes.dex" "path\classes" "path\libs"

返回错误:无法写入输出:No expanded opcode for 0004368d R.java:11@0001: invoke-direct v0:NffffLmynamespace/R$attr;, java.lang.Object.<init>:()v

此外,R.java 中的 R$attr 不包含任何内容:

public static final class attr {
}

我假设有 64k 的硬限制。但:

  • R.java 文件只包含 364 行,如果这些行是字段/方法引用,我离 64k 硬限制很远。
  • 当我在 Windev Mobile 项目中添加特定窗口时发生此错误。我在另一个项目中使用的窗口没有错误。

那么,你认为它来自哪里?如果您需要任何信息或文件,没问题。

提前致谢。

PS:可能我的英文不太好,抱歉。

4

1 回答 1

0

dex 文件格式有各种限制。看起来您遇到的方法引用不能超过 64k。此限制适用于 dex 文件中的所有类,而不仅仅是单个类。

该类发生错误的事实与该类本身无关,这只是它碰巧达到极限的地方。

目前唯一的解决方案是减少代码的大小,或者将一些类拆分成一个单独的 dex 文件,您可以动态加载。

于 2012-05-24T17:43:47.730 回答