SDK开发经验之自动构建

博客已经很久没有更新内容,一方面工作最近很忙,另一位方面最近在陆续把博客内容同步到公共账号,在重新整理SDK这个系列的过程中才发现关于自动构建提到的或者介绍的地方很多,但是对于自动构建具体介绍的内容很少,因此现在再补上一篇。

这里同样不会过度分析Android的自动构建工具有哪些以及他们的优缺点,为什么要使用自动构建等等。本文的侧重点还是集中在SDK的自动化构建中主要做那些工作。

Android自动构建工具

早期的Android项目使用ADT(Eclipse)来开发,当时的自动构建工具大多是用ant。随着Android Studio的兴起和google停止对ADT的支持,越来越多的项目开始使用gradle来构建。因为上面的原因,目前Android项目的自动构建也主要是使用ant和gradle。这里同样也不展开介绍ant和gradle这两种自动构建的原理和语法。

我们项目早期是使用ADT,而且当时的自动构建也是使用ant,目前已经全部转为AS + gradle,个人之前写过一篇关于SDK的Gradle构建的博客(一个存在多个模块(包含Native)的工程的gradle构建的事例(点击查看)),里面有对SDK的gradle的简单介绍,以及对应的事例代码。关于ant构建相关的内容,后续根据情况看能不能推出。

SDK自动构建包括的内容

使用自动构建最大的优势就是可以降低很多因为人为失误引起的低级错误。因此一般会先梳理版本发布前的一些检查项,然后把他们都添加到自动构建中。下面就介绍下我们的自动构建都做了什么工作:

  • 分配版本号 我们SDK早期的版本号由人工维护,因此在SDK开发经验之测试(点击查看)介绍过,我们会在版本发布的checklist里面增加版本号的确认,确保发出去版本的版本号是正确的。 目前我们最新的SDK版本中,版本号不再人工维护,因此SDK在每次正式发布前,都会去专门分配一个新的版本号。
  • 更新版本号 之前遇到过代码中版本号忘记更新的情况,因此后来在前面提到的版本发布的checklist里面 增加了版本号的人工确认,但最终还是不够方便,因此最新的版本会在编译版本前先动态修改了代码和配置文件中的版本号。
  • SDK编译 代码编译,这一步仅仅为了获取SDK相关的发布内容。
  • 生成版本信息文件 为了能第一时间确认SDK的版本相关的细节信息,我们会在SDK里面增加一个版本信息文件,里面保存SDK的构建时间、版本、对应SVN的版本以及对应svn tag的标签。这一步主要是做这部分工作。
  • 生成资源文件 生成SDK对外发布的内容、因为目前项目是AS的,为了兼容ADT的项目,因此我们会提供提供AS下的aar和ADT下的libs、jni和res。这里主要是根据之前的编译结果汇总出最总版本发布的内容。 这里不只是简单的资源的拷贝、要在SDK的jar中加入一些版本信息、构建不同的插件包或者删除一些不对外暴露的内容等都是在这里完成。
  • 生成demo工程 开发中的demo是依赖SDK的源码的,但是对外提供的demo不能用这样的方式。因此在自动构建的时候,我们会通过自动脚本生成一个独立的Demo工程,新的工程删除了对SDK的源码的依赖,而是直接使用上一步生成的资源文件。 在生成demo工程以后,直接编译生成Demo对应的APK,由于我们的demo内部使用和对外提供的并不一致,因此这里会比较复杂,先用Demo工程生成内部APK,然后删除demo中不对外暴露的内容,脚本处理代码依赖,之后再次编译生成对外提供的APK。
  • 创建SVN tag

至此编译相关的工作都已经完成,开始处理收尾工作。首先是把该版本对应的代码创建新的tag,这样后续遇到问题可以第一时间找到对应版本的代码来进行验证和问题定位。

  • 备份mapping文件

把该版本对应的混淆后mapping文件备份,方便后续问题定位时使用。

  • 生成版本包

把前面步骤生成的资源文件、demo工程、对外发布的APK以及文档等内容check到某一个位置然后集中打包为对外发布提供的版本包。后续测试以及发布都是用这个包。

SDK自动构建怎么去做

可以看到我们的自动构建涉及到的内容还是很多的,这一系列内容怎么完成呢?

在使用ant的时候,我们全部都是在ant中完成,通过不同的task任务去实现。因此当时的ant脚本还是比较复杂(之前只是简单写过一个关于ant使用SVN的文档:Ant中的SVN 使用)。在切换到gradle以后,我们上面的所有内容都是放在shell中完成,gradle仅仅是完成代码编译。这部分可以参考之前写的一个存在多个模块(包含Native)的工程的gradle构建的事例(点击查看),在里面有一个类似的事例,后续看情况把目前在用的完整的构建脚本分享出来。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏快乐八哥

搭建AngualarJS开发环境

1.选择Web浏览器 Chrome和Firefox浏览器 2.选择代码编辑器 Subline Text和Visual Studio Code 3.安装Web...

21160
来自专栏老秦求学

uefi+gpt安装双系统

17540
来自专栏七夜安全博客

OD常用断点之CC断点

13420
来自专栏杨建荣的学习笔记

PostgreSQL主备环境搭建

PG学习初体验--源码安装和简单命令(r8笔记第97天) 记得在2年前写过一篇PostgreSQL的文章,当时处于兴趣,本来想在工作中接一下PG的业务,最后因为...

47460
来自专栏JavaQ

浅谈分布式Session管理

随着Web应用系统架构的不断升级,对Session管理的需求也变得越来越高。本篇将详细总结分布式部署环境下的Session管理。 为什么要使用分布式Sessio...

38370
来自专栏PHP实战技术

想要成为Linux大神,你应该和我一样这样做!

大神终究是孤独的,在Linux这条路上,有太多的人,而我们走着走着就分离了,我们在各自的道路上按照我们自己的方法去寻找着属于我们的道路,属于我们的那一片领土! ...

33880
来自专栏编程

用python搭个web服务器玩玩(一)

如果你想成为一个优秀的开发者,你应该对日常使用的软件系统的内部结构有深入的理解,包括编程语言、数据库及操作系统、Web 服务器及 Web 框架。而且,为了更好更...

49890
来自专栏Dawnzhang的开发者手册

Postman 使用方法详解

用户在开发或者调试网络程序或者是网页B/S模式的程序的时候是需要一些方法来跟踪网页请求的,用户可以使用一些网络的监视工具比如著名的Firebug等网页调试工具。...

13620
来自专栏idba

基于consul的Redis高可用方案

这几天在研究如何做Redis的高可用容灾方案,查询了资料和咨询DBA同行,了解到Redis可以基于consul和sentinel实现读写分离以及HA高可用方案。...

34310
来自专栏我的小碗汤

nginx学习笔记

中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。 是连接两个独立应用程序或独立系统的软件。

32330

扫码关注云+社区

领取腾讯云代金券