一、首先介绍几条命令:

将Hello.java文件编译成Hello.class文件
F:\adt-bundle-windows-x86_64\sdk\build-tools\android-4.4.2>javac -source 1.6 -target 1.6 Hello.java

将Hello.class文件反编译java汇编代码
F:\adt-bundle-windows-x86_64\sdk\build-tools\android-4.4.2>javap -c -classpath . Hello

将Hello.class文件编译成Hello.dex文件
F:\adt-bundle-windows-x86_64\sdk\build-tools\android-4.4.2>dx --dex --output Hello.dex Hello.class

将.dex文件反编译成dalvik汇编代码
F:\adt-bundle-windows-x86_64\sdk\build-tools\android-4.4.2>dexdump.exe -d Hello.dex

二、比如下面的java代码,我要看反编译后的android汇编代码,应如下操作:

public class Hello {public int foo(int a, int b) {return (a+b)*(a-b);}public static void main(String[] argc) {Hello h = new Hello();System.out.println(h.foo(5, 3));}
}

1.把dx路径的放进环境变量path中,例如我的路径是 F:\adt-bundle-windows-x86_64\sdk\build-tools\android-4.4.2

2.将java代码编译成java的字节码文件(class文件)

因为的jdk版本太高,所以要使用命令如下:

F:\adt-bundle-windows-x86_64\sdk\build-tools\android-4.4.2>javac -source 1.6 -target 1.6 Hello.java 

2.将Hello.class文件放到dx的路径下

3.通过dx工具将Hello.class文件(java字节码)转换成android的Hello.dex文件(dalvik字节码)

F:\adt-bundle-windows-x86_64\sdk\build-tools\android-4.4.2>dx --dex --output Hello.dex Hello.class

4.通过dexdump.exe将Hello.dex文件反编译成dalvik汇编代码

F:\adt-bundle-windows-x86_64\sdk\build-tools\android-4.4.2>dexdump.exe -d Hello.dex

最终生成的dalvik汇编代码如下:

Processing 'Hello.dex'...
Opened 'Hello.dex', DEX version '035'
Class #0            -Class descriptor  : 'LHello;'Access flags      : 0x0001 (PUBLIC)Superclass        : 'Ljava/lang/Object;'Interfaces        -Static fields     -Instance fields   -Direct methods    -#0              : (in LHello;)name          : '<init>'type          : '()V'access        : 0x10001 (PUBLIC CONSTRUCTOR)code          -registers     : 1ins           : 1outs          : 1insns size    : 4 16-bit code units
00014c:                                        |[00014c] Hello.<init>:()V
00015c: 7010 0400 0000                         |0000: invoke-direct {v0}, Ljava/
lang/Object;.<init>:()V // method@0004
000162: 0e00                                   |0003: return-voidcatches       : (none)positions     :0x0000 line=1locals        :0x0000 - 0x0004 reg=0 this LHello;#1              : (in LHello;)name          : 'main'type          : '([Ljava/lang/String;)V'access        : 0x0009 (PUBLIC STATIC)code          -registers     : 5ins           : 1outs          : 3insns size    : 17 16-bit code units
000164:                                        |[000164] Hello.main:([Ljava/lang
/String;)V
000174: 2200 0100                              |0000: new-instance v0, LHello; /
/ type@0001
000178: 7010 0000 0000                         |0002: invoke-direct {v0}, LHello
;.<init>:()V // method@0000
00017e: 6201 0000                              |0005: sget-object v1, Ljava/lang
/System;.out:Ljava/io/PrintStream; // field@0000
000182: 1252                                   |0007: const/4 v2, #int 5 // #5
000184: 1233                                   |0008: const/4 v3, #int 3 // #3
000186: 6e30 0100 2003                         |0009: invoke-virtual {v0, v2, v3
}, LHello;.foo:(II)I // method@0001
00018c: 0a00                                   |000c: move-result v0
00018e: 6e20 0300 0100                         |000d: invoke-virtual {v1, v0}, L
java/io/PrintStream;.println:(I)V // method@0003
000194: 0e00                                   |0010: return-voidcatches       : (none)positions     :0x0000 line=60x0005 line=70x0010 line=8locals        :Virtual methods   -#0              : (in LHello;)name          : 'foo'type          : '(II)I'access        : 0x0001 (PUBLIC)code          -registers     : 5ins           : 3outs          : 0insns size    : 6 16-bit code units
000198:                                        |[000198] Hello.foo:(II)I
0001a8: 9000 0304                              |0000: add-int v0, v3, v4
0001ac: 9101 0304                              |0002: sub-int v1, v3, v4
0001b0: b210                                   |0004: mul-int/2addr v0, v1
0001b2: 0f00                                   |0005: return v0catches       : (none)positions     :0x0000 line=3locals        :0x0000 - 0x0006 reg=2 this LHello;source_file_idx   : 1 (Hello.java)

转载于:https://www.cnblogs.com/colin1983/p/3787802.html

使用dx命令在cmd环境下执行的正确方法,我用的版本android4.4.2,jdk1.8相关推荐

  1. conda添加清华镜像源在cmd环境下执行下列命令

    为conda添加清华镜像源在cmd环境下执行下列命令 conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda ...

  2. xampp 执行php命令,处理XAMPP环境下执行ZF命令时的报错

    [错误提示]: An Error Has Occurred A project profile was not found. [错误原因]:xampp里的phpunit版本不匹配,重新安装即可 [解决 ...

  3. 安装jdk配置环境、cmd命令行测试环境变量配置是否正确及运行java程序、安装IDEA编写代码测试

    文章目录 1.安装jdk配置环境 2.cmd命令行测试环境变量配置是否正确及运行java程序 3.安装IDEA编写代码测试 1.安装jdk配置环境 首先打开官网Oracle https://www.o ...

  4. linux 环境启动redis,linux环境下启动redis的方法

    linux环境下启动redis的方法 发布时间:2020-08-24 16:15:54 来源:亿速云 阅读:88 作者:小新 这篇文章主要介绍了linux环境下启动redis的方法,具有一定借鉴价值, ...

  5. U盘文件夹变exe的win10环境下纯手工解决方法(无需任何软件)

    U盘文件夹变exe的win10环境下纯手工解决方法(无需任何软件) 把U盘插入装有win10系统的电脑 打开U盘目录(这里假设U盘目录是G:) 选中变成exe的文件,删除(放心,这里的exe是一个几k ...

  6. win10+python3.6+tensorflow-cpu+keras+Pycharm环境下的tensorflow配置方法

    在pytorch成功配置的基础上,也尝试着把tensorflow和keras安装了一下. Win 10 Anaconda3-5.2.0-Windows-x86_64.exe python3.6 ten ...

  7. python3.6+pytorch-cpu+Pycharm环境下的PyTorch配置方法

    在踩了很多坑,好不容易安装成功后,想着整理总结一下,给后来人一个参考. 安装Anaconda 清华大学开源软件镜像站清华Anaconda安装包下载地址 链接进去选择自己需要的版本就可以下载了哈.这里我 ...

  8. ros构建机器人运动学模型_ROS环境下机器人仿真模型构建方法研究.doc

    ROS环境下机器人仿真模型构建方法研究 ROS环境下机器人仿真模型构建方法研究 摘 要: 在众多的机器人仿真平台中,ROS可以封装机器人硬件.提出在ROS环境下构建机器人的仿真模型方法.设计了机器人仿 ...

  9. Windows环境下执行hadoop命令出现系统找不到指定路径Error

    问题详情 比如在win下的cmd下执行如下命令,会出现 首先打了下java -version,对的呀. C:\Users\lenovo>java -version java version &q ...

最新文章

  1. 5.Spring Security 短信验证码登录
  2. linux命令行之find详解
  3. python3教程-Python3教程
  4. 查看oracle所有实例_Oracle目录结构与系统用户-数据库(3)
  5. 2020年编程现状:Python将成为第一大编程语言,中国开源涨势最猛
  6. python和anaconda区别_Pycharm、Anaconda到底是什么?有什么区别?
  7. python3生成文件对象(五分钟读懂)
  8. JavaScript学习之旅-9(原创)
  9. Windows 编程[6] - 学习窗体生成的过程六: 最终的代码!
  10. 【SLAM学习笔记】8-ORB_SLAM3关键源码分析⑥ Optimizer(三)全局优化
  11. 基于Thinkphp开发的网页点餐收银系统SAAS模式
  12. 网络安全工程师面试题合集(不全,暂不整理了)
  13. 安捷伦温度测试仪 软件,安捷伦34970A数据采集器温度测试仪是德科技34970A+34901A模块...
  14. git如何选择性合并_git - 如何挑选一系列提交并合并到另一个分支?
  15. 线程池java submit,详解线程池execute和submit用法
  16. python中模块和包是什么_python的模块和包的详细说明
  17. php mobi_PHP核心技术与最佳实践 mobi epub
  18. 谷歌手机正式发布 售价179美元(图)
  19. 7-2 程序改错题4 (5 分)
  20. Linux串口输出启动信息,linux开发板启动过程串口打印信息

热门文章

  1. 在EditPlus里直接运行PHP
  2. priority_queue 用法总结
  3. 【掩耳盗铃】[转载]北京铁路局:“北京站37号窗口售票员内部大量出票”是为分区售票...
  4. 蓝桥杯 ALGO-60 算法训练 矩阵乘方
  5. PAT 1066. 图像过滤(15)-乙级
  6. ps文字换行_零基础一周内熟悉使用PS基础工具【Photoshop教程二】
  7. python 3d重建_三维人脸重建(一)——Python读取obj文件
  8. java 获取mongodb的连接数
  9. 《Play for Java》学习笔记(七)数据类型解析——Body parser
  10. 大家有用 hackerrank 刷过题吗,这家公司出了一个题来让大家测测自己有多牛