分析DroidPlugin,深入理解插件化框架,内容如下:
2018/8/27 更新:
从我写下 Android插件化原理解析 系列第一篇文章至今,已经过去了两年时间。这期间,插件化技术也得到了长足的发展;与此同时,React Native,PWA,App Bundle,以及最近的Flutter也如火如荼。由于实现插件化需要太多的黑科技,它给项目的维护成本和稳定性增加了诸多不确定性;我个人认为,2017年手淘Atlas插件化项目的开源标志着插件化的落幕,2018年Android 9.0上私有API的限制几乎称得上是盖棺定论了——曾经波澜壮阔的插件化进程必将要退出历史主流。如今的插件化技术朝两个方向发展:其一,插件化的工程特性:模块化/解耦被抽离,逐渐演进为稳定、务实的的组件化方案;其二,插件化的黑科技特性被进一步发掘,inline hook/method hook大行其道,走向双开,虚拟环境等等。
虽然插件化终将落幕,但是它背后的技术原理包罗万象,值得每一个希望深入Android的小伙伴们学习。
很遗憾曾经的系列文章没有写完,现在已经没机会甚至可以说不可能去把它完结了;不过幸运的是,我的良师益友包老师(我习惯称呼他为包哥)写了一本关于插件化的书——《Android插件化开发指南》,书中讲述了过去数年浩浩荡荡的插件化历程以及插件技术的方方面面;有兴趣的小伙伴可以买一本看看。
mvn [plugin-name]:[goal-name] mvn compiler:compile 这里写的十分详细: https://www.tutorialspoint.com/maven/maven_quick_guide.htm -------------------------------------------- What are Maven Plugins? Maven is ac
Java port of the Selenium 2 (WebDriver) Python library for Robot Framework Repository moved Maintainer of the library is changed, and new repository is at https://github.com/Hi-Fi/robotframework-selen
Understand 是一个静态代码分析工具,用来分析和阅读大规模项目代码非常方便,功能强大!可通过其 Perl API 来进行定制 。支持的语言包括:Ada、C/C++、C#、Java、Fortran、Pascal、Perl 等等。
import "plugin" Package plugin implements loading and symbol resolution of Go plugins. Currently plugins only work on Linux. A plugin is a Go main package with exported functions and variables that ha
从插件开发里面可知,插件里面涉及uiServer,statsServer,https://www.wenjiangs.com/doc/Efo6sGZXpUrulesServer,server,resRulesServer,resStatsServer共6个功能不同的内部server,这几个server都是可选的;如果存在,插件会把匹配的请求按给定方式传给对应的server,并根据server响应内
A plugin contains one or more features that can be easily plugged in to Handsontable. Writing a new plugin is not a difficult task, simply cloning the Skeleton template will give you a good starting p
The link plugin allows a user to link external resources such as website URLs, to selected text in their document. It also adds a toolbar button and a menu item Insert/edit link under the Insert menu
This plugin adds a save button to the TinyMCE toolbar, which will submit the form that the editor is within. Type: String Example tinymce.init({ selector: "textarea", // change this value according