首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

android加载dex方法,android Dex文件的加载

上篇文章讲到了apk的分包,通过multidex构建出包含多个dex文件的apk,从而解决65536的方法数限制问题Android Dex分包》。...在dalvik虚拟机上,应用启动时只会加载主dex文件,而从dex需要我们手动去加载,那么问题来了,如何手动加载一个dex文件?...、jar、apk文件的路径,多个路径之间用:分隔 optimizedDirectory: dex文件首次加载时会进行dexopt操作,optimizedDirectory即为优化后的odex文件的存放目录...[elements.size()]); } files为dex文件的file对象list,判断是dex文件之后调用loadDexFile方法加载dex文件,返回DexFile对象。...openDexFileNative代码中主要是对dex文件进行了优化操作,并将优将优化后得dex文件(odex文件)通过mmap映射到内存中。

1.6K20

android .dex文件探究

在我们写Java代码的时候,生成的文件是.java文件,但是JVM并不识别这个,所以会先转成class文件,而在Android端,Android上的Davlik虚拟机能运行.dex。...所以dex文件中包含了所有的app代码,可利用反编译工具获取java代码。 即dex文件就是Android Dalvik虚拟机运行的程序。 为了能够加深印象,我们先构造一个dex文件。...它代表dex文件中的文件标识,一般被称为魔数。...目前,dex的魔数固定为dex.035 然后第二个,checksum,它是dex文件的校验和,通过它可以判断dex文件是否被损坏或者被篡改。...() 接下来是classDefsSize和classDefsOff,这两个字段指明的是dex文件中类的定义的相关信息,在这里,classDefsSize的值是1,classDefsOff

50540
您找到你想要的搜索结果了吗?
是的
没有找到

浅谈 Android Dex 文件

概述 为什么要了解 Dex 文件 了解了 Dex 文件以后,对日常开发中遇到一些问题能有更深的理解。如:APK 的瘦身、热修复、插件化、应用加固、Android 逆向工程、64K 方法数限制。...这个 .dex 文件就可以直接在 Android 运行时环境执行,一般可以通过 PathClassLoader 去加载 dex 文件。...下面将分别对文件头、索引区、类定义区域进行简单的介绍。其它区域可以去 Android 官网了解。 文件文件头区域决定了该怎样来读取这个文件。...类定义区 这个区域存储的是类定义的列表,具体的数据结构如下: ? 解析 dex 文件的工具 这里推荐一个可以解析 dex 文件的工具 010 Editor。...让大家在以后遇到相关问题的时候,可以有一些方向去了解dex文件,然后解决问题。最后,如果大家有任何的建议或意见,欢迎反馈。

60220

Android 安全】DEX 加密 ( DEX 加密原理 | DEX 加密简介 | APK 文件分析 | DEX 分割 )

文章目录 一、DEX 加密简介 二、APK 文件分析 三、DEX 分割 一、DEX 加密简介 ---- Proguard 混淆弊端 : 之前使用 Proguard 混淆 后的代码 , 虽然降低了代码的可读性...DEX 文件 , 就是被破坏了原有格式的 DEX 文件 , 该 DEX 文件不是标准的 DEX 文件 ; Android 启动从 Application 开始 , 然后会查找主 Activity 界面...启动 ; DEX 加密的情况下 Android 的工程结构 : 应用主工程 , 该工程中有一个开发者开发的 Application , MyApplication ; 依赖的库 Library...- Android 安装文件 APK 分析 : APK 文件本质是一个 ZIP 包 , 包含如下内容 ; AndroidManifest.xml : 应用/组件配置文件 ; resource.arsc..., 这样就使得加密的类变少了 ; 上述问题解决方案 : 编写一个额外的代理 Application , 该 Application 专门用于解密 DEX , 将该代理 Application 制作成主

1.1K00

Android 热修复】热修复原理 ( 修复包 Dex 文件准备 | Dex 优化为 Odex | Dex 文件拷贝 | 源码资源 )

文章目录 一、修复包 Dex 文件准备 二、Odex 优化 三、Dex 文件拷贝 四、 源码资源 一、修复包 Dex 文件准备 ---- 异常代码 : 故意写一个异常代码 , 并执行该代码 , 肯定会崩溃..." 文件 ; ( 可以参考 【Android 安全】DEX 加密 ( Java 工具开发 | 生成 dex 文件 | Java 命令行执行 ) 博客内容) 将编译好的 update.dex 放置到...SD 卡根目录中 , 下一步开始使用该 dex 文件进行热修复 ; 二、Odex 优化 ---- 修复包就是一个 Dex 文件 , 热修复框架虽然给生成了一个 .patch 文件 , 其本质还是将 Dex...文件封装到了 .patch 文件中 ; Android 应用第一次安装比较慢 , 这是由于在 Android 5.0 之后的系统版本中 , 添加了 ART 虚拟机 , 5.0 之前的系统版本安装速度很快...压缩文件中加载 Class 字节码文件 , APK 文件安装在 Android 手机中时 , 将 APK 中的压缩文件拷贝到 /data/user/包名/app_odex 目录下 ; 首先获取 /data

68110

Android逆向笔记 —— DEX 文件格式解析

Android 系统并不直接使用 Class 文件,而是将所有的 Class 文件聚合打包成 DEX 文件DEX 文件相比单个单个的 Class 文件更加紧凑,可以直接在 Android Runtime...后面会继续对 Apk 文件中的其他文件结构进行分析,例如 so 文件,resources.arsc 文件等。 DEX 文件的生成 在解析 DEX 文件结构之前,先来看看如何生成 DEX 文件。...第一个是看雪神图,出自非虫, 第二个是 Android 源码中对 DEX 文件格式的定义,dalvik/libdex/DexFile.h,其中详细定义DEX 文件中的各个部分。...header DEX 文件头部分的具体格式可以参考 DexFile.h 中的定义: struct DexHeader { u1 magic[8]; // 魔数 u4...endianTag 用于标记 DEX 文件是大端表示还是小端表示。由于 DEX 文件是运行在 Android 系统中的,所以一般都是小端表示,这个值也是恒定值 0x12345678。

1.3K20

Androiddex文件的加载与优化流程

由于Android程序的apk文件为zip压缩包格式,Dalvik虚拟机每次加载它们时需要从apk中读取classes.dex文件,这样会耗费很多cpu时间,而采用odex方式优化的dex文件,已经包含了加载...Dalvik虚拟机将dex文件映射到内存中后是Dalvik格式,在Android系统源码的dalvik/libdex/DexFile.h文件中它的定义如下。...然而,DexFile结构描述的是加载进内存的数据结构,还有一些数据是不会加载进内存的,经过分析,odex文件结构定义整理如下....文件的验证与优化 3.1 dex文件加载流程 Android提供了一个专门验证与优化dex文件的工具dexopt。...crc校验值,如果这一步没有问题,接着调用dexZipExtractEntryTo-File()函数释放classes.dex为缓存文件,然后开始解析传递过来的验证与优化选项,验证选项使用“v=”指出,

2.5K10

Android 安全】DEX 加密 ( Java 工具开发 | 生成 dex 文件 | Java 命令行执行 )

文章目录 一、生成 dex 文件 二、生成 dex 文件代码示例 三、生成 dex 结果 一、生成 dex 文件 ---- 上一篇博客解压了 代理 Application 依赖库 multiple-dex-core-debug.aar..., 并获取了其中的 classes.jar 文件 ; 现在开始使用 dx 命令 , 将其转为 dex 文件 ; dx 具体用法参考 【Android 安全】DEX 加密 ( DEX 加密使用到的相关工具..._Android_Learn\DexEncryption\multiple-dex-tools\aarUnzip\classes.jar 二、生成 dex 文件代码示例 ---- 创建 classes.jar...( dex 转换前的文件 ) , classes.dex ( dex转换后的文件 ) 文件对象 , 使用这两个文件对象获取完整路径 ; // 拿到 multiple-dex-core-debug.aar...生成 dex 文件 , 该 dex 文件中只包含解密 其它 dex 的功能 编译工程 会生成 Android 依赖库的 aar 文件 生成目录是 module

85900

Android 安全】DEX 加密 ( 代理 Application 开发 | 加载 dex 文件 | 反射获取系统的 Element[] dexElements )

文章目录 一、dex 文件准备 二、加载 dex 文件流程 三、Element[] dexElements 分析 四、反射获取系统的 Element[] dexElements 参考博客 : 【Android...| retrace.bat 命令执行目录 | 暴露更少信息 ) 【Android 安全】DEX 加密 ( DEX 加密原理 | DEX 加密简介 | APK 文件分析 | DEX 分割 ) 【Android...】DEX 加密 ( 不同 Android 版本的 DEX 加载 | Android 8.0 版本 DEX 加载分析 | Android 5.0 版本 DEX 加载分析 ) 【Android 安全】DEX...【Android 安全】DEX 加密 ( 代理 Application 开发 | 解压 apk 文件 | 判定是否是第一次启动 | 递归删除文件操作 | 解压 Zip 文件操作 ) 在 【Android...Module” , multiple-dex-core 是 Android 依赖库 , 其作用是解密并加载多 DEX 文件 , 其 Module 类型是 “Android Library” , multiple-dex-tools

34200

Android dex文件64k限制解决办法

为了解决 64K 方法数限制的问题,我们可以在项目中使用 multidex 配置,当项目中的方法数(包括:Android framework,library 和我们自己写的代码)超过 64K 时,编译系统会自动编译出多个...DEX字节码文件,这也是以前为什么安卓手机用户总是诟病Android系统比iOS系统运行卡顿的原因),限制每个APK文件只能包含一个 DEX 文件(即 classes.dex)。...为了绕开这个限制,Google给我们提供了multidex support library 兼容包,帮助我们实现应用程序加载多个DEX文件,并且这个兼容包作为程序的主DEX文件,管理者其他DEX文件的访问...因此可以理解为,使用ART虚拟机下的安卓系统自动支持APK文件多个DEX的加载。...使用 Android Studio APK Analyzer ,我们至少能够做到: 查看APK压缩文件中各个子文件的大小(如DEX和resource文件) 理解DEX文件的结构 快速查看APK文件的版本信息

1.1K20

Class 和 Dex 文件深入理解 | JAVA_Android

例如:我们并没有在类中定义 this、super 这样的关键字,但是我们可以使用,这是因为 java 虚拟机在生成 class 文件时已经帮我们记录在里面了。...无符号数可以用阿里描述数字,索引引用,数量值或者 utf-8构成的字符串值,而表是由多个无符号数或其他表构成的复合数据结构,所有的表都以 _info 结尾,表用于描述有层次关系的复合结构数据类型,其实整个...我们看一下这个表格,class 文件定义了很多字段,这些字段又包含了非常多的内容。...每次加载类的时候都要去寻找和加载 dex文件结构深入解析 什么是 dex 文件 ​ 能够被 DVM 所识别,加载并执行的文件格式,dex 文件可以 用 c 和c++ 进行生成 如何生成一个 dex 文件...checksum : dex 文件的校验和,通过它可以判断 dex 文件是否被损坏 signature[] : 用于校验 dex 文件,其实就是把整个 dex 文件用 SHA-1 签名得到的一个值

54020

Android 安全】DEX 加密 ( Java 工具开发 | apk 文件对齐 )

文章目录 一、apk 对齐操作 二、apk 对齐命令 三、apk 对齐操作代码示例 四、apk 对齐执行结果 一、apk 对齐操作 ---- 参考 【Android 安全】DEX 加密 ( DEX 加密使用到的相关工具...; -f : 如果输出文件已经存在 , 覆盖该文件 ; -v : 输出相关信息 -z : 使用 Zopfli 重新压缩文件 ; 一般使用 -f 参数配置 ; 注意上述参数的使用顺序 , 必须按照 [-.../zipalign 是 zipalign.exe 工具的完整绝对路径 ; -f 参数代表 , 如果存在输出文件 , 则覆盖该文件 ; 4 表示 32 位对齐 ; D:\002_Project\002_Android_Learn..._Android_Learn\DexEncryption\app\build\outputs\apk\debug\app-unsigned-aligned.apk 表示对齐后的输出文件的 绝对路径 ;...\002_Android_Learn\DexEncryption\app\build\outputs\apk\debug\app-unsigned.apk D:\002_Project\002_Android_Learn

2.8K00

Android 安全】DEX 加密 ( Java 工具开发 | 解压 apk 文件 | 加密生成 dex 文件 | 打包未签名 apk 文件 | 文件解压缩相关代码 )

-- 将代理 Application 所在的 Android 依赖库的 dex 文件拷贝到 app/build/outputs/apk/debug/unZipFile 目录中 , 将上述目录打包文件重命名为...生成 dex 文件 , 该 dex 文件中只包含解密 其它 dex 的功能 编译工程 会生成 Android 依赖库的 aar 文件 生成目录是 module.../001_Android/002_Sdk/Sdk/build-tools/30.0.2/dx.bat --dex --output ${classesDexFile.absolutePath} ${classesJarFile.absolutePath..., 小项目只有 1 个, 大项目可能有多个 // 使用文件过滤器获取后缀是 .dex文件 var dexFiles : Array = apkUnZipFile.listFiles..., 紫色矩形框 中的 secret-classes.dex 文件是加密后的 dex 文件 , 蓝色矩形框 中是生成的 未签名的 apk 文件 ;

1.2K00

Android 使用android-support-multidex解决Dex超出方法数的限制问题

那么让我们看一下为什么会引起这种错误:         在Android系统中,一个App的所有代码都在一个Dex文件里面。Dex是一个类似Jar的存储了多有Java编译字节码的归档文件。...(2) 分割Dex,多工程: 把所需要的.class文件或者是Jar文件和一些源码一起编译生成一个Jar文件。然后使用Android SDK提供的dx工具把Jar文件转成Dex文件。...--multi-dex配置(build.gradle)进行解决,生成的Apk中将包含多个dex文件,比如classes.dex, classes2.dex....Multidex仍有一些限制: DEX文件安装到设备的过程非常复杂,如果第二个DEX文件太大,可能导致应用无响应。此时应该使用ProGuard减小DEX文件的大小。...因此选择合适的类库对Android开发者来说尤为重要。 开发者应该避免使用Google Guava这样的类库,它包含了13000多个方法。

1.4K80

Android 逆向】启动 DEX 字节码中的 Activity 组件 ( DEX 文件准备 | 拷贝资源目录下的文件到内置存储区 | 配置清单文件 | 启动 DEX 文件中的组件 | 执行结果 )

文章目录 一、DEX 字节码文件准备 二、拷贝 Assets 目录下的 classes2.dex 字节码文件到内置存储区 三、在 AndroidManifest.xml 清单文件中配置组件 四、启动 DEX...文件中的 Activity 一、DEX 字节码文件准备 ---- 在 dex_demo 应用 Module 中 , 创建 com.example.dex_demo.MainActivity2 类 ;...onCreate"); } } 编译上述 Module 生成 APK 文件 dex_demo-debug.apk , 解压 APK 文件dex_demo-debug 目录中 , 将 dex_demo-debug...目录中的 classes.dex 复制一份 , 重名为 classes2.dex , 这是为了与上一个示例中的文件重名而修改的 ; 二、拷贝 Assets 目录下的 classes2.dex 字节码文件到内置存储区....dex 位置 ; 最终的拷贝结果如下 : 代码示例 : /** * 测试调用 Dex 字节码文件中的方法 * @param context * @param

68010

Android 逆向】类加载器 ClassLoader ( 使用 DexClassLoader 动态加载字节码文件 | 拷贝 DEX 文件到内置存储 | 加载并执行 DEX 字节码文件 )

文章目录 一、拷贝 Assets 目录下的 classes.dex 字节码文件到内置存储区 二、加载 DEX 文件并执行其中的方法 三、MainActivity 及执行结果 四、博客资源 一、拷贝 Assets...目录下的 classes.dex 字节码文件到内置存储区 ---- 在 【Android 逆向】类加载器 ClassLoader ( 使用 DexClassLoader 动态加载字节码文件 | 准备...DEX 字节码文件 ) 博客中 , 准备了 classes.dex 字节码文件 , 将字节码文件拷贝到了 将 app\src\main\assets\classes.dex 目录中 ; 解析字节码文件时...DEX 字节码文件路径 : 必须制定准确的 DEX 字节码文件目录 ; /data/user/0/com.example.classloader_demo/files/classes.dex 优化目录...; import android.os.Bundle; import android.util.Log; import java.io.File; import java.io.FileOutputStream

56130

Android 安全】DEX 加密 ( 代理 Application 开发 | 加载 dex 文件 | 使用反射获取方法创建本应用的 dexElements | 各版本创建 dex 数组源码对比 )

文章目录 一、不同 Android 系统创建 dex 数组源码对比 二、不同 Android 系统创建 dex 数组源码对比 三、 Android 5.1 及以下系统反射方法并创建 Element[]...dexElements 四、 Android 6.0 及以下系统反射方法并创建 Element[] dexElements 五、 完整代码示例 一、不同 Android 系统创建 dex 数组源码对比...suppressedExceptions); } /** * 创建一个数组 , 每个数组元素都是 dex...系统创建 dex 数组源码对比 ---- \rm Android \ 5.0 、 5.1 系统需要反射如下 makeDexElements 方法 ; private static Element...在本应用中创建 Element[] dexElements 数组 , 用于存放解密后的 dex 文件 不同的 Android 版本中 , 创建 Element[] dexElements

2.1K00

Android多个Fragment切换问题切换动画设置

问题描述 在项目开发中,遇到这样一个问题场景:在某个页面(Fragament)中,点击按钮,进行页面部分的切换,即在一个Fragament中嵌套使用了两个Fragament进行切换。...这里我遇到了一个小问题,使用add进行添加后,并不能完成切换,但替换成replace之后便可实现切换,具体原因待考究。...首先建立动画文件,在res下创建文件夹anim。 先考虑一个左移动画,主要可拆分成两个步骤:1.当前页面向左划出。2.之后页面向右划入。...default: break; } fragmentTransaction.commit(); } 效果演示: 常规Activity多个...Fragment切换 设计导航栏时经常采用在Activity中进行多个Fragment切换,实际上和在Fragment进行设计大同小异。

5.7K51
领券