Android中的动态加载机制--薛彦顺

【Android中的动态加载机制--薛彦顺】盛年不重来,一日难再晨,及时当勉励,岁月不待人。这篇文章主要讲述Android中的动态加载机制--薛彦顺相关的知识,希望能为你提供帮助。
在目前的软硬件环境下, Native App与Web App在用户体验上有着明显的优势, 但在实际项目中有些会因为业务的频繁变更而频繁的升级客户端, 造成较差的用户体验, 而这也恰恰是Web App的优势。本文对网上Android动态加载jar的资料进行梳理和实践在这里与大家一起分享, 试图改善频繁升级这一弊病。
android应用开发在一般情况下, 常规的开发方式和代码架构就能满足我们的普通需求。但是有些特殊问题, 常常引发我们进一步的沉思。我们从沉思中产生顿悟, 从而产生新的技术形式。
如何开发一个可以自定义控件的Android应用? 就像eclipse一样, 可以动态加载插件; 如何让Android应用执行服务器上的不可预知的代码? 如何对Android应用加密, 而只在执行时自解密, 从而防止被破解? ……
熟悉java技术的朋友, 可能意识到, 我们需要使用类加载器灵活的加载执行的类。这在Java里已经算是一项比较成熟的技术了, 但是在Android中, 我们大多数人都还非常陌生。
类加载机制
Dalvik虚拟机如同其他Java虚拟机一样, 在运行程序时首先需要将对应的类加载到内存中。而在Java标准的虚拟机中, 类加载可以从class文件中读取, 也可以是其他形式的二进制流, 因此, 我们常常利用这一点, 在程序运行时手动加载Class, 从而达到代码动态加载执行的目的
然而Dalvik虚拟机毕竟不算是标准的Java虚拟机, 因此在类加载机制上, 它们有相同的地方, 也有不同之处。我们必须区别对待
例如, 在使用标准Java虚拟机时, 我们经常自定义继承自ClassLoader的类加载器。然后通过defineClass方法来从一个二进制流中加载Class。然而, 这在Android里是行不通的, 大家就没必要走弯路了。参看源码我们知道, Android中ClassLoader的defineClass方法具体是调用VMClassLoader的defineClass本地静态方法。而这个本地方法除了抛出一个“UnsupportedOperationException”之外, 什么都没做, 甚至连返回值都为空
[cpp] view plain copy

    推荐阅读