本教程是基于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,布布扣,bubuko.com
android插件化-apkplugdemo源代码阅读指南-10
原文:http://www.cnblogs.com/yxwkf/p/3926994.html