作者简介:
沈哲,擅长移动端、互联网后端技术,曾经在安硕信息、decarta(已被uber收购)、京东商城等国内外知名软件公司、互联网公司工作。开发过decarta第一款地图导航app,今夜酒店特价app,负责过京东到家上海的移动端团队。现负责魔窗移动端团队,负责研发魔窗的sdk以及移动端相关产品。
本人自2015年9月底加入魔窗,开始着手优化魔窗移动端sdk的工作。
魔窗是基于Deep Link技术的开放平台,通过提供生态落地最后一公里的deep link、跨App store渠道的归因分析以及场景还原(deferred deep link)等解决方案为App开发者构建一个去中心化的高效连接时代。最重要的产品就是iOS和Android端的SDK。
sdk优化过程,是一段血泪史,可以吐槽的地方无数。移动端sdk不像app一样方便,sdk发布后出现任何问题,都会影响到很多家的app。不能像一家app一样,可以及时发布一个hotfix,或者强制升级app,又或者热更新app。所以sdk发版之前,必须经过严格的测试,每一次sdkhotfix的发布都会对我们的用户造成严重的影响。
sdk的优化,最大的痛点是它的大小。每次对接客户,他们都会问我们sdk的大小是多少?每当提到iOSsdk时,他们都会说还蛮大的,他们自己家的app都已经几十M了,接入我们的sdk会增加他们app的大小。所以,不得不开始痛苦的sdk优化之路。
我们主要从以下几个方面进行优化sdk:
1. 脚本构建
2. 极限优化(网络、日志上报、图片格式等方面优化)
3. 第三方组件替换
4. 小版本稳步迭代
脚本构建
我们从开始开发sdk到目前正在开发中的3.8版本,一直推崇借助脚本进行自动化打包,例如android使用gradle。借助脚本的好处在于:
1)androidsdk混淆
2)自动生成文档,便于开发者查阅,例如android可以很方便的生成javadoc文档
3)androidsdk上传aar包,iOSsdk发布到cocoa-pods,便于开发者集成
4)节省人工时间,减少出错
脚本通常能帮助我们实现很多自动化的事情,能提高工作效率的方法是一定会被采纳的。
接下来我们来看看借助gradle如何实现sdk混淆,核心的task是proguardJar这个task。