【Android 安全】DEX 加密 ( 不同 Android 版本的 DEX 加载 | Android 8.0 版本 DEX 加载分析 | Android 5.0 版本 DEX 加载分析 )
一、不同版本的 DEX 加载
不同 Android 版本 DexPathList 中的 Element[] dexElements 成员如何创建 ;
1、Android 8.0 版本 DEX 加载分析
Android 8.0 8.0 8.0 版本 DEX 加载分析 :
在 DexPathList 中 , Element[] dexElements 成员创建是调用 makePathElements 方法 生成上述 DEX 数组 ; makeDexElements 方法有 4 4 4 个参数 ;
8.0 8.0 8.0 系统 Element[] dexElements 生成 代码示例如下 : ( 只展示相关源码 )
/*package*/ final class DexPathList {
/**
* dex/resource (class path) 元素集合.
* 应该调用 pathElements , 但是 Facebook 应用通过反射修改 dexElements .
*/
private final Element[] dexElements;
public DexPathList(ClassLoader definingContext, String dexPath,
String libraryPath, File optimizedDirectory) {
// save dexPath for BaseDexClassLoader
this.dexElements = makeDexElements(splitDexPath(dexPath), optimizedDirectory,
suppressedExceptions, definingContext);
}
}
参考源码地址 : 8.0.0_r4/xref/libcore/dalvik/src/main/java/dalvik/system/DexPathList.java
2、Android 6.0 版本 DEX 加载分析
Android 6.0 6.0 6.0 版本 DEX 加载分析 :
在 DexPathList 中 , Element[] dexElements 成员创建是调用 makePathElements 方法 生成上述 DEX 数组 ;
6.0 6.0 6.0 系统 Element[] dexElements 生成 代码示例如下 : ( 只展示相关源码 )
/*package*/ final class DexPathList {
/**
* dex/resource (class path) 元素集合.
* 应该调用 pathElements , 但是 Facebook 应用通过反射修改 dexElements .
*/
private final Element[] dexElements;
public DexPathList(ClassLoader definingContext, String dexPath,
String libraryPath, File optimizedDirectory) {
// save dexPath for BaseDexClassLoader
this.dexElements = makePathElements(splitDexPath(dexPath), optimizedDirectory,
suppressedExceptions);
}
}
参考源码地址 : 6.0.1_r16/xref/libcore/dalvik/src/main/java/dalvik/system/DexPathList.java
3、Android 5.0 版本 DEX 加载分析
Android 5.0 5.0 5.0 版本 DEX 加载分析 :
在 DexPathList 中 , Element[] dexElements 成员创建是调用 makeDexElements 方法 生成上述 DEX 数组 ; makeDexElements 方法有 3 3 3 个参数 ;
5.0 5.0 5.0 系统 Element[] dexElements 生成 代码示例如下 : ( 只展示相关源码 )
/*package*/ final class DexPathList {
/**
* dex/resource (class path) 元素集合.
* 应该调用 pathElements , 但是 Facebook 应用通过反射修改 dexElements .
*/
private final Element[] dexElements;
public DexPathList(ClassLoader definingContext, String dexPath,
String libraryPath, File optimizedDirectory) {
this.dexElements = makeDexElements(splitDexPath(dexPath), optimizedDirectory,
suppressedExceptions);
}
}
参考源代码 : 5.1.0_r3/xref/libcore/dalvik/src/main/java/dalvik/system/DexPathList.java
分析上面 3 3 3 个版本的 DEX 加载源码 , 发现每个版本加载方法不同 , 这样在开发多 DEX 加载时 , 就需要做相应的兼容 ;
相关文章
- Android中的音频播放(MediaPlayer和SoundPool)
- Android安全开发之安全使用HTTPS
- Android安全开发之浅谈网页打开APP
- Android 自定义ViewPager(仿蘑菇街欢迎页)
- Android 10.0 系统设置蓝牙配对时去掉配对框实现直接配对功能
- Android 代码中的常见的问题总结
- 【Android 安全】深思数盾 Virbox 加固应用 ( 购买加固服务 | 下载加固软件 | 启动加固软件 | 函数 VMP 壳设置 | 加密选项 | 资源加密 | SO 保护 )
- 【Android 安全】DEX 加密 ( Application 替换 | 创建用户自定义 Application | 替换 ContextImpl 对象的 mOuterContext 成员 )
- 【Android 安全】DEX 加密 ( Application 替换 | 判定自定义 Application 存在 | 获取 ContextImpl 对象 )
- 【Android 安全】DEX 加密 ( Application 替换 | Android 应用启动原理 | ActivityThread 后续分析 | Application 替换位置 )
- 【Android 安全】DEX 加密 ( Application 替换 | Android 应用启动原理 | ActivityThread 源码分析 )
- 【Android 安全】DEX 加密 ( Application 替换 | Android 应用启动原理 )
- 【Android 安全】DEX 加密 ( Java 工具开发 | apk 文件对齐 )
- 【Android 安全】DEX 加密 ( 代理 Application 开发 | 加载 dex 文件 | 使用反射获取方法创建本应用的 dexElements | 各版本创建 dex 数组源码对比 )
- 【Android 安全】DEX 加密 ( 支持多 DEX 的 Android 工程结构 )
- 【Android 安全】DEX 加密 ( Proguard 混淆 | 混淆后的报错信息 | Proguard 混淆映射文件 mapping.txt )
- 【Android 安全】DEX 加密 ( Proguard 简介 | 默认 ProGuard 分析 )
- 【Android 安全】DEX 加密 ( Proguard 简介 | Proguard 相关网址 | Proguard 混淆配置 )
- Android培训班(75)Dalvik虚拟机的GetStaticMethodID函数
- 2019年Android恶意软件专题报告:未来移动安全呈现四大趋势——资费消耗与隐私窃取分别以高达46.8%和41.9%的占比,成为横行无忌的主要恶意软件类型,其次分别为远程控制、流氓行为、恶意扣费和欺诈软件。
- Android SD卡升级报错解决