android插件化-apkplugdemo源代码阅读指南-10
阅读本节内容前可先了解 apkplug基础教程
本教程是基于apkplug V1.6.8 版本号编写 最新开发方式以官网为准
可下载最新的apkplugdemo源代码http://git.oschina.net/plug/apkplugDemos
apkplugdemo演示图

一 apkplugdemoproject源代码结构
src
|-com.apkplugdemo.adapter --插件列表Adapter
|-com.apkplugdemo.adapter.base --adapter 基类
|-com.apkplugdemo.FileUtil --文件操作类
|-com.apkplugdemo.FileUtil.filter --文件类型过滤类
|-com.apkplugdemo.util --项目通用工具类
|-com.apkplugdemo.util.Observer --java观察者设计模式类
|-com.apkplugdemo.util.preferencesFactory --preferences操作类
|-com.example.apkplugdemo --项目application 和activity类
|-huahua.viewpager --与com.example.apkplugdemo功能同样 仅仅是提供fragment方式展示
二 阅读方式
依据以上结构能够看出除去工具类我们须要阅读的代码并不多
com.apkplugdemo.adapter.ListBundleAdapter --负责首页列表Item展示以及 "执行"button事件
com.example.apkplugdemo.ProxyApplication --负责启动apkplug框架,以及安装assets文件夹下的插件 (通过InstallBundle类安装)
com.example.apkplugdemo.MyProperty --启动框架须要的接口类,为框架提供本地化变量保存于获取的接口 (老版本号还提供自启插件的安装 v1.6.8版本号用BundleControl服务替代)
com.example.apkplugdemo.MainActivity --项目启动类,展示已安装插件列表,提供安装SD卡中插件的button等功能
com.example.apkplugdemo.InstallBundle --启动assets文件夹下的插件
三 ProxyApplication
ProxyApplication 仅仅启动框架 然后调用InstallBundle启动插件
01 |
public void onCreate() |
02 |
super.onCreate(); |
03 |
try{ |
04 |
Listnew java.util.ArrayList<BundleActivator>(); |
05 |
//将服务添�框架,框架将在启动时启动这些服务 |
06 |
activators.add(new appServiceManager()); |
07 |
frame=FrameworkFactory.getInstance().start(activators,this,new MyProperty(this.getApplicationContext())); |
08 |
BundleContext |
09 |
//安装assets目录下的插件 |
10 |
InstallBundlenew InstallBundle(); |
11 |
ib.installBundle(getApplicationContext(), |
12 |
new installCallback(){ |
13 |
@Override |
14 |
public void callback(int arg0, |
15 |
if(arg0==installCallback.stutas5||arg0==installCallback.stutas7){ |
16 |
Log.d("",String.format("插件安装,arg1.getName(),arg0)); |
17 |
return; |
18 |
}else{ |
19 |
Log.d("","插件安装失败+arg1.getName()); |
20 |
} |
21 |
} |
22 |
}); |
23 |
}catch (Exception |
24 |
System.err.println("Could + |
25 |
ex.printStackTrace(); |
26 |
int nPid |
27 |
android.os.Process.killProcess(nPid); |
28 |
} |
29 |
} |
四 InstallBundle 安装插件实现
InstallBundle 是调用BundleControl实现将assets文件夹中的apk文件安装到宿主应用中的,具体可看 <apkplug插件安装-04>
//从assets文件夹中复制apk文件到SD卡中
InputStream in=context.getAssets().open("BundleDemoOSGIService1.apk");
File f0=new File(context.getFilesDir(),"BundleDemoOSGIService1.apk");
if(!f0.exists()){
copy(in, f0);
//第一次启动时运行安装,以后就不运行了
// startlevel设置为1插件会自启 isCheckVersion不检測插件版本号覆盖更新
this.install(mBundleContext,"file:"+f0.getAbsolutePath(),callback,1,false);
}
五 MainActivity 界面代码
MainActivity 初始化函数
initBundleList() -- 获取已安装插件 <获取apkplug已安装插件-03>
ListenerBundleEvent() --监听插件安装事件 <监听apkplug插件安装事件>
apkplugdemo有关于apkplug框架的调用就是这些了,其它工具性的代码感兴趣的同学能够自己看。
android插件化-apkplugdemo源代码阅读指南-10的更多相关文章
- 自己动手写Android插件化框架,让老板对你刮目相看
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由达文西发表于云+社区专栏 最近在工作中接触到了Android插件内的开发,发现自己这种技术还缺乏最基本的了解,以至于在一些基本问题上浪 ...
- 《Android插件化开发指南》勘误
一些常识: 1)全书70个代码例子中,涉及到插件的例子,请先assemble插件的项目,这会在HostApp项目中生成assets目录,并在该目录下plugin1.apk.这样,HostApp才能正常 ...
- 包建强的培训课程(10):Android插件化从入门到精通
@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...
- 《Android插件化开发指南》面世
本书在京东购买地址:https://item.jd.com/31178047689.html 本书Q群:389329264 (一)这是一本什么书 如果只把本书当作纯粹介绍Android插件化技术的书籍 ...
- 有关Android插件化思考
最近几年移动开发业界兴起了「 插件化技术 」的旋风,各个大厂都推出了自己的插件化框架,各种开源框架都评价自身功能优越性,令人目不暇接.随着公司业务快速发展,项目增多,开发资源却有限,如何能在有限资源内 ...
- Android插件化开发之解决OpenAtlas组件在宿主的注冊问题
OpenAtlas有一个问题,就是四大组件必须在Manifest文件里进行注冊,那么就必定带来一个问题,插件中的组件都要反复在宿主中注冊.像Service,ContentProvider等组件眼下没有 ...
- Android插件化(三)载入插件apk中的Resource资源
Android载入插件apk中的Resource资源 简单介绍 怎样载入未安装apk中的资源文件呢?我们从android.content.res.AssetManager.java的源代码中发现,它有 ...
- Android插件化(二):使用DexClassLoader动态载入assets中的apk
Android插件化(二):使用DexClassLoader动态载入assets中的apk 简单介绍 上一篇博客讲到.我们能够使用MultiDex.java载入离线的apk文件.须要注意的是,apk中 ...
- Android插件化的兼容性(上):Android O的适配
首先声明,<Android插件化开发指南>这本书所介绍的Android底层是基于Android6.0(API level 23)的,而本书介绍的各种插件化解决方案,以及配套的70多个例子, ...
随机推荐
- DTU软硬件方案
经过周末的思考以及已有的经验,准备将DTU研发项目命名为QN100,确定了初步的软硬件方案,产品名称大家如果有好的名字欢迎提供. 硬件: 采用STM32F101RD为主处理器, ...
- Oracle日志性能查看
http://blog.chinaunix.net/uid-20784775-id-373968.html http://www.orafaq.com/wiki/Scripts https://com ...
- 【Python】iichats —— 命令行下的局域网聊天程序
转载请声明出处:http://www.cnblogs.com/kevince/p/3941728.html ——By Kevince ii系列工具第三弹,命令行下的局域网聊天程序 原理: 程序启动 ...
- wxpython 树形控件全选和取消全选
#encoding:utf-8 import wx import wx.lib.agw.customtreectrl as CT class MyFrame(wx.Frame): def __init ...
- mysql中多个字段共同确定唯一性
create table tbl_table ( id integer not null auto_increment, fname varchar(255), lname varchar(255), ...
- 在自定义的js验证规则中调用magento的VarienForm方法验证表单
js部分<script type="text/javascript"> //<![CDATA[ var loginForm = new VarienForm('l ...
- DOM 样式操作
通过js动态的修改样式 更新样式的方法:一.使用.style方法修改样式,缺点是使样式混杂在js中,再次修改不易.二.更新class属性,更改样式.三.一次性更改很多元素样式(如换肤操作),更改样式表 ...
- C#生成ACCESS文件几点注意事项
1.bin文件夹下有没有Interop.ADOX.dll文件. 2.当前服务器有没有安装access 64位驱动,若没有,可安装AccessDatabaseEngine_X64.exe文件. 3.生成 ...
- 关闭浏览器输入框自动补齐 兼容IE,FF,Chrome等主流浏览器
这篇文章主要介绍了关闭浏览器输入框自动补齐 兼容IE,FF,Chrome等主流浏览器,需要的朋友可以参考下.希望对大家有所帮助 Firefox 和 IE 的浏览器各自实现了input历史记录的功能 ...
- Phalcon 性能最高的php框架没有之一
最近有个朋友说他们现在在用Phalcon框架开发项目,明显感觉性能有很大的提升,所有着手学习下这个高性能框架,网上是这样说的“虽然以C语言编写达到较高的效能,但相对的一项缺点就是在服务器上必须拥有管理 ...