我不喜欢那些泛泛而谈的去讲那些形而上学的道理,更不喜欢记那些既定的东西。靠记忆去弥补思考的人,容易陷入人云亦云的境地,最后必定被记忆所围困,而最终消亡的是创造力。希望这个高手之路系列能够记录我学习安卓的点点滴滴。从而汇成流,聚为江,成为海。

下面就结合代码分析一下ClassLoader这个东西。

安卓应用程序是一个Dalvik虚拟机,加载的是Dex格式的文件。加载Dex格式的文件从直观上理解就是ClassLoader做的事情。那么,我们就从应用程序的启动说起,因为应用程序的启动一定是与ClassLoader密不可分的。

我们讲应用程序的启动在《安卓高手之路之 应用程序》里面从应用层面分析到了Process.start方法,启动一个activity调用的是Process的start方法,Process的start方法又是调用的Zygote的一些方法。到这里,过程还算清晰。下面的过程就显得有些绕圈,因为安卓上面的java与其他java不同,安卓每一个应用程序都是一个进程。为了实现一个应用一个虚拟机的理想【这个理想满足了可以很好地保护应用程序不受其他应用程序干扰的可能性,仅仅是为了保护应用的数据不被其他应用侵犯而浪费了如此大的力气,可见google在为了应用程序的安全费了多大的心血啊。。。因为google砸在这个上面的心血比较多,所以后续一定要把google设置的安全机制吃透】。JVM的安全模型不适合在手机上使用。权限管理是一个大的话题,其实无非就是两种:

1.执行期保护:保护正在执行的java代码是正确的,不被侵犯的。

2.数据保护:保护数据不被恶意侵犯。

1.第一种,执行期保护。类加载体系结构、class文件检验器、Java虚拟机(及语言)的安全特性一起达到一个共同的目的:保持Java虚拟 机的实例和它正在运行的应用程序的内部完整性,使得它们不被下载的恶意代码或有漏洞的代码侵犯

2.第二种,数据保护。这个安卓有自己的数据保护方法。就是数字签名,类似于qq登陆。

很明显,第一种保护与这个ClassLoader关系很大。而第二种保护也与ClassLoader或多或少有关系,因为apk文件里面的dex文件也是私有数据的一种。

而且安卓的classloader和普通java的classloader有所不同。那么就得从代码进行分析,到底classloader又是什么东西,这个神秘之神又是如何影响到权限问题的?

累了,打字真辛辛苦。休息。明天继续。从zygote的启动开始看。

ClassLoader使用记录《安卓高手之路》的更多相关文章

  1. 安卓高手之路之 ClassLoader

    我不喜欢那些泛泛而谈的去讲那些形而上学的道理,更不喜欢记那些既定的东西.靠记忆去弥补思考的人,容易陷入人云亦云的境地,最后必定被记忆所围困,而最终消亡的是创造力.希望这个高手之路系列能够记录我学习安卓 ...

  2. 安卓高手之路之ClassLoader(二)

    因为ClassLoader一定与虚拟机的启动有关系,那么必须从Zygote的启动开始看代码.下面就分析一下这些代码,行数不多: int main(int argc, const char* const ...

  3. 安卓高手之路之ClassLoader(三)

    由于看C++和C代码看得很累,很辛苦.上一章终于解脱到java代码中来了. 第一个getClassLoader发生在main的preload方法中, public static void main(S ...

  4. 安卓高手之路之PackageManagerservice

    源码位置:frameworks/base/core/java/android/content/pm/PackageParser.java 源文件路径:android\frameworks\base\s ...

  5. 安卓高手之路之 WindowManager

    安卓中的画面不是纯粹由window组成.而是改成了window+view的组织模式.window是一个顶层窗口的概念.view就相当于在window内的控件.而subwindow则是依附于window ...

  6. 安卓高手之路之java层Binder

    很多人一提到Binder就说代理模式,人云亦云的多,能理解精髓的少. 本篇文章就从设计角度分析一下java层BInder的设计目标,以及设计思路,设计缺陷,从而驾驭它. 对于[邦德儿]的理解, 从通信 ...

  7. Python高手之路 ------读书有感

    最近忙中偷闲把前些年买的<Python高手之路>翻了出来,大致看完了一遍,其中很多内容并不理解,究其原因应该是实践中的经验不足,而这对于现如今的我仍是难以克服的事情,对此也就只能说是看会了 ...

  8. 王家林的“云计算分布式大数据Hadoop实战高手之路---从零开始”的第十一讲Hadoop图文训练课程:MapReduce的原理机制和流程图剖析

    这一讲我们主要剖析MapReduce的原理机制和流程. “云计算分布式大数据Hadoop实战高手之路”之完整发布目录 云计算分布式大数据实战技术Hadoop交流群:312494188,每天都会在群中发 ...

  9. 云计算分布式大数据Hadoop实战高手之路第七讲Hadoop图文训练课程:通过HDFS的心跳来测试replication具体的工作机制和流程

    这一讲主要深入使用HDFS命令行工具操作Hadoop分布式集群,主要是通过实验的配置hdfs-site.xml文件的心跳来测试replication具体的工作和流程. 通过HDFS的心跳来测试repl ...

随机推荐

  1. HDU 5842 Lweb and String

    Lweb and String Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)T ...

  2. 链表的倒数第K个节点

    题目:输入一个链表,输出该链表中倒数第K个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个结点. package com.edu; class LinkNode{ //定义一 ...

  3. A Spy in the Metro

    题意: n个车站,已知到达相邻车站的时间,有m1辆车从1站出发已知发车时间,有m2辆车从n站出发已知发车时间,求从1到达n所需等车的总时间最小. 分析: 有三种情况,在原地等,乘左到右的车,乘右到左的 ...

  4. HDU 5727 Necklace 环排+二分图匹配

    这是从山东大学巨巨那里学来的做法 枚举下黑色球的排列总数是8!,然后八个白球可选的位置与左右两个黑球存不存在关系建图就行 这是原话,具体一点,每次生成环排,只有互不影响的才连边 最后:注重一点,n个数 ...

  5. codeforces 682C Alyona and the Tree DFS

    这个题就是在dfs的过程中记录到根的前缀和,以及前缀和的最小值 #include <cstdio> #include <iostream> #include <ctime ...

  6. css3 javascript 实现菜单按钮特效

    一个菜单按钮特效案例,简单的实现了动态效果. 代码效果预览地址: http://code.w3ctech.com/detail/2504 <div class="bar" i ...

  7. HTML5的manifest缓存

    要使用manifest缓存,我们首先需要写一个manifest文件.这个文件有严格的格式要求,下面是个例子CACHE MANIFEST#我是注释,这个文件名叫test.manifestCACHE:/t ...

  8. Getting Started(Google Cloud Storage Client Library)

    在运行下面的步骤之前,请确保: 1.你的项目已经激活了Google Cloud Storage和App Engine,包括已经创建了至少一个Cloud Storage bucket. 2.你已经下载了 ...

  9. CORBA

    公共对象请求代理体系结构(Common Object Request Broker Architecture)

  10. Uploadify 3.2使用

    我今天介绍的Uploadify 3.2的,以前旧版本的并不适用,说到这个,我就火大,我也是第一次使用,也百度了下使用手册,结果坑爹的那些手册都是旧版的,新版的Uploadify接口和旧版的差太多了.废 ...