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

apkplug基础教程

本教程是基于apkplug V1.6.8 版本编写  最新开发方式以官网为准

apkplugdemo演示图

0f0c8482eba1a297722d2f19f96498a1.png

一 apkplugdemo工程源码结构

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展示以及 "运行"按钮事件

com.example.apkplugdemo.ProxyApplication     --负责启动apkplug框架,以及安装assets目录下的插件 (通过InstallBundle类安装)

com.example.apkplugdemo.MyProperty            --启动框架需要的接口类,为框架提供本地化变量保存于获取的接口 (老版本还提供自启插件的安装  v1.6.8版本用BundleControl服务替代)

com.example.apkplugdemo.MainActivity           --项目启动类,展示已安装插件列表,提供安装SD卡中插件的按钮等功能

com.example.apkplugdemo.InstallBundle    --启动assets目录下的插件

三 ProxyApplication

ProxyApplication 只启动框架 然后调用InstallBundle启动插件

public void onCreate() {

super.onCreate();

try{

List activators=new java.util.ArrayList();

//将服务加入框架,框架将在启动时启动这些服务

activators.add(new appServiceManager());

frame=FrameworkFactory.getInstance().start(activators,this,new MyProperty(this.getApplicationContext()));

BundleContext context =frame.getSystemBundleContext();

//安装assets文件夹下的插件 该类替代了MyProperty.AutoStart()方法 ,1.6.7以上建议使用新方式

InstallBundle ib=new InstallBundle();

ib.installBundle(getApplicationContext(), context,

new installCallback(){

@Override

public void callback(int arg0, Bundle arg1) {

if(arg0==installCallback.stutas5||arg0==installCallback.stutas7){

Log.d("",String.format("插件安装 %s : %d",arg1.getName(),arg0));

return;

}else{

Log.d("","插件安装失败 :%s"+arg1.getName());

}

}

});

}catch (Exception ex){

System.err.println("Could not create : " + ex);

ex.printStackTrace();

int nPid = android.os.Process.myPid();

android.os.Process.killProcess(nPid);

}

}

四 InstallBundle 安装插件实现

InstallBundle 是调用BundleControl实现将assets目录中的apk文件安装到宿主应用中的,详细可看

//从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()              -- 获取已安装插件 

ListenerBundleEvent()    --监听插件安装事件

apkplugdemo有关于apkplug框架的调用就是这些了,其他工具性的代码感兴趣的同学可以自己看。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值