一下文章只是本来自己的总结,不一定对(我就一刚毕业的大学生, 错了也很正常)
android 插件分两类:
1:安装应用的插件方式: 这种方式的插件的程序也是需要安装在手机上的, 插件可以有也可以没有launcher的Activity(好多文章都说插件不要提供启动的Acitivity的入口,经本人试验,提供了也没出错)。
2:不用安装的插件方式:主体思想是找到具体目录下的APK文件,利用反射机制找到实例化对应的类,调用对应的方法。详情见另一篇我转载的博客:http://892848153.iteye.com/admin/blogs/1979440。
?
下面这段来自:http://songyuanlin.blog.51cto.com/6114055/1109634
- public?class?MainActivity?extends?Activity?{??
- ??????
- ????//预定义的action??
- ????public?static?final?String?ACTION_PLUGIN?=?"com.intsig.mainApp.PLUGIN";??
- [email protected]
- ????public?void?onCreate(Bundle?savedInstanceState)?{??
- ????????super.onCreate(savedInstanceState);??
- ????????setContentView(R.layout.main);??
- ????????try?{??
- ????????????//查找符合这个action的所有activity即插件,若插件使用的是其他组件换成对应的方法?
- ????????????List<ResolveInfo>?infos?=?getPackageManager().queryIntentActivities(??
- ????????????????????new?Intent(ACTION_PLUGIN),?PackageManager.MATCH_DEFAULT_ONLY);??
- ????????????ActivityInfo?pluginInfo;??
- ????????????for(ResolveInfo?info:infos){??
- ????????????pluginInfo?=?info.activityInfo;??
- ? ? ? ? ? ? //根据插件的安装路径获得ClassLoader
- ????????????????ClassLoader?cl?=?new?PathClassLoader(pluginInfo.applicationInfo.sourceDir,getClassLoader());??
- ????????????????//获得插件类的实例
- ????????????????MyInterface?plugin?=?(MyInterface)?cl.loadClass(pluginInfo.name).newInstance();??
- ????????????????plugin.test();??
- ????????????}??
- ????????}?catch?(Exception?e)?{??
- ????????????e.printStackTrace();??
- ????????}??
- ??
- ????}??
- }?
?
?一个插件就是一个向主程序提供功能的库,它和android中的库项目不同的地方就是库项目如果更新了,那么主程序也需要更新,而插件就不用,只需要更新插件程序就可以了,省流量。
插件向主程序提供功能有三中方式:
1:在用反射方式调用插件中的方法时,提供具体的对象,具体的方法名
? ? ?详情见文章:http://892848153.iteye.com/blog/1976988
2:可以把插件提供的对象,方法,写到一个XML文件中,就想Spring的插件方式一样。
? ? ?详情见文章:http://songyuanlin.blog.51cto.com/6114055/1109634
3:采用接口的方式,写一个Interface文件,然后插件实现它.
? ? ? 详情见文章:http://blog.csdn.net/neoimale/article/details/7495116
?个人觉得第三种最好用。
最后发现一个插件框架apkplug
参考文章:http://blog.csdn.net/neoimale/article/details/7495116
? ? ? ? ? ? ? ?http://www.cnblogs.com/hangxin1940/archive/2011/12/14/2288169.html
? ? ? ? ? ? ? ?http://songyuanlin.blog.51cto.com/6114055/1109634
? ? ? ? ? ? ??http://blog.csdn.net/mingli198611/article/details/8858076
?