Demo Show | 蚂蚁金服 mPaaS IDEA 插件实践

前言

本文将结合上周在 JetBrains 开发者大会分享的《mPaaS IDEA 插件实践》,深入展开 mPaaS 在 IDEA 插件开发之路上踩过的坑和沉淀的思考,希望能够带来一些参考性:

  • mPaaS 冷启动过程如何通过工具选择优化接入成本
  • IDEA Plugin 开发过程中踩过的坑
  • 思考未来 Code&Build 效率的提升

开篇介绍 mPaaS

移动开发平台(Mobile PaaS,简称 mPaaS)是源于支付宝 App 的移动开发平台,为移动开发、测试、运营及运维提供云到端的一站式解决方案,能有效降低技术门槛、减少研发成本、提升开发效率,协助企业快速搭建稳定高质量的移动 App。

筚路蓝缕以启山林

mPaaS 冷启动时的接入成本优化

这是对 mPaaS 刚启动并对外服务的时候,项目组开发资源的真实描摹。
在当时,四五个工程师需要 hold 如此庞大的框架并且支撑对外能力输出。对于一群熟悉 C 端业务的程序员而言,挑战不言而喻。这个时期我们基本面临两个问题:

  • 客户来源从哪里来?
  • 如何进一步简化客户接入成本

接下来我们着重围绕「如何简化客户接入成本」展开讨论,主要为两部分:

  • Code
  • Build

所以,我们在 Android 端,选择了 IDEA Plugin 作为切入点。

工欲善其事,必先利其器:选择 IDEA Plugin
IDEA 作为 Android 开发的工具平台,提升了 Android Coding 的效率和程序员 Coding 的幸福感。
当 mPaaS 团队开始对外提供产品服务的时候,我们希望达成一个愿景就是:simple code and simple build。
IDEA Plugin 无疑是 mPaaS 简化 Android 接入成本的不二选择。

山穷水复

如何克服 IDEA Plugin 开发过程中踩过的坑

在开发 IDEA Plugin 过程中,我们遇到两方面的挑战:

  • 遇到所有应用开发过程中都会遇到的问题,API 接口稳定性
  • code everything 和 build erverything 的统一

API 接口稳定性

mPaaS IDEA 插件是基于 Android Studio Android Plugin 之上的一层插件封装。
在基于 Android Studio Plugin 以及 IDEA 开发过程中,最大的困扰来来自于 API 不稳定、修改频繁,
例如: Gradle build 、Install apk等功能的api在Android studio  2.1x 版本和 3.x 版本实现完全不同。(参见后文API变化列表)。

Code Everything and Build Everything

mPaaS 存在若干组件,组件之前的关系如图所示

所以不能采用传统的 maven 树状依赖传递,只能采用依赖图的方式传递依赖。Gradle、Maven 等工具树形依赖显然不能满足要求。

柳暗花明

解决依赖问题

  1. 为了兼容不同的 Android Studio,我们写 20+ 适配器,只为兼容 Android Studio 新版本的 API

以下仅是部分 API 变化,供参考:

API3.0.13.1.03.1.23.1.43.23.2.x
GradleRequest默认constuctor默认constuctor默认constuctorconstuctor with fileconstuctor with file默认constuctor,but but classpath 不一致
Gradle InvokerGradle Build invokerGradle Build invokerGradle Build invokerGradle Build invokerGradle Build invokerGradle Build invoker,classpath 不一致
Import Gradle ProjectNewProjectImportGradleSyncListenerNewProjectImportGradleSyncListenerNewProjectImportGradleSyncListenerNewProjectImportGradleSyncListenerGradleSyncListener
  1. 依赖问题解决:对于一个非树状的依赖关系谱来说
    在依赖的添加的路上我们经历了「手动编写依赖文件」和「Gradle & IDEA 结合」两个阶段,而我们更希望能够继续演进到第三阶段:工具具备自主提示功能。
  • 2.1. 经历过手动编写依赖文件

    这一阶段,就是给一份带有标注的文件,操作依赖文件即可
    
  • 2.2. Gradle & IDEA 结合

    
    目前我们正处于这一阶段,对每一次将要发布的依赖,我们写了一个基于 Dex 产物的依赖分析器,分析 Bundle 之间的依赖关系。
    
    这个依赖分析器能够根据实现定义好的依赖切分规则,将所有Bundle切分成若干Bundle组。如图所示
    
  • 2.3. Looking forward

    我们希望的终极阶段是:能够将用户接入体验尽可能地提升,并且工具方面有一部分自主提示的功能。如果大家有好的思路和想法,欢迎和我们一起交流。
    

Demo Show:

演示如何运用 mPaaS IDEA Plugin 创建工程

IMAGE ALT TEXT

进一步了解 mPaaS 开发环境配置和应用创建流程,参考文档:
https://tech.antfin.com/docs/2/51725


演示如何运用 mPaaS IDEA Plugin 生成无线保镖图片

IMAGE ALT TEXT

进一步了解图片加密,参考文档:
https://tech.antfin.com/docs/2/85833


演示如何运用 mPaaS IDEA Plugin 接入热修复能力

IMAGE ALT TEXT

进一步了解 mPaaS 热修复功能,参考文档:
https://tech.antfin.com/docs/2/85898

灯火阑珊

如何优化 Code&Build 效率的思考

  • 5.1 Fisrt about API or about Plugin

对于一个蓬勃兴起的开源项目来说,快速迭代和 API 稳定性之间似乎有难以弥合的矛盾。历史包袱恰是 API 稳定性的产物,很多人眼中,Api稳定性会导致历史包袱沉重,但是对于 IDEA Plugin 来说,不稳定的 API 带来的是插件碎片化。这个版本可以支持的能力,下一个小版本却又不一定可以。组件化,容器化盛行的今日,我们是不是可以将每一个 Plugin 作为一个 OSGi 的服务提供出去,保证服务的稳定性,从我的角度理解会比维持接口稳定性简单的多。

  • 5.2 Code and Build:

Code 和 Build 是工程师的左右手,左手 Code,一行有一行,右手 Build 一次又一次。
IDEA 拥有 Android、Python、Go、Web 和 C/C++ 等众多 IDE 分支,可谓是 Code Everything 的代表。
Gradle 的 Solgan 是 build ererything。
那是否 IDEA 和 Gradle 可以有更加良好的协作方式,在 Build error and error 重重包围下,解放程序员,让程序员花费更多的时间在 Code 上。
让我们拭目以待。

往期阅读

《支付宝客户端架构解析:iOS 容器化框架初探》

《支付宝客户端架构解析:Android 容器化框架初探》

《支付宝客户端架构解析:Android 客户端启动速度优化之「垃圾回收」》

《支付宝客户端架构解析:iOS 客户端启动性能优化初探》

关注我们公众号,获得第一手 mPaaS 技术实践干货
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值