在看雪的学习当中,有很多不理解的地方,发现安卓已经进化了十多年,时代的沟壑已经让我迷失其中,有很多东西让我不解.
所以我决定从最开始的人们对安卓的最初理解开始学习,去了解十年前人们对安卓向往,以及那时只有理论的一些加固方式.
如何开发一个可以自定义控件的Android应用?就像eclipse一样,可以动态加载插件;如何让Android应用执行服务器上的不可预知的代码?如何对Android应用加密,而只在执行时自解密,从而防止被破解?……
这是十年前人们对安卓产生的顿悟,于是乎就产生了动态加载代码的念头.
类动态加载机制
dalvik 虚拟机与Java虚拟机类似,在运行程序前都会将需要的字节码文件加载到内存中.
当然 dalvik虚拟机与Java 还是有区别的.
比如:在使用标准Java虚拟机时,我们经常自定义继承自ClassLoader的类加载器。然后通过defineClass方法来从一个二进制流中加载Class。然而,这在Android里是行不通的,大家就没必要走弯路了。参看源码我们知道,Android中ClassLoader的defineClass方法具体是调用VMClassLoader的defineClass本地静态方法。而这个本地方法除了抛出一个“UnsupportedOperationException”之外,什么都没做,甚至连返回值都为空。
Dalvik虚拟机类加载机制
那如果在Dalvik虚拟机里,ClassLoader不好使,我们如何实现动态加载类呢?Android为我们从ClassLoader派生出了两个类:DexC