【问题标题】:Unable to execute .java file through Davik VM无法通过 Davik VM 执行 .java 文件
【发布时间】:2013-02-26 12:39:49
【问题描述】:

我正在关注这个link 我首先成功地执行了这个命令。

javac <path + filename>.java 

然后,当我尝试执行以下命令时,我遇到了错误“class name does not match path”。

dx --dex --output=&lt;path + filename&gt;.dex &lt;path + filename&gt;.class

我的 .class 和 .java 名称相同,但我认为我必须编写 .class 文件名的显式路径。那么现在该怎么办。我正在做一些小错误,但找不到。

【问题讨论】:

  • 再看一次@JesusFreke 的帖子,看看你是否按照他说的去做

标签: java dalvik


【解决方案1】:

dx 对你给它的路径很挑剔——类文件相对于你的工作目录的相对路径必须与类的包相匹配。

例如,如果你的命令是

dx --dex --output=classes.dex out/com/example/HelloWorld.class

然后dx假设HelloWorld的包名应该是out.com.example,如果不是则报错。

但是,有一个技巧 - 你可以在你给 dx 的路径中添加一个/./ 路径组件,以指定相对于 java 包的“根”在哪里。如果上例中的包其实是com.example,那么你可以这样做:

dx --dex --output=classes.dex out/./com/example/HelloWorld.class

另一个选项是使用 --no-strict 选项,它会禁用 dx 的路径检查。

【讨论】:

  • class.dex和helloworld.class不是必须同名吗?
  • 不,没有必要。 dex 文件不绑定到单个类 - 它通常包含许多类。
  • 我已经通过将.class文件制作成.jar来解决它。谢谢大家。
【解决方案2】:

为了避免幻数问题,首先检查你的 jdk 版本,似乎 jdk 1.7* 有问题。我恢复到 jdk 1.6 。

而不是使用dx --dex --output=&lt;path + filename&gt;.dex &lt;path + filename&gt;.class 我们可以做一件事,将您的一个或所有 .classes 文件放在一个文件夹中,例如 classFolder 现在发出以下命令:

dx --dex --output=YourClass.dex  absolutePath/classFolder 

dx 命令将选择该文件夹中的一个或所有类文件。

【讨论】:

  • 我检查了 ma 版本是 1.6.0.27。我创建了一个文件夹并将 .class 文件放入并执行了命令,但我遇到了同样的错误,先生。
  • 问题处理:错误的类文件魔法(cafebabe)或版本(0033.0000)...同时解析绝对路径/helloworld.class 1 警告没有指定类文件。
  • 尝试在 (Android SDK\tools\proguard\bin) 中编辑 proguard.bat 文件,而不是 "c​​all %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %*" 更改它“调用 %java_exe% -jar "%PROGUARD_HOME%"\lib\proguard.jar %1 %2 %3 %4 %5 %6 %7 %8 %9"。
  • 我的 proguard.bat 文件是 -> @ECHO OFF REM ProGuard 的启动脚本——免费的类文件压缩器、优化器、REM 混淆器和 Java 字节码的预验证器。 REMREM 注意:当向这个脚本传递包含空格的文件名时,REM 你必须在它们周围添加转义引号,例如REM "\"C:/My Directory/My File.txt\""IF EXIST "%PROGUARD_HOME%" GOTO homeSET PROGUARD_HOME=..:home java -jar "%PROGUARD_HOME%"\lib\proguard.jar %*跨度>
  • 在最后一行 "java -jar "%PROGUARD_HOME%"\lib\proguard.jar %" .
【解决方案3】:

您的命令似乎是错误的:

dx --dex --output=.dex .class

你试过了吗?

dx --dex --output=YourClass.dex YourClass.class

【讨论】:

  • 它显示为警告。类名不匹配路径(路径+文件名.class)。
  • @YashRajDave 在您的文件所在的同一文件夹中调用 javacdex。你在用什么包,叫什么名字?
  • 包名是com.hello.java。
  • 我按照您的建议在同一个文件夹中调用了 javac 和 dex。执行 dex 命令后,在解析 .class 时显示“bad class file magic (cafebabe) or verison(0033.0000)”.1 警告。没有指定类文件。
  • &lt;path + filename&gt; 那是什么?为什么要继续使用这种表示法,它会让人更加困惑。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-29
  • 1970-01-01
  • 1970-01-01
  • 2016-02-19
  • 2016-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多