三年前,一款名叫的应用让广大Android开发者都”红了眼”,并不是他做的多么酷炫,论内容,他仅仅是一个自定义UI控件集合应用,真正让人捉摸不透的是他的实现,他可以直接下载一个自定义控件的demo,并且运行起来,这是我知道的最早的插件化开发的应用。当时,Github上有一个开源的插件化框架,叫AndroidDynamicLoader,他使用一个Activity作为外壳,动态加载一个未安装apk中的Fragment,并通过外壳Activity来处理Fragment的全部生命周期,达到动态加载一个Android视图界面的效果。尽管在现在看来这种实现复杂而麻烦,但在当时应该算是很先进的动态加载思路了。他应该是最早的开源Android插件化框架。两年前,在年4月,一位中国人开源了一个插件化框架,叫DL。这个名字是作者自己取的,全名为:dynamic-load-apk。其实现原理是创建一个静态代理Activity,将动态加载到未安装的Activity中的全部方法(包括生命周期方法)使用静态代理类调用执行。然而由于是动态加载的类,静态代理调用后没有办法拿到super,只能在编写插件时使用that来替代super,而这个that对象实际上就是静态代理类。这应该是最早的国产开源插件化框架了。同年5月,我在读了DL的全部源码后,完成了自己的第一个插件化框架:CJFrameForAndroid,其实就只是在DL的基础上加入了Service的动态加载和Activity的launchmode以及插件页面间的数据传递。同样是年7月(或者8月),一位名叫null的朋友(中国人),写了一个插件化加载框架,叫android-pluginmgr利用java虚拟机字节码操作方式,通过动态生成一个插件类的子类,达到插件化的功能。尽管热编译(或者叫热部署)首次创建时效率非常低,但是首次创建后下次加载就能达到比起反射调用快的多的效果,同时可以做到插件代码不必遵循任何限定。这个新的思路让我眼前一亮。然而现在,看到他的master分支已经与lody一起,改成了Instrumentation加载,而dev分支还保留着我的first哪个医院治疗白癜风最好中科白癜风微信账号