笔者从 2016 年初就因为公司业务需求转战 android sdk 开发, 应用插件化技术将公司 android sdk 重新翻版。先来说说需求。

由于笔者所在一家创业公司, android sdk 实际运营时间并不长, 处于业务成长阶段, 经常会面对各种需求更改以及运营通道稳定性等个方面的问题。由于种种的不稳定性, 会导致 sdk 可能会经常出现小规模修改的问题, 用户对这种行为当然是非常不满意的了。可以想象,每一次 sdk 更新商务部门的同学要扛着多少用户口水去和用户商谈,而技术部门又要承受到少商务部门同学的白眼。

为了彻底解决这种现状, 从 16 年初我就开始正式介入 android sdk 重新开发这边的工作。 需求 (1) 很明确, 就是要能够做到 一次对接。介绍一下这个需求, 一次对接, 对于正常的 sdk 开发来说是最基本的需求, 因为 sdk 就应该处于长期稳定的状态, 要不然用户不太愿意使用。 可是这对我们公司的现状来说是致命的, 恰恰是最基本的我们保障不了。为了能够留下为数可怜的那些用户们,一定要做些事情。需求 (2) 能够做到及时 升级。 当然这个 升级 的需求就是针对我们自己的现实状况, 产品处于成长期迭代的功能多少都会有。

主要的需求就是这两个。 从技术的角度仔细去分析这两个需求, 其实就是一个需求。 就是做 sdk 的 热更。笔者之前从事的是 cocos2d-x 游戏开发, 对 热更 不可谓不熟。对于移动领域的 app 开发热更技术也都是了解的, 不过都是建立在脚本语言基础上的。 如大家经常提及的 cocos2d-x/u3d lua/js, android/iOS h5等, 这些都有成熟的方案做参考, 而当时摆在我面前的却是翻阅了所有搜索引擎都没找到先例的问题。经过一番苦思冥想之后, 从自己的记忆中提取到了一个片段 - 插件化。

15 年年底的时候, 快放假那段时间翻阅 github, 看到了一个很简明的 android 插件化框架 PluginMgr。果断翻阅了当时能找到的关于 插件化 的所有技术文章, 看懂看不懂的都阅读一边。 最终还是选择了 PluginMgr。 我需要一个只需要支持 android activity 的插件化框架就可以了,另外,在 sdk 中使用也不能体积太大。它能满足我目前的所有需求。 但是缺点却也很明显, 作者当时已经在开发新的插件化框架了, 并没有太多的时间去做维护和更新, 这意味着我自己需要能够把控这个框架,这让我一度很迟疑。 经过一段时间后, 发现自己能够完全掌握所需要的技术栈。于是开始动手, 新版 sdk 框架部分开发大概一周左右,然后另一位同事加入, 帮我开发我们 sdk 业务 apk。

业务 apk 的开发是一个正常的 android 项目, 插件化框架对他开始就是个黑匣子, 他不需要关心。 在后来实际上线的时候, 我提供了一些 宿主 和 插件 交互的 api 给他替换掉以前的一些 api 调用就可以了。 最后索性将这部分封装做的彻底了点, 让他自己去调试自己的 业务 apk, 成功了就可以直接发布。

而我这边需要做的前期工作就是把 PluginMgr 做一些定制化的修改, 并修复一些原本的 bug。 然后就是做动态更新部分的, 这很好做, 完全可以把以前做过的 热更 部分拿过来做相应的改动就好了。 只不过我需要面向的是 更新 apk, 而不是原来的一个加密后的 脚本压缩包。

最终的目标就是长期维护热更和插件化壳, 需要发布新的内容或者是解决非框架bug, 就通过更新业务 apk来解决。 当然,这种技术方案也暴露出一些不好的地方, 如插件化框架对安卓不同机型的兼容问题, 我先后遇到 三星, OPPO 等不同的兼容问题。 还有就是一定要使用足够的测试去保证热更和插件壳的稳定性, 也遇到因为测试没发现的问题而导致的问题。

博客中就不涉及代码了, 主要是阐述一下自己的思路。 如有兴趣或问题, 相关探讨请联系@石头( cn.stonexy@gmail.com )。

PluginMgr https://github.com/houkx/android-pluginmgr

感谢开源领域内的同学们作出的贡献, 能够给我们不断提供技术解决方案。

插件化技术在安卓sdk开发中实际应用的更多相关文章

  1. Android插件化技术简介

    https://blog.csdn.net/io_field/article/details/79084630 可以通过反射 事先定义统一接口的方式,访问插件中的类和方法 还可以在AndroidMan ...

  2. Android插件化技术——原理篇

    <Android插件化技术——原理篇>     转载:https://mp.weixin.qq.com/s/Uwr6Rimc7Gpnq4wMFZSAag?utm_source=androi ...

  3. 深入理解Android插件化技术

    深入理解Android插件化技术  转 https://zhuanlan.zhihu.com/p/33017826 插件化技术可以说是Android高级工程师所必须具备的技能之一,从2012年插件化概 ...

  4. Android动态加载技术(插件化技术)

    No1: 插件化技术的好处: 1)减轻应用的内存和CPU占用 2)实现热插拔,即在不发布新版本的情况下更新某些模块 No2: 插件化方案必须要解决三个基础性问题:资源访问.Activity生命周期的管 ...

  5. Android 插件化技术窥探

    在Android 插件化技术中(宿主app和插件app设置相同的sharedUserId),动态加载apk有两种方式: 一种是将资源主题包的apk安装到手机上再读取apk内的资源,这种方式的原理是将宿 ...

  6. gulp自己主动化任务脚本在HybridApp开发中的使用

    眼下做前端开发的同学可能都熟悉grunt.fis之类的自己主动化构建工具.事实上在HybridApp开发中我们也能够使用这些工具来简化我们的工作.gulp就是一个比grunt,fis都先进的构建工具. ...

  7. 关于安卓sdk开发环境的的更新-Android SDK下载和更新失败

    由于特别原因,我们更新安卓sdk时不会成功.解决办法: 修改C:\Windows\System32\drivers\etc\hosts文件.添加一行:74.125.237.1       dl-ssl ...

  8. 百度安卓sdk开发

    一 key问题 1 在百度地图api控制台申请key的流程主要用到了app包,开发工具的开发sha1和发布sha1值,这2个值的获取就非常关键了. 一般来说我们都是在windows上开发安卓,使用an ...

  9. H5对安卓WeView开发中的影响

     1.body,或者html 高度为100% 会导致下拉直接触发原生的刷新控件,而不是webView滑动到顶部后刷新,以及不会执行onScrollChanged 方法,并且getScrollY 总是返 ...

随机推荐

  1. Android WebView 开发详解(一)

    转载请注明出处  http://blog.csdn.net/typename/article/details/39030091 powered by meichal zhao 概览: Android ...

  2. 应付系统选项 Payables Options

    (N) AP > Setup > Options > Payables Options应付系统选项设置整个应付系统使用的控制项和默认值.我们可以在此窗口中设置默认值,从而简化供应商输 ...

  3. keytool 错误: java.io.FileNotFoundException: 拒绝访问

    keytool 错误: java.io.FileNotFoundException: 拒绝访问 打开命令行,切换到D:\AndroidStudioProjects\MyApplication\app目 ...

  4. jquery ajax cache的问题

    function test()        {            $.ajax({                type:'GET',                url:"tt. ...

  5. [POJ 1151] Atlantis

    一样的题:HDU 1542 Atlantis Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 18148   Accepted ...

  6. BrnShop开源网上商城第四讲:自定义插件

    重要通知:BrnShop企业版NOSQL设计(基于Redis)已经开源!源码内置于最新版的BrnShop中,感兴趣的园友可以去下载来看看.官网地址:www.brnshop.com. 好了现在进入今天的 ...

  7. MySql定位执行效率较低的SQL语句

    MySQL能够记录执行时间超过参数 long_query_time 设置值的SQL语句,默认是不记录的. 获得初始锁定的时间不算作执行时间.mysqld在SQL执行完和所有的锁都被释放后才写入日志.且 ...

  8. HDU5649 DZY Loves Sorting 线段树

    题意:BC 76 div1 1004 有中文题面 然后奉上官方题解: 这是一道良心的基础数据结构题. 我们二分a[k]的值,假设当前是mid,然后把大于mid的数字标为1,不大于mid的数字标为0.然 ...

  9. Java笔记(二十四)……集合工具类Collections&Arrays

    Collections 集合框架的工具类,方法全部为静态 Collections与Collection的区别 Collection是集合框架的一个顶层接口,里面定义了单列集合的共性方法 Collect ...

  10. bzoj 1880 [Sdoi2009]Elaxia的路线(最短路+拓扑序)

    Description 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间.Elaxia和w**每天都要奔波于宿舍和实验室之间, ...