• 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         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框架的调用就是这些了,其它工具性的代码感兴趣的同学能够自己看。

  • 相关阅读:
    6月16日
    9月15日
    9月14日
    9月13日
    9月12日
    6月11日
    梦断代码阅读笔记
    11周总结
    梦断代码阅读笔记
    10第一阶段意见评论
  • 原文地址:https://www.cnblogs.com/yxwkf/p/3926994.html
Copyright © 2020-2023  润新知