罗列几个Android大脚插件团队框架化开发框架

1.&& /DL动态加载框架
& 是基于代理的方式实现插件框架,对 App 的表层做了处理,通过在 Manifest 中注册代理组件,当启动插件组件时,首先启动一个代理组件,然后通过这个代理组件来构建,启动插件组件。 需要按照一定的规则来开发插件 APK,插件中的组件需要实现经过改造后的 Activity、FragmentActivity、Service 等的子类。
优点如下:
动态升级,
&高效并行开发(编译速度更快)
&按需加载,内存占用更低等等DynamicLoadApk 提供了 3 种开发方式,让开发者在无需理解其工作原理的情况下快速的集成插件化功能。
插件需要遵循一定的规则,因此安全方面可控制。
方案简单,适用于自身少量代码的插件化改造。
plugin 无需安装即可由宿主调起。
支持用 R 访问 plugin 资源
plugin 支持 Activity 和 FragmentActivity(未来还将支持其他组件)
基本无反射调用
插件安装后仍可独立运行从而便于调试
支持 3 种 plugin 对 host 的调用模式:
(1)无调用(但仍然可以用反射调用)。
(2)部分调用,host 可公开部分接口供 plugin 调用。 这前两种模式适用于 plugin 开发者无法获得 host 代码的情况。
(3)完全调用,plugin 可以完全调用 host 内容。这种模式适用于 plugin 开发者能获得 host 代码的情况。
只需引入 DL 的一个 jar 包即可高效开发插件,DL 的工作过程对开发者完全透明
支持 android2.x 版本
缺点如下:
不支持通过 This 调用组件的方法,需要通过 that 去调用。
由于 APK 中的 Activity 没有注册,不支持隐式调用 APK 内部的 Activity。
插件编写和改造过程中,需要考虑兼容性问题比较多,联调起来会比较费时费力。
2.&&&&& DroidPlugin
DroidPlugin 是 360 手机助手实现的一种插件化框架,它可以直接运行第三方的独立 APK 文件,完全不需要对 APK 进行修改或安装。一种新的插件机制,一种免安装的运行机制,是一个沙箱(但是不完全的沙箱。就是对于使用者来说,并不知道他会把 apk 怎么样), 是模块化的基础。
优点如下:
支持 Android 四大组件,而且插件中的组件不需要在宿主 APK 中注册。
支持 Android 2.3 及以上系统,支持所有的系统 API。
插件与插件之间,插件与宿主之间的代码和资源完全隔阂。
实现了进程管理,插件的空进程会被及时回收,占用内存低。
缺点如下:
插件 APK 中不支持自定义资源的 Notification,通知栏限制。
插件 APK 中无法注册具有特殊的 IntentFilter 的四大组件。
由于插件与插件,插件与宿主之间的代码完全隔离,因此,插件与插件,插件与宿主之间的通信只能通过 Android 系统级别的通信方式。
安全性担忧(可以修改,hook一些重要信息)。
机型适配(不是所有机器上都能行,因为大量用反射相关,如果rom厂商深度定制了framework层,反射的方法或者类不在,容易插件运用失败)
1.3. Small框架
Small 是一种实现轻巧的跨平台插件化框架,基于“轻量、透明、极小化、跨平台”的理念,更倾向于组件化。跳转插件的界面都是通过uri来指定的.
优点如下:
所有插件支持内置宿主包中。
插件的编码和资源文件的使用与普通开发应用没有差别。
通过设定 URI ,宿主以及 Native 应用插件,Web 插件,在线网页等能够方便进行通信。
支持 Android 、 iOS 、和 Html5 ,三者可以通过同一套 Javascript 接口实现通信。
缺点如下:
暂不支持 Service 的动态注册,不过这个可以通过将 Service 预先注册在宿主的 AndroidManifest.xml 文件中进行规避,因为 Service 的更新频率通常非常低。
4.&& (携程)
组件化框架,目前已停止维护
5.&& AndroidDynamicLoader
通过fragment实现,限制太多。
6.&& ACCD阿里
ACDDCore Android动态部署框架(你可以认为是插件,但又与插件不一样),与传统意义上的插件不一样,用过代理的应该知道,代理方式会有各种莫名其妙的问题。
阅读(...) 评论()Android组件化开发框架 - 简书
Android组件化开发框架
欢迎转载,转载时请注明出处和作者
作者:kerwin
原文地址:
打造自己的组件化开发框架
为什么会有这篇文章:长时间的build,不断重复出现的bug,多次重复开发的烦躁
一、组件化介绍
0、什么是组件化
组件化就是将工程按照不同的属性拆分成各个独立的子工程的过程。
组件是组件化的输出产物,不同的组件最终进行组装就是完整的工程。
1、为什么要做组件化
用产品思维的一个理念就是,为了更容易让用户(开发人员以及测试人员)做正确的事情。因为随着业务越来越复杂,代码量越来越盘大的时候,开发人员在开发新功能或修改bug的时候有时候会不小心将其他正常的功能修改出新bug。而组件化之后,每一个组件都是独立的互不影响。开发完成后,也能对单个组件进行单独发布,测试人员就能对该组件进行单独的测试,而不用受其他不相关的组件的影响。
2、组件化与模块化和插件化的区别
组件化与模块化的差别
组件化与模块化的区别.png
(图片来源:)
组件的粒度大于模块,组件由数个不同的模块按需组合而来。
组件化与插件化的差别
组件化与插件化的区别.png
  (图片来源:)
差别在于,组件化是编译时合并到主工程,插件化是运行时加载到主工程
3、组件化的优点和缺点
  单独编译,便于开发,提升编译速度。
  组件分离,便于维护,提高重用效率。
  单独发布,便于测试,提升测试准度。
  对开发管理的要求更高
二、组件化的架构设计
0、设计要求
1. 稳定高可用
  2. 灵活发布
  3. 可复用
1、整体架构设计图
首先我们先看一下常规的架构设计
架构图-常规的App.png
再看业务模块化后的架构设计
架构图-模块化App.png
最后是组件化的架构设计
架构图-组件化App.png
2、组件交互
数据路由.png
  因为组件与组件之间不能相互引用,所以组件与组件的交互需要一个中间件Router,组件进行交互之前需要通过Router进行寻址中转传递彼此的接口。
3、工程发布流图
工程发布流程.png
  与正常发布流程相同,先打包组件,然后最终在App中将组件合并后打包为apk文件发布。
三、组件化的技术难点
0、热插拔的实现
热插拔不是一个新词,这里的热插拔的与常规的还是有一定的区别。
  热插拔:添加依赖(插),则这个组件的数据库、组件初始化、组件接口自动可用,去除依赖(拔),则这个组件的所有功能全部移除,并且不影响其他组件的编译和发布。详细看下面的数据库和App初始化的工作流程
1、数据库合并与拆分
实现方式:
  方式1、在App中添加配置文件db_libraries.properties,配置文件中添加对应的组件的TableSetHelper,数据库初始化时读取配置文件中的内容通过反射调用组件中的TableSetHelper的方法。
  兼容方式2、(如果没有配置文件才执行)数据库初始化时扫描所有的Class,找出所有extends TableSetHelper并有@TableSetLibrary注解的Class,反射调用其中的方法。
数据库设计uml类图
DBLibrary.png
数据库合并及升级流程图
组件化数据库合并.png
2、组件Application生命周期
实现方式:
方式1:在App中添加配置文件app_libraries.properties,配置文件中添加对应的组件的Application,App初始化时读取配置文件中的内容通过反射调用组件中的Application的生命周期方法。
兼容方式2:(如果没有配置文件才执行)App初始化时扫描所有的Class,找出所有extends Application并有@Applibrary注解的Class,反射调用其中的生命周期方法。
App初始化流程设计uml类图
Applibrary.png
App初始化流程
App初始化流程.png
3、组件之间的解耦与交互
为了达到组件之间的解耦,组件之间不能直接依赖,采用Router中间件的方式进行转接。
组件之间交互流图
数据路由访问流图.png
使用方法:
Router module中添加对应的接口
public interface ISum{
int sum(int a , int b);
在实现的Module中(ModuleA)添加对应的实现
public class SumImp implements ISum{
int sum(int a , int b){
return a+b;
编译时IOC框架会扫描获取到Data注解,自动在对应的ModuleA中生成一个类
public class ISumImpFactory {
public ISumImpFactory() {
public static final ISum generator() {
return new SumImp();
在另一个ModuleB中要使用这个接口时调用
&code&DataRouter.findApi(ISum.class)&/code&
DataRouter会尝试调用
&code&ISum sum = ISumImpFactory.generator();&/code&
返回给ModuleB。
ModuleB 就能使用&code&sum&/code&与ModuleA进行交互。
4、android.library依赖注入问题
在Library类型的Module中,R文件的ID并不是常量,这将导致ioc注入框架无法正常使用,这里的解决办法是利用Gradle动态复制一份R类生成新的R文件(K.java),使用的时候使用新生成的K文件即可。
if (tsk.name.endsWith("Resources") && tsk.name.startsWith("process")) {
def taskName = tsk.name.replace("process", "").replace("Resources", "")
def taskR2 = task("build" + taskName + "K", dependsOn: tsk) {}
taskR2.doLast {
GeneroteK.autoGenerotaK(project)
tsk.doLast {
println "doLast:" + name
GeneroteK.autoGenerotaK(project)
5、Activity交互回调
Activity、Service等之间的数据交互均是使用Bundle传递,而Bundle只能传递基础数据类型以及Serializable序列化的对象,这样有比较大的局限性,尤其是某个Activity需要接收多种数据回调的时候尤其不方便。
这里研究了一种新的方式:使用Java的动态代理传递一个代理的接口回调给Bundle,然后使用代理的回调对象与调用者进行交互。
代码示例:
public &T& T newProxy(Class&T& t, T o) {
MyHandle handle = new MyHandle(toString());
T callBack = (T) Proxy.newProxyInstance(getClass().getClassLoader(), new Class[]{t},
ProxyStore.callBack.put(toString(), new WeakReference&Object&(o));
return callB
private class MyHandle implements InvocationHandler, Serializable {
MyHandle(String generator) {
this.generator =
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
return method.invoke(ProxyStore.callBack.get(generator).get(), args);
四、开发管理
说了这么多,看起来这么复杂,开发的时候会不会很难,发布的时候会不会很麻烦?其实跟正常发布没有任何区别。
开发流程.png
源码实现:
作者:kerwin原文地址:http://www.jianshu.com/p/3ed9f4c87990 打造自己的组件化开发框架 为什么会有这篇文章:长时间的build,不断重复出现的bug,多次重复开发的烦躁 1组件化介绍 0、什么是组件化 组件化就是将工程按照不同的属性...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金相信有很多朋友...
用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? ... Android 获取 View 宽高的常用正确方式,避免为零 - 掘金 相信有很多...
Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)。分布式系统的协调导致了样板模式, 使用Spring Cloud开发人员可以快速地支持实现这些模式的服务和应用程序。他们将在任何分布式...
1.组件化的目的是什么?最近一两年很多人都想在项目里面搞组件化,觉得搞组件化好,却鲜有人知道组件化好在哪里?组件化的目的是什么?个人觉得组件化主要有两个目的:1.实现项目代码的高内聚低耦合;2.方便多人多团队开发(这就是大团队为什么那么热衷于组件化的原因,对开发的效率的提升...
前几天,中央发话了:确保教师工资不低于当地公务员,越艰苦地区补助越高! 这一喜讯,对于教师来说,来的毫无准备! 社会上不乏出现一些声音:教师收入待遇很低,尤其是偏远地区,每月工资不到3000,在现今这个高消费的时代,怎么能“过好”生活,而这次终于盼来了“加薪”! 对于收...
你承受的痛苦并不比他人多太多,痛苦主要来自敏感和脆弱。 生活从来不曾对谁网开一面,所以也没有谁的人生真的尽如人意,只是有些人在遭遇困难和挫折的时候没有哭天抢地,没有声嘶力竭,没有停留在失败的陷阱里不愿动弹,他们选择迅速接受,并找到解决办法。 所以也别抱怨人生不公平,那些看上...
Model猎人-王平 他是网红经济的拥趸者,首创网红孵化+爆品思维的新型营销模式。他阅美女无数,大量挖掘网红,培养网红、储备超级IP。以前端经纪的模式提供网红与品牌推广项目对接。以自身优势,搭建完善的网红孵化体系,专业、专注于边看边买的网红3.0时代。 郭富城终于和那个能让...
貌似宏观政策离我们很遥远。
早市上曾有一个很火的袜子摊,常常围满了阿姨级的买主,她们可都是眼睛雪亮、深谙“价廉物美”之道的,都十双八双地买,仔细一看,还真是超值:袜子面料都是棉或丝光棉的,短的长的统统一元。不断看见有小商贩大批买走,然后卖十元三双。私下里我问了摊主夫妇,原...本文原创,转载请以链接形式注明地址:
第一篇文章,作为序文,并没有什么实质性内容,仅仅是一些八卦和历史,重效率的朋友可以选择直接跳过。
三年前,一款名叫的应用让广大 Android 开发者都&红了眼&,并不是他做的多么酷炫,论内容,他仅仅是一个自定义UI控件集合应用,真正让人捉摸不透的是他的实现,他可以直接下载一个自定义控件的demo,并且运行起来,这是我知道的最早的插件化开发的应用。
当时,Github上有一个开源的插件化框架,叫
,他使用一个Activity作为外壳,动态加载一个未安装apk中的Fragment,并通过外壳Activity来处理Fragment的全部生命周期,达到动态加载一个Android视图界面的效果。 尽管在现在看来这种实现复杂而麻烦,但在当时应该算是很先进的动态加载思路了。他应该是最早的开源 Android 插件化框架。
两年前,在 2014 年 4月,一位中国人开源了一个插件化框架,叫 DL。这个名字是作者自己取的,全名为:。 其实现原理是创建一个静态代理 Activity,将动态加载到未安装的 Activity 中的全部方法(包括生命周期方法)使用静态代理类调用执行。然而由于是动态加载的类,静态代理调用后没有办法拿到super,只能在编写插件时使用that来替代super,而这个that对象实际上就是静态代理类。这应该是最早的国产开源插件化框架了。
同年5月,我在读了DL的全部源码后,完成了自己的第一个插件化框架:,其实就只是在DL的基础上加入了 Service 的动态加载和Activity的 launchmode 以及插件页面间的数据传递。
同样是 2014年7月(或者8月),一位名叫 null 的朋友(中国人),写了一个插件化加载框架,叫
利用 java 虚拟机字节码操作方式,通过动态生成一个插件类的子类,达到插件化的功能。尽管热编译(或者叫热部署)首次创建时效率非常低,但是首次创建后下次加载就能达到比起反射调用快的多的效果,同时可以做到插件代码不必遵循任何限定。这个新的思路让我眼前一亮。然而现在,看到他的master分支已经与 lody 一起,改成了Instrumentation加载,而 dev 分支还保留着我的first commit真的很抱歉,当时答应 null 的到现在也没做到,很遗憾,也感谢你一直保留 dev tree 到现在。
2014年11月,11月份,当时高一刚入学3个月的 lody 也写了一个插件化框架,叫( 这个库已经被删除了,现在你看到的是一个别人fork的仓库,原因咱们最后讲八卦 ) 这个库我给他起名 DLA,最初跟 lody 说的时候他还闹着跟我争冠名权,明明就是我先说的。DLA使用的应该是当时最先进方案了,以至于第二年的DroidPlugin,DynamicAPK都采用的是这套方案,只不过实现起来更为严谨。通过找到一切Activity启动的根源:Instrumentation通过替换这个类,来加载一个伪装的Activity欺骗系统的校验,而实际上加载的是未安装的插件Activity。
今年似乎并没有什么新的插件化项目了,所以就从去年说起了。
15年最早出的是阿里的热修复技术:
通过加载器读取一个dex文件中的类,并找到被注解标记到的要修复的方法,再通过jni在C层替换掉原本出BUG的方法的指针,从而达到热修复的目的。这套方案作为热修复而言并没有任何问题可言,但是热修复毕竟是热修复,不能达到动态添加的目的。
随后还有QQ空间的热修复方案:MultiDex的思路,在应用启动的时候,往Classloader的PathList里面插入一个Dex,通过覆盖掉出BUG的类来做到热修复。QQ空间只出了理论方案,而这套方案的开源代码实现,则是由 贾吉鑫 写了一个
托管在了 Github 上。
相关的热修复项目还有几个就不一一讲解了,咱们继续看下半年出的几个插件化项目。
2015年8月,当时还在360手机助手的张勇开源了一个插件化框架,叫: 跟上面说的DLA一样,通过修改Instrumentation实现Activity动态加载,通过修改ActivityThread实现Service动态加载。说起来非常容易,但是实际上实现起来应该是困难重重。作者几乎是完全自己实现了一套Framework层中对Service和Activity加载的方案,替换掉了系统几乎全部相关的Binder。
同年10月,携程的也开源了其插件化框架:,内容没细看,据说最成功的是自己实现了一个aapt,替换掉SDK的aapt后可以做到对插件资源重排,达到资源通用。
2016年初开源的一个项目:,不光有Android的插件化功能,同时作者还提供了IOS的实现代码。这个项目融合了热修复的类替换思路和插件化的资源加载,是一个非常好的思路。项目的 java 代码本身并没有什么特殊的地方,跟上面讲的差不多,主要内容是在 groovy 脚本里面,通过脚本修改了编译后生成的插件资源id。还没看完,不敢做评价。
说到未来,也不得不提去年出来的ReactNative,尽管我一直说他不可能会成为最终方案,但移动应用web化一定是一个必然的趋势,就好像曾经的桌面应用由C/S到B/S的转变。而怎么web化才是关键之处。
冯老师之前说过,他走的时候已经开始有团队着手研究基于页面级别的动态加载了。什么是基于页面级别,想想今天的浏览器,只有在你真正想要浏览那个页面时,才去加载那个页面的内容。移动应用中的2/8定律,80%的用户访问20%的页面,那么剩下80%的页面是没必要用户去下载的,只有在用到的时候去下载。随着最近重新捡起被我扔掉两年的插件化开发知识,也慢慢感触到这种方案似乎真的是可行的。
再说回RN,呵呵哒,一个HelloWorld项目就是8M+,这什么概念?一个so文件6M什么概念?我敢下断言,抛开阿里的 WeeX 不提,今年下半年绝对还会出基于RN这种思路的web应用框架,而且只会做的更好。
不过这里提一个思路,也是最近团队内部分享的时候想到的,既然RN仅仅是so包很大,他的增量bundle还是很小的,那么有没有可能通过插件化的方案,动态加载这些so包,来解决这个问题?虽然马上就被同事抛来:&那没网怎么办?&这种尴尬的问题。。。
##聊点别的
上文讲了一个叫DL的项目,相信如果是了解过的人,应该都清楚,作者叫任玉刚,原点心桌面的后来被百度收购后到了百度卫士,很多人叫他主席因为最初在他QQ群里面等级排行最高的称呼叫主席。任老师写过一篇博客,叫:《》讲的很在理,原文的点击量已经有15225了。前几天五一去北京,跟 聊到一件事,说现在的技术社区越来越浮躁了。swiftcon刚刚结束,会上某嘉宾打酱油被各种吐槽,一个技术会议居然找了一些辣妹去跳舞,以及直播写代码的美女也做技术分享了。微博上各位大V网红也都开始建立收费群,粉丝红利时代大家都想分到一杯羹。
可是各位想成为网红的朋友,有没有想过在你树立个人品牌的时候,是否有想过拿什么来支撑你的品牌,站在风口猪也能飞,可飞远了以后是没有风了的,需要靠你自己的翅膀了。
的时候,被某个人威逼利诱过,说项目涉及抄袭,要求加上协作者声明,并在项目主页加上链接,如果这样做了,可以在他火起来了以后,在博客帮我做宣传推广。同样的DLA为什么会删库,据我所知也是有些外力掺和,虽然 lody 并没有跟我说什么。
再说到前几个月,有人利用Github的watchlist,擅自将很多GitHub排名较高的人加入了列表中,从那以后,该项目不管做了什么改动,在列表中的人都会收到一份通知邮件。为此
还特意回复他让他不要再这么做了。
& 著作权归作者所有
人打赏支持
作为一个开源项目作者,是时候站出来拯救世界了!
领取条件:开源项目被开源中国收录的开发者可领取
码字总数 78319
Android工程师
好久没有写博客了,这次准备写写我这几天的研究成果——Android插件化开发框架CJFrameForAndroid。 背景交代 首先,你需要知道什么是插件化开发。就拿最常见的QQ来说,在第三个界面动态那里有...
kymjs张涛 ?
Android Studio 优秀插件系列: Android Studio 优秀插件(一):GsonFormat Android Studio 优秀插件(二): Parcelable Code Generator ----------------------------------------------......
听着music睡 ?
Gradle 基本概念 首先我们学习几个gradle 的脚本语法,掌握了这几个语法,你就能非常简单的用gradle构建打包android项目了。 首先,我们来看下一个最简单android 。 build.gradle //设置脚本...
习惯_搬砖 ?
android studio常用插件,可极大简化开发,增强开发效率。 不懂安装studio插件,看参考博文:android stuido插件装:http://my.oschina.net/kooeasy/blog/、ButterKnife Zelezny But...
让代码飞一会 ?
参考资料 [1] Windows环境下Android Studio v1.0安装教程, http://ask.android-studio.org/?/article/9 [2] stormZhang的Android Studio系列教程一--下载与安装, http://stormzhang.com/dev......
点击链接购书 1.什么是RePlugin? 在Android开发领域,有关插件化的讨论一直热度不减。目前市面上的插件化方案虽然很多,但多数只能实现某些功能的插件化,距离开发者的预期尚有相当差距。对...
异步社区 ? 06/08 ?
  如果你是一个有经验的 Android 程序员,那么你肯定手写过许多 以及 方法用来保持 Activity 的状态,因为 Activity 在变为不可见以后,系统随时可能把它回收用来释放内存。重写 Activity...
Android群英传 ? 06/22 ?
作者:tonyley 出处:http://my.oschina.net/tonywolf/blog 转载请注明出处 说明: 本文档只争对Cordova(PhoneGap)的Android端,基于Cordova2.1.0版本。 一.总体结构 Cordova的目标是用HTM...
Web App和Native App 谁将是未来 未来是Web App的天下,还是Native App的天下?作为设计师,我们是应该努力把客户端的体验提升到最优,还是在网页应用层面上做更多的设计?这个一直是大家关心...
Kotlin是由JetBrains为现代多平台应用程序开发的一种编程语言。 在本综合指南中,你可以获得以下信息: 为什么要学习Kotlin? 如何开始? 如何学习它? 在学习Kotlin之前要知道的事情 为什么...
实验楼 ? 06/21 ?
没有更多内容
加载失败,请刷新页面
大数据有很多方向,目前我们口中经常说的大数据的主要就业方向是:大数据研发,大数据分析与挖掘,深度学习,人工智能等方向。 下面我们就从学习的要求到学习的知识进行讲解 需要学习的知识 ...
董黎明 ? 24分钟前 ?
也许就要换用 IntellJ了, eclipse配置太多。 问题多,经常忘记,所以集中记录一下,后续有问题继续添加. 1. Remote System Explorer Operation 总是运行后台服务,卡死eclipse 第一步:Ecl...
SimonAt ? 24分钟前 ?
PHP扩展的安装方式通常分为两种: 1. 随同PHP编译 2. 生成单独的.so文件 这里介绍第二种方式,对于第二种方式执行效率可能低些,但是模块化,就是可以保持php安装不变的情况下,通过php.ini...
bengozhong ? 32分钟前 ?
最近在用 saltstack 获取 token 的时候总是出现 401 认证失败,百度谷歌查了很多资料都没能解决,嗯,这次基本上该出的错都出来了,这次也怪自己没太仔细,加上最近事情较多,看到报错的时候...
blackfoxya ? 33分钟前 ?
在做单元测试时,代码覆盖率常常被拿来作为衡量测试好坏的指标,甚至,用代码覆盖率来考核测试任务完成情况,比如,代码覆盖率必须达到80%或 90%。于是乎,测试人员费尽心思设计案例覆盖代...
harries ? 35分钟前 ?
安装MySQL客户端 我们使用cent os7所以使用yum命令进行安装 yum install mysql 从远程库备份文件 使用mysqldump命令可以远程导出sql格式的备份文件 命令格式: mysqldump -h[地址] -P[端口...
啊哼哼 ? 37分钟前 ?
html结构 &div class="ipt-wrapper"&
&input /&&div& scss样式(兼容由prefix处理) .ipt-wrapper{
display: -moz-
display: -ms-
display: -webkit-
x29 ? 43分钟前 ?
问题: 多个项目应用部署在通一台服务器上,同时使用一台redis,且项目中redis数据不共享。 解决: 1.同一个机运行多个redis实例就是把redis部署在不同的端口中(redis默认端口是6379),注意...
percy94 ? 45分钟前 ?
微服务架构是个难题,但解法有多个 微服务是一个很大的概念,从团队组织到最佳实践似乎都有实施微服务的一些指导。我们这里只提构建微服务的架构模式,也就是关乎到你用什么样的方式来构建你...
xiaomin0322 ? 46分钟前 ?
HashMap的Put方法 HashMap的数据结构设计可以参考链接。接下来回顾HashMap的put(Key k, Value v)过程: (1)对 Key求Hash值,计算出Hash表下标,对应hashCode()方法,所以使用class对象作为...
初雪之音 ? 47分钟前 ?
没有更多内容
加载失败,请刷新页面
文章删除后无法恢复,确定取消删除此文章吗?
亲,自荐的博客将通过私信方式通知管理员,优秀的博客文章审核通过后将在博客推荐列表中显示
确定推荐此文章吗?
确定推荐此博主吗?
聚合全网技术文章,根据你的阅读喜好进行个性推荐
指定官方社区
深圳市奥思网络科技有限公司版权所有

我要回帖

更多关于 插件化框架 的文章

 

随机推荐