首页 > 科技 >

从大团队并肩作战到小团队带头冲锋,苏宁App插件化应用实践(2)

2018-07-31 12:51:18 网络整理 阅读:187 评论:0

什么选择自研而不是使用开源方案?

没有完美无暇的开源方案,却有层出不穷的接入问题

移动团队在一开始选择过几种开源方案,个别方案的可用性也比较高,但是在接入之后,测试环节总会出现些疑难杂症,修复起来相对困难,一方面是源码本身的掌握成本较高,另一方面就是开源方案本身存在的缺陷。

要么另起炉灶,要么藕断丝连

现有的开源方案,要么就是对现有工程的改造较大,开发有心无力;要么就是插件工程和宿主工程相互依赖,牵一发而动全身,成本、风险都很高。

插件方案选型

基于上述种种原因,我们决定自研插件化技术,于是就有了 APNP。APNP采用的插件方案是直接加载 APK 文件(APK 格式不变,内容有所修改),原因有如下几点:

兼容性高

APK 文件的格式非常稳定,它包含一个 App 正常运行的必要资源;任何版本的 Android 系统,都应该正常解析并运行任意版本匹配的 APK 文件,无论这个 APK 文件是何时产生的;我们只要正确模仿系统加载 APK 的行为,就可以加载任意一个插件 APK 文件。

研发隔离

既然是直接加载 APK 文件,所以在 APNP 的设计方案中,每个插件都是一个单独工程,这就意味着除了最后的集成测试阶段,插件对应的整个软件生命周期都是独立的,既降低了管理、协作成本,又促使插件产品的发布更加灵活。

接入简单

既然是独立工程,无论现有的工程是如何运转的,开发者唯一要做的就是把插件工程从现有工程中抽离出来。

核心手段及原理

如果直接加载一个原始插件的 APK 文件,绝大多数情况下是无法运行的,如 Class pre-verified 异常、ResourceNotFound 等。

因此 APNP 在保持 APK 格式不变的情况下,对APK里面的内容做了针对性修改,核心手段如下:

相关文章