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)
上一篇 2021年12月4日 下午2:00
下一篇 2021年12月4日 下午3:00


相关推荐

  • Android Deeplink配置

    Android Deeplink配置Deeplink启动应用配置注意事项1.Deeplink格式说明  Deeplink是目前使用广告跟踪非常热门的一种方式,Deeplink的链接类型一般是schema://host/path?params样式。2.为接收Deeplink配置intent-filter  在Android设备中,点击Deeplink后可以打开指定应用,为了能够正确定位到需要打开的应用,并正…

    2022年6月15日
    71
  • AAA认证及RADIUS配置「建议收藏」

    AAA认证及RADIUS配置「建议收藏」AAA认证及RADIUS配置AAA简介AAA是Authentication,AuthorizationandAccounting(认证、授权和计费)的简称,它提供了一个对认证、授权和计费这三种安全功能进行配置的一致性框架,实际上是对网络安全的一种管理。这里的网络安全主要是指访问控制,包括:.哪些用户可以访问网络服务器。.具有访问权的用户可以得到…

    2022年5月25日
    66
  • 大数运算模板

    大数运算模板#include#include#include#includeusingnamespacestd;#defineMAX_DIGIT500//大数运算:加法intAdd(int*a,int*b,int*&result){if(a==NULL||b==NULL||re

    2022年10月7日
    6
  • shell中 -eq,-ne,-gt,-lt,-ge,-le数字比较符

    使用说明:-eq//equals等于-ne//noequals不等于-qt//qreaterthan大于-lt//lessthan小于-ge//greaterequals大于等于-le//lessequals小于等于注:1、在shell中进行比较时,结果为0代表真,为1代表假。2、-eq,-ne等比较符只能用于数字比较,有字符也会先转换成数字然后进行比较。…

    2022年4月7日
    209
  • html外部下拉框表格联动,Html下拉框Select联动实例

    html外部下拉框表格联动,Html下拉框Select联动实例在开发网站时 经常会有二个或多个 select 下拉框联动的情况 比如省份和城市二个下拉框联动 在省份下拉框里选择不同的省 第二个下拉框城市就要对应该省份下的城市数据 下面一起来看下 怎么用 Javascript 生成这样的联动下拉框 01 首先 看下我们定义的二个数组的数据 一个 arr class 是班级数据 每条数据包括班级 id 和班级名称 另一个是 arr stu 是学生数据 每条数据包括学生 id 所属

    2026年3月16日
    2
  • c语言用命令行打开文件_c语言无法打开文件

    c语言用命令行打开文件_c语言无法打开文件linux文件操作(打开及关闭)Linux文件描述符简介当一个进程获取文件的访问权时,通常指打开一个文件时,内核返回一个文件描述符,进程可以通过文件描述符进行后续的操作。文件描述符是一组正整数,每一个文件被打开时,内核都会打开一个大于或等于0的文件描述符。文件描述符012这是linux系统保留的三个文件描述符。0代表标准输入stdin1代表标准输出stdout2代表错误输出s…

    2025年6月17日
    4

发表回复

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

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