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

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 函数极限的定义

    函数极限的定义严格定义设函数y=f(x)y=f(x)y=f(x)在点x0x_0x0​的某个去心邻域内有定义,即存在ρ>0\rho>0ρ>0,使O(x0,ρ)\{x0}⊂Df\mathbf{O}(x_0,\rho)\backslash\{x_0\}\subsetD_fO(x0​,ρ)\{x0​}⊂Df​如果存在实数AAA,对于任意给定的ε>0\varepsilon>0ε>0,可以找到δ>0\delta>0δ>0,使得当0<∣x−x0∣

  • 高等数学 – 数列极限定义 – 笔记

    高等数学 – 数列极限定义 – 笔记数列极限定义是个很让我费解的内容,所以花了一下午的时间去理解它,并将得到的结论记录在此。专科级理解,各路大神敬请指教。

  • wpf wrapPanel居中并从左到右排列

    wpf wrapPanel居中并从左到右排列publicclassAlignableWrapPanel:Panel{///<summary>///注册新的属性HorizontalContentAlignment///</summary>publicHorizontalAlignmentHorizontalContentAlignment{get{return(Horizont.

  • PID控制的MATLAB仿真(1)

    PID控制的MATLAB仿真(1)PID控制应用广泛,说起来PID特别的简单,在比例负反馈的基础上加入微分项实现快速调节,加入积分项实现无静差。MATLAB强大的功能让学习变得非常简单。在学习智能控制这门课的时候,老师推荐了刘金琨老师的先进PID控制一书,边看边学边调程序。下文程序选自此书。首先从模拟PID开始,被控系统一般是下图这种结构:其中PID控制器:一种用模拟PID控制的磁悬浮:电路图左侧是霍尔传

  • C语言中volatile关键字的作用[通俗易懂]

    C语言中volatile关键字的作用[通俗易懂]一.前言1.编译器优化介绍:由于内存访问速度远不及CPU处理速度,为提高机器整体性能,在硬件上引入硬件高速缓存Cache,加速对内存的访问。另外在现代CPU中指令的执行并不一定严格按照顺序执行,没有相关性的指令可以乱序执行,以充分利用CPU的指令流水线,提高执行速度。以上是硬件级别的优化。再看软件一级的优化:一种是在编写代码时由程序员优化,另一种是由编译器进行优化。编译器优化常用的方法有:将内存变

  • 弹性网络回归模型_数据模型剪枝

    弹性网络回归模型_数据模型剪枝本文首发于PandaCV公众号。导语:模型剪枝算法核心在于找到“不重要”的参数并且实现裁剪。为寻找到较优的剪枝策略,我们往往需要尝试多种剪枝策略和剪枝策略性能评估。通常剪枝策略评估方法是将剪枝后的模型训练到收敛或者训练规定好数量epoch后进行性能比较。不管是人工调试剪枝策略还是自动搜索剪枝策略,都需要多次评估剪枝策略。剪枝策略的评估效率一定程度上影响了整体压缩效率。因此,本文提出了一种能够快速衡量剪枝后模型性能的方法,经实验能够对MobilenetV1减少50%的FLOPs情况下,仍能保证在Image

发表回复

您的电子邮箱地址不会被公开。

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