Android DEX 基础
来源:互联网 发布:ip网络广播系统 编辑:程序博客网 时间:2024/06/18 04:44
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修复了这个问题,但是我们仍然需要对老系统做兼容。
- Android DEX 基础
- Android DEX 基础
- Android DEX 基础
- Android插件化基础篇 — dex 文件
- Android插件化基础篇 — dex 文件
- Android [Dex Loader] Unable to execute dex:
- Android dex分包方案 (多dex)
- Android [Dex Loader] Unable to execute dex:
- Android dex分包方案 (多dex)
- Android DEX 文件格式
- Android Dex文件结构
- android编译dex-preopt
- Android Dex文件结构
- Android dex分包方案
- Android dex分包方案
- android dex分包
- Android dex分包方案
- Android dex分包技术
- JVM调优总结(九)-新一代的垃圾回收算法
- Ubuntu环境下Hadoop集群/分布式环境配置
- 二叉树中和为某一值的路径
- 想知道你的代码符合规范吗,测测便知
- Cknife的PHP功能部分修正,解决SHELL无法回显以及中文乱码
- Android DEX 基础
- 截取文件内容
- Gradle for Android(二)
- Caffe安装过程记录
- No resource found that matches the given name 'Theme.AppCompat.Light
- jvm、jdk、jre入门
- TCP与DUP知识点整理
- java IO笔记(FileterInputStream/FilterOutputStream)
- MySQL20个经典面试题(关于引擎 日志 备份 比较深入)