Android DEX 基础

简介:   转载请标明出处:http://www.cnblogs.com/zhaoyanjun/p/5736305.html本文出自【赵彦军的博客】 1、什么是dex? 简单说就是优化后的android版.exe。
 

转载请标明出处:http://www.cnblogs.com/zhaoyanjun/p/5736305.html
本文出自【赵彦军的博客】

1、什么是dex?

简单说就是优化后的android版.exe。每个apk安装包里都有。
相对于PC上的java虚拟机能运行.class;android上的Davlik虚拟机能运行.dex。
为何要研究dex格式?因为dex里面包含了所有app代码,利用反编译工具可以获取java源码。理解并修改dex文件,就能更好的apk破解和防破解。

 

2、dex好处

dex文件有个天大的好处:它可以直接用DexClassLoader类加载,这叫动态加载。于是我们只要在dex上加壳,在程序运行时脱壳,就可以规避静态反编译的风险。

 

3、一般的反编译流程是什么样子的。

    1、下载apk文件,然后解压 ,得到 class.dex 文件

    2、用dex2jar 把 class.dex 还原成 classes-dex2jar.jar 文件

    3、用 jd-gui.exe 把 classes-dex2jar.jar 文件打开,就可以看到源码了。

 

4、Android 为什么会出现 65536限制问题?

  在Android系统中,一个App的所有代码都在一个Dex文件里面。Dex是一个类似Jar的包,存储了很多Java编译字节码的归档文件。因为Android系统使用Dalvik虚拟机,所以需要把使用Java Compiler编译之后的class文件转换成Dalvik能够执行的class文件。这里需要强调的是,Dex和Jar一样是一个归档文件,里面仍然是Java代码对应的字节码文件。当Android系统启动一个应用的时候,有一步是对Dex进行优化,这个过程有一个专门的工具来处理,叫DexOpt。DexOpt的执行过程是在第一次加载Dex文件的时候执行的。这个过程会生成一个ODEX文件,即Optimised Dex。执行ODex的效率会比直接执行Dex文件的效率要高很多。但是在早期的Android系统中,DexOpt有一个问题,也就是这篇文章想要说明并解决的问题。DexOpt会把每一个类的方法id检索起来,存在一个链表结构里面。但是这个链表的长度是用一个short类型来保存的,导致了方法id的数目不能够超过65536个。当一个项目足够大的时候,显然这个方法数的上限是不够的。尽管在新版本的Android系统中,DexOpt修复了这个问题,但是我们仍然需要对老系统做兼容。





相关文章
|
7月前
|
Java Android开发
|
7月前
|
Java Android开发
Android编译的jar里面是dex
Android编译的jar里面是dex
82 0
|
7月前
|
Android开发
安卓逆向 -- Hook多个dex文件
安卓逆向 -- Hook多个dex文件
69 1
|
Java 开发工具 Android开发
Android dx工具(jar包转成dex格式二进制jar包工具)
Android dx工具(jar包转成dex格式二进制jar包工具)
834 0
|
搜索推荐 Java Linux
Android基础入门教程
Android是一种基于Linux的自由及开放源代码的操作系统,Android 分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和Linux内核层。
257 0
|
Android开发
安卓逆向 -- Hook多个dex文件
安卓逆向 -- Hook多个dex文件
209 0
安卓逆向 -- Hook多个dex文件
|
XML 存储 安全
Android四大组件全面解析,夯实基础。(下)
Android四大组件 lay a solid foundation 夯实基础
206 0
|
Android开发
[RK3568][Android11]Android dex文件生成流程
[RK3568][Android11]Android dex文件生成流程
179 0
[RK3568][Android11]Android dex文件生成流程
|
Java Android开发
移动应用程序设计基础——Android环境构建与Activity生命周期
安装智能手机开发相关软件平台,并在此基础上测试Activity的生命周期过程。 5、 完成智能手机开发平台安装、以及相关配置; 6、 并实现Hello World; 7、 添加Log日志,通过Log日志验证Ac 1、 安装JAVA JDK 2、 安装Android Studio,熟悉AS的基本操作,改变AS的字体,显示方式;截图和文字说明。 3、 建立新项目,实现Hello World。说明各个文件的作用,以及各个关键语句的作用或含义,给出程序的运行结果。 4、 设置生命周期的Log日志,分别执行相关操作
314 0
移动应用程序设计基础——Android环境构建与Activity生命周期
|
存储 安全 IDE
android studio 输出apk过程,apk中的文件格式(bsh文件,dex文件),JVM、DVM、ART的区别,IOS与安卓的区别,ART和Dalvi
android studio 输出apk过程,apk中的文件格式(bsh文件,dex文件),JVM、DVM、ART的区别,IOS与安卓的区别,ART和Dalvi
274 0
android studio 输出apk过程,apk中的文件格式(bsh文件,dex文件),JVM、DVM、ART的区别,IOS与安卓的区别,ART和Dalvi