您的位置:首页 > 移动开发 > Android开发

android插件化-apkplugdemo源代码阅读指南-10

2014-08-21 13:29 393 查看
阅读本节内容前可先了解 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
List
activators=
new
java.util.ArrayList<BundleActivator>();
05
//将服务添�框架,框架将在启动时启动这些服务
06
activators.add(
new
appServiceManager());
07
frame=FrameworkFactory.getInstance().start(activators,
this
,
new
MyProperty(
this
.getApplicationContext()));
08
BundleContext
context =frame.getSystemBundleContext();
09
//安装assets目录下的插件
该类替代了MyProperty.AutoStart()方法 ,1.6.7以上建议使用新方式
10
InstallBundle
ib=
new
InstallBundle();
11
ib.installBundle(getApplicationContext(),
context,
12
new
installCallback(){
13
@Override
14
public
void
callback(
int
arg0,
Bundle arg1) {
15
if
(arg0==installCallback.stutas5||arg0==installCallback.stutas7){
16
Log.d(
""
,String.format(
"插件安装
%s : %d"
,arg1.getName(),arg0));
17
return
;
18
}
else
{
19
Log.d(
""
,
"插件安装失败
:%s"
+arg1.getName());
20
}
21
}
22
});
23
}
catch
(Exception
ex){
24
System.err.println(
"Could
not create : "
+
ex);
25
ex.printStackTrace();
26
int
nPid
= android.os.Process.myPid();
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框架的调用就是这些了,其它工具性的代码感兴趣的同学能够自己看。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: