• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android DEX 基础,androiddex基础

Android DEX 基础,androiddex基础

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android dex,android dex分包方案,android dex分包,android dex文件,android dex加密等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android DEX 基础,androiddex基础


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修复了这个问题,但是我们仍然需要对老系统做兼容。





分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android DEX 基础,androiddex基础
  • Android动态加载Dex机制解析
  • Android热补丁技术—dexposed原理简析(手机淘宝采用方案)
  • Android逆向之旅---解析编译之后的Dex文件格式

相关文章

  • 2017-05-26Android启动篇 — init原理(二),androidinit
  • 2017-05-26redis使用内存调整及优化
  • 2017-05-26安卓组件------列表选择框,安卓组件------列表
  • 2017-10-21在Mac系统中 下载、安装AndroidStudio
  • 2017-05-26viewPager+fragment如何刷新缓存fragment,viewpagerfragment
  • 2017-05-26Android实战简易教程-第七十一枪(异步网络下载网络图片及图片廊制作)
  • 2017-05-26Android 手机卫士--绑定sim卡序列号,androidsim
  • 2017-05-222.5.6 ViewFlipper(翻转视图)的基本使用
  • 2017-05-26Android入门(1)--下载安装Android Studio,androidstudio
  • 2017-05-26Android开发笔记(5)——方法调用(基础),android笔记

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • andriod Spinner,andriodspinner
    • Android开发9:网络访问&Web服务开发,android开发9访问
    • 如何为APK签名?,APK签名?
    • Android的Message Pool是什么——源码角度分析,androidpool
    • 自动匹配关键字并且标红,匹配关键字标红
    • Handler造成的内存泄漏(一),handler泄漏
    • Android开发学习——搭建开发环境,android搭建
    • org.gradle.api.internal.tasks.DefaultTaskInputs$TaskInputUnionFileCollection cannot be cast to org.gradle.api.internal.file.collections.DefaultConfigurableFileCollection,gradletaskinputs
    • Android中activity的启动模式,androidactivity
    • Android开发学习之路--Content Provider之初体验

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有