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

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

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

apkplugdemo演示图

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

android插件化-apkplugdemo源代码阅读指南-10的更多相关文章

  1. 自己动手写Android插件化框架,让老板对你刮目相看

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由达文西发表于云+社区专栏 最近在工作中接触到了Android插件内的开发,发现自己这种技术还缺乏最基本的了解,以至于在一些基本问题上浪 ...

  2. 《Android插件化开发指南》勘误

    一些常识: 1)全书70个代码例子中,涉及到插件的例子,请先assemble插件的项目,这会在HostApp项目中生成assets目录,并在该目录下plugin1.apk.这样,HostApp才能正常 ...

  3. 包建强的培训课程(10):Android插件化从入门到精通

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  4. 《Android插件化开发指南》面世

    本书在京东购买地址:https://item.jd.com/31178047689.html 本书Q群:389329264 (一)这是一本什么书 如果只把本书当作纯粹介绍Android插件化技术的书籍 ...

  5. 有关Android插件化思考

    最近几年移动开发业界兴起了「 插件化技术 」的旋风,各个大厂都推出了自己的插件化框架,各种开源框架都评价自身功能优越性,令人目不暇接.随着公司业务快速发展,项目增多,开发资源却有限,如何能在有限资源内 ...

  6. Android插件化开发之解决OpenAtlas组件在宿主的注冊问题

    OpenAtlas有一个问题,就是四大组件必须在Manifest文件里进行注冊,那么就必定带来一个问题,插件中的组件都要反复在宿主中注冊.像Service,ContentProvider等组件眼下没有 ...

  7. Android插件化(三)载入插件apk中的Resource资源

    Android载入插件apk中的Resource资源 简单介绍 怎样载入未安装apk中的资源文件呢?我们从android.content.res.AssetManager.java的源代码中发现,它有 ...

  8. Android插件化(二):使用DexClassLoader动态载入assets中的apk

    Android插件化(二):使用DexClassLoader动态载入assets中的apk 简单介绍 上一篇博客讲到.我们能够使用MultiDex.java载入离线的apk文件.须要注意的是,apk中 ...

  9. Android插件化的兼容性(上):Android O的适配

    首先声明,<Android插件化开发指南>这本书所介绍的Android底层是基于Android6.0(API level 23)的,而本书介绍的各种插件化解决方案,以及配套的70多个例子, ...

随机推荐

  1. jQuery学习-事件之绑定事件(六)

    在jQuery中,为了屏蔽event对象在各浏览器中的差异性,它使用了自定的Event对象,如下:  1 jQuery.Event = function( src, props ) {  2      ...

  2. POJ 3481 Double Queue STLmap和set新学到的一点用法

    2013-08-08 POJ 3481  Double Queue 这个题应该是STL里较简单的吧,用平衡二叉树也可以做,但是自己掌握不够- -,开始想用两个优先队列,一个从大到小,一个从小到大,可是 ...

  3. openstack中文文档

    http://www.openstack.cn/p392.html   openStack Hacker中文文档 http://docs.mirantis.com/fuel-dev/develop/a ...

  4. ORACLE 如何查询被锁定表及如何解锁释放session

    ORACLE EBS操作某一个FORM界面,或者后台数据库操作某一个表时发现一直出于"假死"状态,可能是该表被某一用户锁定,导致其他用户无法继续操作 --锁表查询SQLSELECT ...

  5. Java面试题Tomcat的优化经验

    一.掉对web.xml的监视,把jsp提前编辑成Servlet.有富余物理内存的情况,加大tomcat使用的jvm的内存 二.服务器资源 服务器所能提供CPU.内存.硬盘的性能对处理能力有决定性影响. ...

  6. @Html.ValidationSummary()的使用

    @Html.ValidationSummary()用于返回表单在后台验证的结果. 如, 当后台if (ModelState.IsValid)失败后,错误信息就会显示到 @Html.Validation ...

  7. Maven命令行创建web项目,并部署到jobss当中(解决No plugin found for prefix 'jboss-as' in the current project and in the plugin groups [org.apache.maven.plugins,问题)

    首件创建项目:此处可参照:http://maven.apache.org/guides/mini/guide-webapp.html mvn archetype:generate -DgroupId= ...

  8. response.getWriter().write()与out.print()的区别 (转)

    来自:http://www.cnblogs.com/zhwl/p/3623688.html 1.首先介绍write()和print()方法的区别:  (1).write():仅支持输出字符类型数据,字 ...

  9. Java 之HashMap.values()方法误用

    1.出错 今天在测试代码的时候发现程序报错,看代码才知道是使用HashMap.values()方法的时候出错.因为项目中需要获取Map的值的集合然后进行遍历,所以就很自然的调用了HashMap.val ...

  10. 树 -- AVL树

    前言 通过之前对二叉查找树的讨论,我们知道在给定节点数目的情况下,二叉树的高度越低,查找所用时间也就越短. 在讨论红黑树的时候,我们说过红黑树并非完全"平衡"的二叉树,只是近似&q ...