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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 2020年kali最新国内更新源sources.list

    2020年kali最新国内更新源sources.list打开sources.list文件命令:leafpad/etc/apt/sources.list添加以下更新源:#中科大debhttp://mirrors.ustc.edu.cn/kalikali-rollingmainnon-freecontribdeb-srchttp://mirrors.ustc.edu.cn/kalikali-rollingmainnon-f…

    2022年5月28日
    27
  • 二进制数的运算方法

    二进制数的运算方法1.二进制数的算术运算二进制数的算术运算包括:加、减、乘、除四则运算,下面分别予以介绍。(1)二进制数的加法根据“逢二进一”规则,二进制数加法的法则为:0+0=00+1=1+0=11+1=0 (进位为1)1+1+1=1(进位为1)例如:1110和1011相加过程如下:(2)二进制数的减法根据“借一有二”的规则,二进制数减法的法则为:

    2022年6月29日
    17
  • java使用多线程导出excel「建议收藏」

    java使用多线程导出excel「建议收藏」前言在一个业务中,需要将数据库的一张日志表导出到excel中做统计分析归类,由于单表的数据量特别大,发现在最终导出excel的时候,由于数量太大,导出速度特别慢,想了一些办法,不管使用何种API,单线程始终是操作的瓶颈,因此最终考虑使用多线程进行改善总体思路:1、数据总量分段2、每个线程处理不同分段的数据3、提交线程池下面来看具体的代码,为测试方便,这里直接使用一个测试接口进行调用,…

    2022年5月5日
    815
  • Windows 10 安装程序_ubuntu20.04安装cuda

    Windows 10 安装程序_ubuntu20.04安装cudaWindows10安装CUDAToolkit10.10.NVCUDA.DLL-NVIDIACUDA10.1.135driver-NVIDIA驱动程序版本NVIDIA控制面板->帮助->系统信息->组件1.CUDAToolkitCUDAToolkithttps://developer.nvidia.com/cuda-toolkitCUDAToolkitDownloadhttps://developer.nvidia.com/

    2022年9月16日
    0
  • mediumtext java类型_编辑框不支持MEDIUMTEXT数据类型[通俗易懂]

    mediumtext java类型_编辑框不支持MEDIUMTEXT数据类型[通俗易懂]我的原始需求是:MySQL8表字段是MEDIUMTEXT,新增、修改记录时报错实现过程中遇到的问题:java.lang.RuntimeException:当前数据类型无法匹配数据库字段类型:MEDIUMTEXT,请更换其它常用类型或自定义类型转换器atcom.eova.core.type.Convertor.getJavaType(Convertor.java:74)atcom.eova….

    2022年6月10日
    43
  • 【SSM进阶之路】使用Spring SqlSessionTemplate API实现查询数据[通俗易懂]

    【SSM进阶之路】使用Spring SqlSessionTemplate API实现查询数据[通俗易懂]该案例的实现是基于jar包org.mybatis.spring中的SqlSessionTemplateAPI进行使用的。主要是完成如何使用SqlSessionTemplate中的API封装一个通用的查询方法。1、首先定义一个业务层数据接口:packagecom.yihg.basic.api;importjava.util.List;importjava.util.Map;

    2022年5月6日
    74

发表回复

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

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