插件化

Android 插件化的过去-现在-未来

荒凉一梦 提交于 2020-01-09 13:50:24
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 本文原创,转载请以链接形式注明地址: http://kymjs.com/code/2016/05/04/01 第一篇文章,作为序文,并没有什么实质性内容,仅仅是一些八卦和历史,重效率的朋友可以选择直接跳过。 ##过去 三年前,一款名叫 【23code】 的应用让广大 Android 开发者都"红了眼",并不是他做的多么酷炫,论内容,他仅仅是一个自定义UI控件集合应用,真正让人捉摸不透的是他的实现,他可以直接下载一个自定义控件的demo,并且运行起来,这是我知道的最早的插件化开发的应用。 当时,Github上有一个开源的插件化框架,叫 AndroidDynamicLoader ,他使用一个 Activity 作为外壳,动态加载一个未安装apk中的 Fragment ,并通过外壳 Activity 来处理 Fragment 的全部生命周期,达到动态加载一个Android视图界面的效果。 尽管在现在看来这种实现复杂而麻烦,但在当时应该算是很先进的动态加载思路了。他应该是最早的开源 Android 插件化框架。 两年前,在 2014 年 4月,一位中国人开源了一个插件化框架,叫 DL。这个名字是作者自己取的,全名为: dynamic-load-apk 。 其实现原理是创建一个静态代理 Activity

android插件化-apkplug从宿主启动插件Activity-06

佐手、 提交于 2019-12-05 06:26:25
插件是一个apk文件它存在自己的Activity界面和UI显示,本节将讲解如何配置插件的启动Activity以及怎样从宿主启动它。 一 配置插件apk的对外启动Activity (内部activity不需要配置) 与普通app不同,插件AndroidManifest.xml配置在apkplug框架中是无效的,我们需要在plugin.xml里面配置才能被apkplug所识别 具体设置属性为 Bundle-Activity="xxx.xxx.xxx.Activity" 只有设置为Bundle-Activity的activity才能从宿主中启动,否则将报"无法找到相应类的异常" 二 设置多个外部启动Activity 如果你有多个activity需要从外部启动的话可以用,分割 如 Bundle-Activity="a.b.c,d.e.f,j.q.p" 以上配置了三个activity,可以外部启动通过插件的Bundle.getBundleActivity() 可获取到这个字符串 Bundle.getBundleActivity().split(",")[0] 分割出对应的Activity类 三 启动activity 启动插件activity的方式很多,最简单的是以原生activity启动方式进行启动 Intent i=new Intent(); i.setClassName(mContext

android插件化-监听apkplug插件安装/卸载状态-05

a 夏天 提交于 2019-12-05 06:26:05
可下载最新的apkplugdemo源码 http://git.oschina.net/plug/apkplugDemos 有时我们需要以事件的形式监听插件的安装/卸载状态等信息,如插件列表更新等场合。apkplug框架提供这样的功能并且实现简单 public void ListenerBundleEvent(){ frame.getSystemBundleContext() .addBundleListener( new SynchronousBundleListener(){ public void bundleChanged(BundleEvent event) { //插件状态改变事件 event.getType() ;//事件类型 event.getBundle();//发生事件的插件Bundle } }); } 事件类型 BundleEvent.INSTALLED; //插件安装事件 BundleEvent.STOPPED; //插件停止事件 BundleEvent.UNINSTALLED; //插件卸载事件 BundleEvent.UPDATED; //插件更新事件 来源: oschina 链接: https://my.oschina.net/u/138488/blog/263472

apklug插件托管服务开发教程之查询已安装插件版本状态-03

為{幸葍}努か 提交于 2019-12-04 06:22:07
实现项目demo http://git.oschina.net/plug/ApkplugCloudServiceDemo 实现代码 :com.apkplugdemo.adapter.UpdataActivity 一,插件版本状态查询服务 OSGI服务接口为:com.apkplug.service.update.checkupdate OSGI服务查询模板代码如下 /** * 插件版本更新OSGI服务 一次只允许最大查询20给插件的版本信息 * @param context * @param updateAppBean bean 需要查询版本的插件填充bean * @param callback 查询回调函数 */ public void checkupdate(BundleContext context,updateAppBean bean,updateCallBack callback){ ServiceReference reference=context.getServiceReference(checkupdate.class.getName()); if(null!=reference){ checkupdate service=(checkupdate) context.getService(reference); if(service!=null){ service

apkplug插件托管服务简化与简介-05

天大地大妈咪最大 提交于 2019-12-04 06:21:57
本文基于TuoClondService1.1.0讲解 apkplug插件托管服务是提供给开发者一个远程发布插件的管理平台,但v1.0.0版本接口调用有些复杂我们在v1.1.0版本中着重对其进行了简化 与封装,使开发者能更简单明了的使用这项服务。 apkplug插件托管分为两部分 云服务托管:开发者须将主应用与插件apk包上传托管服务器 查询api接口:开发者可根据该接口通过简单的调用实现插件的 查询,下载安装,更新等功能 一下着重讲解查询api接口的调用方式,关于插件上传与管理平台操作请这篇文章< 插件云端上传与管理 > 一 接口简介 1.api接口提供一个单例类ApkplugCloudAgent,开发者可通过该类完成所有功能 2. 插件托管服务接口都是以填充查询bean以及回调callback接口的形式完成的 开发者需要做的工作有 填充查询条件bean 编写查询回调接口 callback 二 导入插件托管服务jar包 三 初始化启用托管服务接口 //BundleContext context =frame.getSystemBundleContext(); //启动云服务包括插件搜索 下载 更新功能 ApkplugCloudAgent.init(context); 四 查询接口调用示例 appSearchBean bean=new appSearchBean(); /

apklug插件托管服务开发教程之上传应用到云端-04

限于喜欢 提交于 2019-12-04 06:21:48
只有上传到apkplug云端的应用才能真正使用插件托管功能 一,注册账号 开发者点击 apkplug官网 右上角的注册按钮注册开发帐号。注册完成以后可以登录进入后台插件管理平台 二,上传应用 开发者上传应用后系统会自动解析apk包并区分主应用和插件。 存在assets/plugin.xml的是插件,否为主应用 三,为应用添加(绑定)插件 四,修改插件关键词(keywords) 来源: oschina 链接: https://my.oschina.net/u/138488/blog/267567

apklug插件托管服务开发教程之下载插件-02

心已入冬 提交于 2019-12-04 06:21:38
结合上节 < 按条件查询宿主中的插件 >,本节下载并按照云端的插件。 实现项目demo http://git.oschina.net/plug/ApkplugCloudServiceDemo 实现代码 :com.apkplugdemo.adapter.SearchBundleAdapter 一,插件下载安装服务 插件下载安装服务也是以OSGI服务形式提供的,获取服务的模板代码为: //查询插件下载服务 因为该服务在框架启动时启动,所以肯定存在 ServiceReference reference=context.getServiceReference(AppDownload.class.getName()); if(null!=reference){ service=(AppDownload) context.getService(reference); } context.ungetService(reference); 二,AppDownload服务接口说明 public interface AppDownload { /** * 插件托管服务接口 * @param appBean ab 包含插件基本信息 * @param mContext android上下文 * @param callback 服务回调接口 * @throws IOException */ public

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

左心房为你撑大大i 提交于 2019-12-04 06:21:24
本文章基于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 将以上的文件加入宿主应用的libs目录下 二 AndroidManifest.xml 权限配置 插件平台需要几个基础的权限配置,请将以下的几个权限加入到工程的AndroidManifest.xml中 <!-- 插件平台需要的权限! --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> <uses-permission android:name="android.permission.INTERNET"/>

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

£可爱£侵袭症+ 提交于 2019-12-04 06:20:47
阅读本节内容前可先了解 apkplug基础教程 本教程是基于apkplug V1.6.8 版本编写 最新开发方式以官网为准 可下载最新的apkplugdemo源码 http://git.oschina.net/plug/apkplugDemos apkplugdemo演示图 一 apkplugdemo工程源码结构 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方式展示 二 阅读方式

apkplug主题切换功能简介-03

大憨熊 提交于 2019-12-04 06:19:59
apkplug主题切换是一项简单且强大的功能,它为应用实现个性化提供了可能。但由于该功能是一项创新的以前所未有的方式实现,以至于大部分 开发者无此概念,以下我们将对apkplug的主题功能基本结构和功能进行简单的说明。 注:本文是基于v1.6.9版本进行说明的,该版本在多处对开发流程进行了简化,其中就包括主题切换功能模块。 一 主题功能的层次 目前apkplug主题切换有两个层次的样式替换,它们分别是 通用主题样式 自定义控件样式 二 主题包 apkplug主题包是一个简单的apkplug插件,它包含了apk文件的所有属性和样式,而我们主题包也是以R.stlye.id的形式提供切换素材给主应用的 因此在主题开发的时候我们完全可以遵循安卓原生应用主题样式的开发形式。 三 主题包与普通插件有和不同 主题包与普通插件开发没有任何不同,只是主题包需要上传云端编译成apk文件而在本地编译的apk文件只能作为普通插件使用。 四 相关资料链接 apkplug通用主题切换详解 apkplug自定义控件样式切换详解 来源: oschina 链接: https://my.oschina.net/u/138488/blog/269236