模块化

apkplug主题皮肤切换之通用主题-04

南笙酒味 提交于 2019-12-03 05:16:41
该文章基于V1.6.9版本 apkplug主题切换有两个层次的切换,这篇文章只讲解通用主题切换层次 一 何为通用主题切换 apkplug通用主题切换可以简单的理解为一套可动态替换的系统主题(由主题包提供)。它是apkplug在系统主题与应用activity主题之间新增的一层主题样式。它们之间有叠加关系 注:系统主题只支持对Button,ListView,Activity背景等已定义的系统控件样式进行切换,普通应用可通过(Activity.setTheme())设置系统或自定义主题。 二 apkplug通用主题的作用 由以上图示,我们可通过一些设置实现动态替换一些系统控件的样式,Button,背景图片,字体,颜色,大小等。 三 apkplug通用主题方案设置流程 1.主题包按照安卓主题设计流程设计一套主题样式如: <style name="AppTheme_Default" parent="@android:style/Theme.Light"> <!--Button样式 --> <item name="android:buttonStyle">@style/ButtonStyle</item> <!--activity 背景 --> <item name="android:windowBackground">@drawable/rootblock_default_bg</item>

apklug插件托管服务开发教程之按条件查询云端插件-01

此生再无相见时 提交于 2019-12-03 03:40:36
注:本文是基于托管服务TuoCloudService1.0.0讲解的 项目地址为 http://git.oschina.net/plug/ApkplugCloudServiceDemo 一,插件托管服务支持的功能 v1.0.0支持的功能如下: 注:它们都是以OSGI服务对外提供服务的,关于OSGI可百度查询,但同时我们提供模板代码,我们希望大家可以利用模板代码渐进式的学习 < apkplug中OSGI服务基本原理 > 1.插件托管: 开发者可将宿主应用与插件上传到服务器上,并随意绑定宿主与插件的对应关系。 2.客户端多条件查询: OSGI服务名:" com.apkplug.service.SearchApp. appSearch " 目前支持的插件查询条件有 插件名(appname) 设置的关键词(b_keywords) 可按插件添加日期排序 注:插件必须与宿 主绑定才可被查询到 3.插件版本状态查询: OSGI服务名: com.apkplug.service.update. checkupdate 可批量查询该宿主对应的插件版本状态 4.插件文件下载: OSGI服务名:"com.apkplug.service.download. AppDownload " 通过查询(2)或插件版本更新功能(3)可获取appBean,通过它可下载插件文件。 二,宿主应用集成插件托管服务 1

android插件化-apkplug框架基本结构-01

僤鯓⒐⒋嵵緔 提交于 2019-12-03 03:40:26
由于框架开发更新频繁的原因一直都没有时间写出框架的基本架构让大家云里雾里的,现在框架已基本稳定和完善,我就抽出时间写写关于apkplug框架的基本架构和原理,同时也跟大家一起研究利用apkplug框架玩出更新的功能。 一 apkplug的基本架构 apkplug简单的说是一个容器它将apk文件解析并映射成Bundle ,下文我们简称Bundle为插件。如下图 每一个apk插件被映射到apkplug框架中就是一个Bundle对象,完整路径为 org.osgi.framework.Bundle 。通过这个Bundle我们能获取到插件的基本信息(本身静态属性)。 二 插件的基本结构 apkplug中的插件与OSGI标准靠齐,所以你也可以参考OSGI标准里面对Bundle的描述。不过apkplug框架还添加了一些特殊的属性(面向android) 1.插件状态: 插件状态可以通过Bundle.getState()获取 1.Bundle.UNINSTALLED 插件还未被安装(可能已卸载还为清理) 2.Bundle.INSTALLED 插件已经安装(未启动) 3.Bundle.RESOLVED 插件已经被框架正确解析(未启动) 4.Bundle.STARTING 插件正在启动(调用BundleActivator.start(BundleContext context)) 5.Bundle

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

这一生的挚爱 提交于 2019-12-03 03:40:17
本节我们将练习怎样安装(更新)一个插件。本文章基于v1.6.7版本进行说明,最新的方式以官网为准 可下载最新的apkplugdemo源码 http://git.oschina.net/plug/apkplugDemos 一 apkplug插件 apkplug插件是一个apk文件,它与普通的android APP基本相同(开发方式),本节只讲插件安装接口而插件开发将在后面的章节详细讲解 二 apkplug 插件安装服务 apkplug内嵌一个OSGI服务,所以框架大部分接口都是通过OSGI服务发布的,在这里你可以不用详细了解OSGI服务的原理,一下我们将给出调用插件安装服务的模板代码。你在开发时可以直接套用。 三 BundleControl接口 插件安装服务接口为 org.apkplug.Bundle.BundleControl // startlevel =2 isCheckVersion=true Bundle install(BundleContext context,String loaclFilePath,installCallback callback) // v1.6.7 新增接口 建议使用最新的这个调用接口 Bundle install(BundleContext context,String loaclFilePath,installCallback

android插件化-apkplug中以监听方式获取OSGI服务-09

杀马特。学长 韩版系。学妹 提交于 2019-12-03 03:40:02
我们提供 apkplug 下OSGI使用demo 源码托管地址为 http://git.oschina.net/plug/OSGIService 一 需求 通过 << apkplug中OSGI服务基本原理-08 >>我们知道怎样注册于查询OSGI Service。但查询方式必须在Service启动以后才能使用,而有时我们并不知道Service何时启动,而只需要在Service启动以后能立即获取到并使用。OSGI提供监听器的形式动态监听指定Service的注册于注销过程。 二 OSGI Service 监听代码 private ServiceReference ref=null; private printLog service=null; context.addServiceListener( new ServiceListener(){ @Override public void serviceChanged(ServiceEvent event) { switch (event.getType()) { case ServiceEvent.REGISTERED: //服务注册 if (ref == null ) { ref = event.getServiceReference(); service = (printLog) context.getService(ref);/

android同时监听所有activity生命周期状态实现

橙三吉。 提交于 2019-12-03 03:39:52
在做应用统计时我们可能需要在获取activity的生命周期状态,以前的方式是我们需要重写每一个activity的onResume() 等函数然后埋点。现在可以利用apkplug框架的activitylifecycle将所有activity状态信息收集到一个类里面,进行统一的收集。 demo代码下载地址 http://git.oschina.net/plug/apkplugBundles/tree/master/ActivityLifecycle 你可以通过apkplugdemo 本地安装的方式导入这个插件进行体验 apkplugdemo.apk 下载地址 ActivityLifecycle.apk 下载地址 效果图: 插件开发: 1.按照apkplug插件开发的基本规则加入相应的osgi1.6.3.jar ,assets/plugin.xml配置文件 (activitylifecycle功能 需Bundle.1.6.3.jar以上 osgi1.6.3.jar才有) 2.编写Activity状态信息收集类 可以在这个类中将收集到的activity状态信息保持上或传递给统计工具 public class BundleActivityLifecycleCallbacksImp implements BundleActivityLifecycleCallbacks{ @Override

android下apkplug通用主题(皮肤)切换解决方案之主题包开发-02

随声附和 提交于 2019-12-03 03:39:27
该文章是基于apkplug V1.6.8 进行说明的 我们提供了一个demo做为参考,项目下载地址为: http://git.oschina.net/plug/IMThemeDemo 该 IMThemeDemo 实现了简单的聊天泡泡切换功能,同时主题包(插件)是托管在apkplug的云服务器上的。所以要阅读项目的完整代码可以先看插件托管服务开发系列文章 < 插件托管服务开发指南 > demo运行效果图: 上一篇文章我们实现了主应用的开发,本篇应用我们开发主题包(插件)。 一,主题包说明 apkplug主题(换肤)解决方案中的主题包本质上是一个完整的apk应用程序或者说是apkplug的插件,但它有以下的不同 1.主题包对外提供主题样式资源。 2.主题包必须上传apkplug官网进行编译,生成的apk才能提供主题切换。否则即为普通apk 二,主题包(插件)搭建 1.按照普通app创建流程创建安卓工程 2.按照apkplug插件开发流程添加必要文件 < apkplug插件开发 > osgi.jar应使用osgi1.6.8.jar 3.将主应用导出的主题切换接口jar包(IMTheme.jar)导入工程 com.apkplug.imthemedemo.themeinterface.chatstyles 三,创建主题控件样式资源 与普通app开发一样,我们创建一些用于聊天泡泡按钮背景的资源

apkplug主题皮肤切换之自定义样式-05

强颜欢笑 提交于 2019-12-03 03:39:13
本文基于apkplug V1.6.9讲解 一 何为apkplug自定义样式切换 apkplug主题切换包含两个层次 1.通用主题,与系统主题相似 2.自定义控件样式切换 根据上一篇文章讲解我们可以判定通用主题有其局限性,在很多情况下我们需要替换的是与我们应用本事相结合的自定义控件样式。如QQ聊天挂件 QQ皮肤,QQ聊天泡泡等。针对这种情况我们为apkplug新设计了一套接口,以满足开发者这方面的需求。 二 自定义控件样式切换 自定义控件样式,顾名思义是我们开发者要求的自定义,因为它与开发的应用本身有关,不同的应用有不同的设计要求和格式。所以不是可提前统一定义的。 三 定义自定义控件样式替换接口 根据apkplug的要求,开发者要替换某些自定义控件的样式就应该提前定义一套替换接口(模板),主题包可以根据该模板填充相应的样式ID传递给主应用。不过apkplug并没有要求模板的定义格式唯一规定的是该模板必须是一个java interface 如下: public interface chatstyles { //我们协定如果 返回值小于0为未设置状态 //主题样式版本,如果主题样式接口有所改变就利用这来判断 public int Version(); //聊天界面右侧Item 背景样式 public int chat_right_msg_background(); /

SOFABoot源码解析之模块化开发

匿名 (未验证) 提交于 2019-12-03 00:38:01
1.SOFABoot源码解析 模块化开发 模块化开发简述 Module-Name=com.alipay.test.biz.service.impl Spring-Parent=com.alipay.test.common.dal Require-Module=com.alipay.test.biz.shared Module-Profile=dev 模块并发启动 com.alipay.sofa.boot.module-start-up-parallel=false SOFABoot Profile com.alipay.sofa.boot.active-profiles=dev Module-Profile=dev com.alipay.sofa.boot.active-profiles=dev,test Module-Profile=test,product com.alipay.sofa.boot.active-profiles=dev Module-Profile=!product com.alipay.sofa.boot.active-profiles=dev,test <?xml version="1.0"encoding="UTF-8"?> <beansxmlns="http://www.springframework.org/schema/beans" 10. 11.

前端模块化

匿名 (未验证) 提交于 2019-12-03 00:37:01
AMD规范 define( "alpha" , [ "require" , "exports" , "beta" ], function ( require, exports, beta ) { export.verb = function () { return beta.verb(); } }); https://github.com/amdjs/amdjs-api/wiki/require CommonJS规范 var a = require ( "./aaa" ); var b = require ( "./bbb" ); module . exports = { result : a + b } ES6 module import a form "./aaa" ; import b form "./bbb" ; var c = a + b; export {c} 附:AMD规范 https://github.com/amdjs/amdjs-api/wiki/AMD CommonJS规范 http://javascript.ruanyifeng.com/nodejs/module.html 文章来源: 前端模块化