android开发-类加载
来源:互联网 发布:破解版office for mac 编辑:程序博客网 时间:2024/06/06 13:03
apk的目录
AndroidManifest.xml
assets 这里的资源是没有id的
lib apk的so库
MATE-INF 存放的是签名信息
R 目录 整个项目的资源文件
resource.arsc 资源的索引
classes.dex 优化过的class文件
如果有分包,那么就有多个dex
那么就有多了classes2.dex
分包解决65535的问题 ,android dalivk虚拟机 用short保存方法数目
最多也就65535个方法
DexClassLoader 可以加载任何路径的apk/dex/jar
PathClassLoader只能加载/data/app中的apk,也就是已经安装到手机中的apk
类加载器 api分类的角度
BootStrap ClassLoader
纯c++实现的类加载,没有对应的java类 主要加载jre/lib目录下的核心库
他是启动类加载器,加载完他之后 才能加载其他的类加载库
Extension ClassLoader
类的全名是sun.misc.luncher$ExtClassLoader 主要加载jre/lib/ext目录下的扩展包
App ClassLoader
sun.misc.Luncher$AppClassLoader 主要加载CLASSPATH路径下的包
App ClassLoader的getParent 就是Extension ClassLoader
Extension ClassLoader的parent 是null 但是他会委托BootStrap ClassLoader
BootStrap ClassLoader不会委托 自己会尝试处理
java 的 ClassLoader 的loadClass方法
Class c=findLoadClass(name);//检查是否已经被加载过
if(c==null){
if(parent!=null){
c=(parent.loadClass(name,false);//会去%java_home%/jre/lib/ext下去加载
}else{
c=findBootstrapClass0(name);//会去%java_home%/jre/lib去加载
}
if(c==null){//如果
c=findClass(name);
}
}
findBootstrapClass0会调用private native findBootstrapClass
这就叫父委托加载机制
为什么引入父委托机制,就是为了 即使创建和JDK一样的的类的时候,一样会去加载系统指定的类,而不是加载我们自定义的假的系统类,这样保证软件的安全性
android的ClassLoader类
protected Class loadClass(String className,boolean resolve){
Class<?> class =findLoadedClass(className);
if(class==null){
try{
class=parent.loadClass(className);
}catch(ClassNotFoundException e){
}
if(class==null){
class=findClass(className);
}
}
}
android的parentLoader永远不会为空,因为构造方法里面判断了,
如果parentLoader为null 会抛出异常
ClassLoader(ClassLoader parentLoader){
if(parentLoader==null){
throw new NullPointerException(".....")
}
parent=parentLoader;
}
android中的ClassLoder 一般是 PathClassLoader
PathClassLoader 需要BootClassLoader 也是继承自ClassLoader
阅读全文
0 0
- android开发-类加载
- Android开发加载音乐文件时
- Android开发Bitmap加载大图
- android开发中的加载框
- Android开发---加载h5界面
- Android中插件开发篇之----类加载器
- Android中插件开发篇之----类加载器
- Android中插件开发篇之----类加载器
- Android中插件开发篇之----类加载器
- android 插件开发前凑java类加载器
- Android开发——使用BitmapRegionDecoder类加载高清巨图方案
- Android中插件开发篇之----类加载器
- Android 应用开发之Dex解析和类加载
- Android中插件开发篇之----类加载器
- Android开发 WebView加载从本地加载图片
- android 动态加载 插件模型开发
- Linux上面开发android手机驱动加载.
- Android应用开发图片异步加载
- Distributed Denial of Service
- Angular指令生成独立作用域及dom操作
- C_良好的代码规范
- Some important codes
- 第7章 做游戏的主人——Windows游戏输入消息处理
- android开发-类加载
- Excel2013表格将日期格式转为固定的XXXX年XX月XX日形式
- Listener 监听器&&Spring使用Log4jConfigListener配置Log4j日志
- java序列化与反序列化
- 混淆矩阵的MATLAB实现
- 冒泡排序 两层循环和单层循环的实现方法
- 【解决方案】手写Java项目测试类httpclient慢的问题解决方案
- Mybatis-Generator生成Mapper文件中<if test="criteria.valid">的问题解答
- java虚拟机学习之java体系结构