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

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

大家好,又见面了,我是全栈君,祝每个程序员都可以多学几门语言。

阅读本节内容前可先了解 
apkplug基础教程

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

可下载最新的apkplugdemo源代码http://git.oschina.net/plug/apkplugDemos

apkplugdemo演示图

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/118562.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • maven的groupid是什么(maven parent标签)

    GroupID是项目组织唯一的标识符,实际对应JAVA的包的结构,是main目录里java的目录结构。ArtifactID就是项目的唯一的标识符,实际对应项目的名称,就是项目根目录的名称。

    2022年4月17日
    207
  • win10多合一原版系统_微软Win10专业版制作多合一系统安装盘教程

    win10多合一原版系统_微软Win10专业版制作多合一系统安装盘教程微软Win10怎么制作多合一系统安装盘?和Win10家庭版、win10企业版,win10教育版相比,微软Win10专业版是最受大家喜欢的操作系统,那么在安装Win10操作系统的时候,我们就不得不准备多个不同版本的系统安装盘。可是你知道微软Win10专业版制作多合一系统安装盘怎么操作吗?下面系统天地小编给大家介绍微软Win10专业版制作多合一系统安装盘教程。微软Win10专业版制作多合一系统安装盘教…

    2022年6月26日
    57
  • 物联网架构构想_物联网网络架构组成

    物联网架构构想_物联网网络架构组成物联网架构:设备端: mqtt的so服务端:    后台:django(或php、node.js)+mysql+MQTT服务器   前端:bootstrap、dashing、素材网、ECharts、Freeboard、ajax移动端: ionic…

    2022年9月2日
    1
  • mysql list table_java resultset转list

    mysql list table_java resultset转list我在Orcle里写了一个Sql语句,用到了LISTAGG,现在要改成mysql数据库,我要怎么改这个Sql语句?SELECTA.GUID,A.COMPANY_GUID,A.GOODS_CODE,A.GOODS_NAME,A.SPECIFICATIONS,A.SMALL_IM…我在Orcle里写了一个Sql语句,用到了LISTAGG,现在要改成mysql数据库,我要怎么改这个Sql语句?SELE…

    2022年9月6日
    2
  • 久坐时间app安卓_提醒喝水和久坐的app

    久坐时间app安卓_提醒喝水和久坐的app真时运动app安卓版是一款运动健康管理软件,它有强大的计步功能,可快速帮助用户解决运动计步问题,还能连接运动装备智能监控,喜欢的用户快来下载吧!软件介绍真时运动app是一款用于管理可穿戴设备的应用,目前真时运动app已支持真时无限运动手表HC、真时轻智能腕表KRONABY、真时无限运动手表HYPE以及真时青春运动社交手环S8。真时运动app与硬件连接后,可接收来自手机的消息通知、来电通知、日程提醒…

    2022年9月25日
    0
  • MobaXterm简单使用说明

    MobaXterm简单使用说明

    2021年5月13日
    286

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号