Android中的ClassLoader 一、ClassLoader的类型java中的ClassLoader和Android中的ClassLoader并不完全相同,因为java的可执行文件为class文件,而Android的可执行文件为dex文件,他们所加载的文件不同,因而所使用的ClassLoader也不相同。 Android中的ClassLoader分为两种类型,分别如下: 系统类加载器:BootClassLoader、PathCl 2023-11-25 Android #Android源码解析 #ClassLoader
java反射技术学习 一、什么是反射反射是指在程序运行时动态地获取类的信息,包括类名、字段、方法等。Java提供了一系列反射方法来操作(如获取、创建、修改、调用)Class对象、构造函数、方法、字段等。通过反射,我们可以创建对象、调用方法和访问字段,而不需要提前知道类的具体定义。同时反射也是一种实现动态加载的技术之一。 二、基于反射进行动态加载贴一段用于辅助测试的代码: 123456789101112131415161 2023-11-23 Android #Java反射
dex文件加载流程(三) 书接上文dex文件加载流程(二) (gal2xy.github.io)。 一、DexFile::Open()根据上一篇文章的学习可知,在OpenDexFilesFromOat()方法中,如果能够从oat文件中加载dex文件,则最终在OatFile::OatDexFile::OpenDexFile()方法中调用带8个参数的DexFile::Open()方法: 12345678DexFile::Ope 2023-11-20 Android #Android源码解析 #dex
dex文件加载流程(二) 书接上文dex文件加载流程(一)(gal2xy.github.io)。 一、DexFile_openDexFileNative()学习完上一篇文章,我们知道:不管是用PathClassLoader还是DexClassLoader加载dex文件,它们最终都会调用openDexFileNative()方法,该方法对应art/runtime/native/dalivk_system_DexFile.cc 2023-11-20 Android #Android源码解析 #dex
dex文件加载流程(一) dex文件加载系列文章链接: PathClassLoader、DexClassLoader dex文件加载流程(一) dex文件加载流程(二) dex文件加载流程(三) InMemoryDexClassLoader InMemoryDexClassLoader加载内存dex的流程 一、PathClassLoader和DexClassLoaderAndroid启动APP时,会加载dex文 2023-11-20 Android #Android源码解析 #dex
Android中dex odex oat vdex art文件格式区别 1. dexdex是Android平台的可执行文件。java文件先编译成class文件(java字节码),再通过dx或d8工具转换成dex文件。 class文件时java虚拟机的可执行文件,与之相对的,dex文件是Dalvik虚拟机的可执行文件,dex文件中存放的自然就是Dalvik字节码。 Android应用安装包,即apk文件中就含有一个或多个dex文件,命名如下: classes.dex 2023-11-17 Android
ODEX文件格式解析 一、什么是odex文件1.1 定义odex文件是Android上的可执行文件。odex文件是由apk中的dex文件优化生成的,存放在cache/dalvik-cache目录下或者与apk同一目录下,最后删除apk文件中的classes.dex文件。 注意!!!不要被文件后缀名骗了! .dex后缀的文件可以是DEX文件或者OAT文件,.odex不再是ODEX文件(应该是Android 5 2023-11-17 Android #Android #odex
dex文件格式解析 一、dex文件中的数据结构1.1 数据类型 类型 含义 u1 表示1byte的无符号数 u2 表示2bytes的无符号数 u4 表示4bytes的无符号数 u8 表示8bytes的无符号数 sleb128 有符号LEB128,可变长度为1~5bytes uleb128 无符号LEB128,可变长度为1~5bytes uleb128p1 =无符号LEB12 2023-11-10 Android #Android #dex
Android中的Dalvik和ART虚拟机 DalvikDalvik虚拟机(Dalvik Virtual Machine),简称 DVM,是 Google 专门为 Android 平台开发的虚拟机,它运行在 Android 运行时库中。 DVM 与 JVM 的区别 架构不同 JVM基于栈架构,需要频繁地从栈上读写数据,因此需要更多的指令分派和内存访问次数,这样就会耗费不少 CPU 时间。 DVM基于寄存器架构,数据的访问通过寄存器间的直接传 2023-09-13 Android #Android
20230913日报 延续昨天的DVM和ART的学习笔记,然后又学习了apk的打包流程,之后是apk的安装流程源码分析,没想到这部分很长很长,可以把这部分分为3部分: PackageInstaller应用的初始化,这部分在UI界面上体现就是我们常看到的安装确认界面,包含需要使用到的权限信息等。 PackageInstaller安装apk,这部分并不是真正的安装,而是创建一个注册一个InstallEventReceiv 2023-09-13 日报 > 2023年09月 #日报