概述

为什么要了解 Dex 文件

了解了 Dex 文件以后,对日常开发中遇到一些问题能有更深的理解。如:APK 的瘦身、热修复、插件化、应用加固、Android 逆向工程、64 K 《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》开源 方法数限制。

什么是 Dex 文件

在明白什么是 Dex 文件之前,要先了解一下 JVM,Dalvik 和 ART。JVM 是 JAVA 虚拟机,用来运行 JAVA 字节码程序。Dalvik 是 Google 设计的用于 Android平台的运行时环境,适合移动环境下内存和处理器速度有限的系统。ART 即 Android Runtime,是 Google 为了替换 Dalvik 设计的新 Android 运行时环境,在Android 4.4推出。ART 比 Dalvik 的性能更 Android开源项目《ali1024.coding.net/public/P7/Android/git》 好。Android 程序一般使用 Java 语言开发,但是 Dalvik 虚拟机并不支持直接执行 JAVA 字节码,所以会对编译生成的 .class 文件进行翻译、重构、解释、压缩等处理,这个处理过程是由 dx 进行处理,处理完成后生成的产物会以 .dex 结尾,称为 Dex 文件。Dex 文件格式是专为 Dalvik 设计的一种压缩格式。所以可以简单的理解为:Dex 文件是很多 .class 文件处理后的产物,最终可以在 Android 运行时环境执行。

Dex 文件是怎么生成的

java 代码转化为 dex 文件的流程如图所示,当然真的处理流程不会这么简单,这里只是一个形象的显示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lLWLUjTY-1650450411612)(https://user-gold-cdn.xitu.io/2018/11/19/16729fad9dc6dcb3?imageView2/0/w/1280/h/960/ignore-error/1)]

注:图片来源于网络

现在来通过一个简单的例子实现 java 代码到 dex 文件的转化。

从 .java 到 .class

先来创建一个 Hello.java 文件,为了便于分析,这里写一些简单的代码。代码如下:

public class Hello {
private String helloString = “hello! youzan”;

public static void main(String[] args) {
Hello hello = new Hello();
hello.fun(hello.helloString);
}

public void fun(String a) {
System.out.println(a);
}
}

在该文件的同级目录下面使用 JDK 的 javac 编译这个 java 文件。

javac Hello

javac 命令执行后会在当前目录生成 Hello.class 文件,Hello.class 文件已经可以直接在 JVM 虚拟机上直接执行。这里使用使用命令执行该文件。

java Hello

执行后应该会在控制台打印出“hello! youzan”

这里也可以对 Hello.class 文件执行 javap 命令,进行反汇编。

javap -c Hello

执行结果如下:

public class Hello {
public Hello();
Code:
0: aload_0
1: invokespecial #1 // Method java/lang/Object.“”

浅谈 Android Dex 文件相关推荐

  1. 浅谈Android保护技术__代码混淆

    浅谈Android保护技术__代码混淆 浅谈Android保护技术__代码混淆 代码混淆 代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读 ...

  2. 浅谈Android系统进程间通信(IPC)机制Binder中的Server和Client获得Service Manager接口之路

    原文地址: http://blog.csdn.net/luoshengyang/article/details/6627260 在前面一篇文章浅谈Service Manager成为Android进程间 ...

  3. android分屏模式_浅谈 Android 7.0 多窗口分屏模式的实现

    从 Android 7.0 开始,Google 推出了一个名为"多窗口模式"的新功能,也就是我们常说的"分屏模式".那么,这个功能有什么用呢?作为开发者,我们又 ...

  4. 浅谈Android onTouchEvent 与 onInterceptTouchEvent的区别详解

    浅谈Android onTouchEvent 与 onInterceptTouchEvent的区别详解 本篇文章小编为大家介绍,Android onTouchEvent 与 onInterceptTo ...

  5. android 存储空间监控,浅谈 Android 内存监控(中)

    前言 在上篇 浅谈 Android 内存监控(上) 中,我们聊了 LeakCanary,微信的 Matirx 和美团的 Probe,它们各自有不同的应用场景,例如,在开发测试环境,我们会偏向用 Lea ...

  6. android获取存储设备根目录,浅谈android获取存储目录(路径)的几种方式和注意事项...

    通常, 我们创建文件/目录, 或者存储图片什么的, 我们都需要拿到手机的存储路径, 现在我们就来看一下获取手机存储路径的几种方式(作为工具类方法调用即可): 第一种: 获取 /storage/emul ...

  7. 浅谈Android Architecture Components

    浅谈Android Architecture Components 浅谈Android Architecture Components 简介 Android Architecture Componen ...

  8. 浅谈Android文件管理器的几种实现方式(原理篇)--对我有帮助

    转自 https://blog.csdn.net/weixin_33698823/article/details/87269955 浅谈Android文件管理器的几种实现方式 为了完成毕业设计,我花费 ...

  9. 浅谈Android游戏开发基础和经验

    Android游戏开发基础和经验是本文要介绍的内容,主要是来了解并学习Android游戏开发的内容实例,具体关于Android游戏开发内容的详解来看本文. 做一个类似俄罗斯方块的android游戏开发 ...

  10. 浅谈Android中的MVP与动态代理的结合

    浅谈Android中的MVP与动态代理的结合 本篇文章已授权微信公众号 guolin_blog (郭霖)独家发布 在Android开发平台上接触MVP足足算起来大概已经有一个年头左右.从最开始到现在经 ...

最新文章

  1. nginx反向代理cas-server之2:生成证书,centOS下使用openssl生成CA证书(根证书、server证书、client证书)...
  2. 安装smac的注意事项
  3. pdm生成mysql sql语句_如何用Powerdesigner的PDM生成数据库
  4. AT3860-[AGC020F]Arcs on a Circle【dp】
  5. Study on Android【五】--自定义ContentProvider的语义
  6. 连接路由器后电脑连不上网_猫、路由器、交换机的区别
  7. HiveSQL技术原理、优化[深度解析]
  8. 【Sublime】Mac下Sublime代码自动换行
  9. Unity中脚本的生命周期
  10. Java完全参考手册笔记1
  11. 学生信息管理系统详细设计文档
  12. IT是什么意思?什么是IT行业?
  13. 联通4g 小米不显示无服务器,小米旗舰机断流严重,信号满格消息却发不出去?...
  14. 【代码记录】pytorch推理及与onnx推理精度对比
  15. 帆软报表配置入门(一丶普通报表和决策报表 )
  16. wagon-maven-plugin插件实现自动化构建部署到服务器
  17. 管理心智能量,在恐惧之下训练心流
  18. 2018百度之星程序设计大赛 - 资格赛 A B C E F
  19. img加载图片失败后处理
  20. [bzoj1502]月下柠檬树

热门文章

  1. android打开超链接屏幕太小,手机屏幕太小,教你2种方法投屏到电脑上,小白也能轻松搞定!...
  2. 手心输入法皮肤制作技巧
  3. QT实现的人机对战五子棋
  4. python海龟交易源码_海龟交易系统的Python完全版 | RiceQuant米筐量化社区 交易策略论坛...
  5. 驱动精灵的护眼大师屏保非常不错
  6. Nifi介绍、安装、实践案例
  7. 阿铭Linux_网站维护学习笔记201903026
  8. SAP 客户端不能访问解决方案
  9. RHEL 7 防火墙
  10. sangerbox使用教程_SangerBox:一款好用的生物信息分析可视化工具