将类文件转换为dex文件

9
如何在Android中将class文件转换为dex文件?有什么方法吗?
5个回答

21

使用以下命令和选项“--dex”调用“dx”命令。

dx --dex --output=<output-file> <input-file>

"dx"命令包含在Android SDK中。该命令的位置会有所不同。请尝试搜索:

<SDK-HOME>/platform-tools/
<SDK-HOME>/platforms/<platform>/tools/

“dx --dex” 可以接受一些选项。例如,“--no-strict” 选项将跳过检查输入类文件的路径名称是否与声明的包/类名称匹配,因此如果您使用此选项调用 dx,则会获得与 WebService.class 不同的结果。可能,“--keep-classes” 选项在您想要在 Android 和 Java SE 上使用 jar 文件时很有用。没有 “--keep-classes” 选项,dx 命令会将输入 jar 文件中的所有 .class 文件替换为一个名为 “classes.dex”的文件,但使用 “--keep-classes” 选项,输入的 .class 文件也会放入输出文件以及 classes.dex 中。

ex:
  dx --dex --keep-classes --output=output.jar input.jar

我阅读了dx的源代码,并在以下页面上列出了使用说明和一些解释。

dx --dex的用法:

http://darutk-oboegaki.blogspot.com/2011/03/usage-of-dx-dex-dx-dex.html


2
记录一下:现在位于 <SDK-HOME>/build-tools/<build-tools-version>/。 - ottel142

5
使用 dx 工具。

hmmmm...dx?这是SDK提供的工具之一。 - Valentin Rocher
当将类转换为dex时,我遇到了以下错误: 处理出现问题: 类名(com/WebService)与路径(WebService.class)不匹配 ...在解析WebService.class时 ...在处理WebService.class时 1个警告 - Dhanush
这看起来像是在启动dx时您不在正确的文件夹中。我认为您必须在主类目录中,而不是在子文件夹中(与javac的用法相同)。 - Valentin Rocher

2

dalvik文档区包括一个微不足道的例子

编辑:链接已失效。您可以在此处找到源代码树副本here,以及镜像中格式化版本here


但是一般来说,你的类文件和源文件不太可能在同一个目录下。关键是要像@darutk的答案中所述使用“--no-strict”。 - Scott C Wilson
使用标准的Java构建布局,源文件中的包名应与目录结构匹配,.class文件将与.java文件放在一起。不需要其他选项。根据您的构建系统,这可能是完全自动化的或非常不方便的,因此“dx”提供了一些灵活性以便于使用。 - fadden

1
自动化构建ANT的步骤如下:

 <property name="dx" value="${android_sdk}/build_tools/18.1.0/dx" />
 <target name="convert_jar_to_dex">
    <apply executable="${dx}" failonerror="true" parallel="true">   
            <arg value="-JXms1024m" />  
            <arg value="-JXss1024k" />  
            <arg value="--dex" />   
            <arg value="--verbose" />   
            <arg value="--no-strict" /> 
            <arg value="--num-threads=4" /> 
            <arg value="--output=${basedir}/bin/output.dex" />  
            <fileset file="${basedir}/input.jar"/>  
    </apply>
 </target>

这是我的经验。希望能有所帮助。

-1

为darutk的回答添加更多信息:
dx命令包含在Android SDK中
例如:D:\Android\AndroidSDK\build-tools\23.0.1\
其中23.0.1是Android版本号


这似乎是一条评论而不是答案。 - Robert

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接