android插件化-apkplugdemo源代码阅读指南-10

阅读本节内容前可先了解 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

时间: 2024-10-19 06:28:46

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

android插件化-apkplugdemo源码阅读指南-10

阅读本节内容前可先了解 apkplug基础教程 本教程是基于apkplug V1.6.8 版本编写  最新开发方式以官网为准 可下载最新的apkplugdemo源码http://git.oschina.net/plug/apkplugDemos apkplugdemo演示图 一 apkplugdemo工程源码结构 src |-com.apkplugdemo.adapter             --插件列表Adapter |-com.apkplugdemo.adapter.base     

android插件化-安装apkplug插件-04

本节我们将练习怎样安装(更新)一个插件.本文章基于v1.6.7版本进行说明,最新的方式以官网为准 可下载最新的apkplugdemo源码http://git.oschina.net/plug/apkplugDemos 一 apkplug插件 apkplug插件是一个apk文件,它与普通的android APP基本相同(开发方式),本节只讲插件安装接口而插件开发将在后面的章节详细讲解 二 apkplug 插件安装服务 apkplug内嵌一个OSGI服务,所以框架大部分接口都是通过OSGI服务发布的

android插件化-apkplug框架启动-02

本文章基于apkplug v1.6.7 版本编写,最新方式以官网最新消息为准 一 apkplug框架所需要的库文件(宿主) 可从http://git.oschina.net/plug/apkplugSDK  获取最新库文件 同时可下载最新的apkplugdemo源码 http://git.oschina.net/plug/apkplugDemos libs-- --libndkfoo.so   armeabi armeabi-v7a mips x86 --Bundle(版本号).jar 将以上的

Android插件化原理(一)Activity插件化

Android深入四大组件系列 Android解析AMS系列 Android解析ClassLoader系列 前言 四大组件的插件化是插件化技术的核心知识点,而Activity插件化更是重中之重,Activity插件化主要有三种实现方式,分别是反射实现.接口实现和Hook技术实现.反射实现会对性能有所影响,主流的插件化框架没有采用此方式,关于接口实现可以阅读dynamic-load-apk的源码,这里不做介绍,目前Hook技术实现是主流,因此本篇文章主要介绍Hook技术实现. Hook技术实现主要

android插件化-apkplug中OSGI服务基本原理-08

我们提供 apkplug 下OSGI使用demo 源码托管地址为 http://git.oschina.net/plug/OSGIService 一 OSGI与android Service 异同点 OSGI服务与android Service概念差不多也是Service ,Client 关系. android Service接口  --service.AIDL OSGI接口                --java interface 所以android 进程间通信Service只能传递序列

Android插件化(三)加载插件apk中的Resource资源

Android加载插件apk中的Resource资源 简介 如何加载未安装apk中的资源文件呢?我们从android.content.res.AssetManager.java的源码中发现,它有一个私有方法addAssetPath,只需要将apk的路径作为参数传入,我们就可以获得对应的AssetsManager对象,然后我们就可以使用AssetsManager对象,创建一个Resources对象,然后就可以从Resource对象中访问apk中的资源了.总结如下: 1.新建一个AssetManag

Android插件化(使用Small框架)

github: https://github.com/cayden/MySmall Android插件化(使用Small框架) 框架源代码 1. Create Project File->New->New Project... 1.1 Configure your new project 假设宿主包名为com.example.mysmall 设置Application name为MySmall 改动Company Domain为com.example.mysmall 这步是个技巧,在Step3

android插件化-获取apkplug框架已安装插件-03

上一篇文章成功的将apkplug框架嵌入了应用中并且启动 链接http://www.apkplug.com/blog/?post=10 这一篇文章实现如何获取所有已安装插件 一 获取框架的SystemBundle的上下文BundleContext apkplug框架启动会自动创建一个SystemBundle, 它是框架的第一个插件不可停止和卸载,通过它我们可以与apkplug和其他插件通信 FrameworkInstance.getSystemBundle() 便可以获取到SystemBundl

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

Android插件化(二):使用DexClassLoader动态加载assets中的apk 简介 上一篇博客讲到,我们可以使用MultiDex.java加载离线的apk文件.需要注意的是,apk中的类是加载到当前的PathClassLoader当中的,如果apk文件过多,可能会出现ANR的情况.那么,我们能不能使用DexClassLoader加载apk呢?当然是可以的!首先看一下Doc文档. A class loader that loads classes from .jar and .apk