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


相关推荐

  • 提升进程权限-OpenProcessToken等函数的用法[通俗易懂]

    提升进程权限-OpenProcessToken等函数的用法[通俗易懂]提升进程权限文章一:在枚举/结束系统进程或操作系统服务时,会出现自己权限不足而失败的情况,这时就需要提升自己进程到系统权限,其实提升权限的代码很简单的,看到过的最经典的应该是《WINDOWS核心编程》第四章中操作进程给出的那个函数了,如果我们真的不了解它的操作也不要紧,因为只要在你需要的地方调用下面这个函数就是了,以下是它的代码:BOOLEnablePriv(){HAND

    2022年6月25日
    47
  • python做微信回复机器人_微信自动回复机器人免费版

    python做微信回复机器人_微信自动回复机器人免费版还记得“人人”火的时候,有个小黄鸡很有名,可以不知疲倦地和你聊上一整天,而且各种搞怪金句频出,让人欲罢不能。如今人人已经成为“人人直播-高颜值品质直播平台”了(往事不堪回首啊),微信却火地一塌糊涂,那么如何在微信上做一个有趣的小黄鸡功能呢?还好我们有Python。Lifeisshort,sousepython.不得不承认Python真的是一种神奇的语言,常常带给人很多惊喜。不到30行代码便可

    2022年10月1日
    2
  • 浙江省计算机专业的大专学校排名_浙江省内计算机大学专业

    浙江省计算机专业的大专学校排名_浙江省内计算机大学专业2015浙江省大学学科专业排名下面列出2015浙江省高校荣获2015年中国三星级学科专业以上的学科专业名单:1、浙江大学6星级学科专业(中国顶尖学科专业):农林经济管理、光学工程5星级学科专业(中国一流学科专业):管理科学与工程、电气工程、动力工程及工程热物理、控制科学与工程、软件工程、生态学、农业资源与环境、园艺学、植物保护、临床医学4星级学科专业(中国高水平学科专业):马克思主义理论、教育学、…

    2025年6月16日
    2
  • gridbaglayout布局_gridsearch

    gridbaglayout布局_gridsearch自己想做个小程序,却在布局上犯了难,使用FlowLayout和BorderLayout这些功能不够强大,使用GridBagLayout却不会,只好求助于文档了。文档对这个布局管理器介绍很详细,但是最痛苦的是英文。不过幸好它有实例,经过在网上查阅和推敲实例,终于对GridBagLayout的使用有了一个成型的了解,拿出来与大家分享。GridBagLayout是一个灵活的布局管理器,部件如果想

    2022年9月9日
    2
  • cmd切换盘符_cmd分配盘符

    cmd切换盘符_cmd分配盘符cmd切换盘符自己老是忘,每次都要去百度,所幸就记录下:打开cmd的命令行:window+R,输入cmdcmd命令行下怎么切换目录此时默认的地址是C盘cmd命令行下怎么切换目录如果我们要访问D盘,只需要输入D:(不区分大小写)如下图,盘符已经更改cmd命令行下怎么切换目录如果我们要进入一个具体的文件夹,那么继续输入命令。比如我要进入D:\androi…

    2022年10月4日
    1
  • 史上最详细图解快速排序的方法_快速排序的基本步骤

    史上最详细图解快速排序的方法_快速排序的基本步骤0.前言找了好多贴在都没有找到舒心的一次能看懂的文章,决定把学明白每一步全部图解出来。推荐一个博主的文章也很不错:https://blog.csdn.net/weixin_42109012/article/details/916450511.图解开始![在这里插入图片描述](https://img-blog.csdnimg.cn/e6bbdfbe97e44bbd99f99cf456c998ed.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5

    2022年9月13日
    2

发表回复

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

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