引言:在“DevOps能力之屋(Capabilities House of DevOps)”中,华为云DevCloud提出(工程方法+最佳实践+生态)×工具平台=DevOps能力。华为云DevCloud将推出“DevOps on DevCloud”系列,针对DevOps领域场景,阐述该场景在华为云DevCloud上的实施方法与实践。
2019年5月7日,在Google I/O开发者大会上,Google正式宣布Kotlin成为Android app开发者的首选语言(preferred language)。Google在声明中写道:“Android开发将越来越以 Kotlin 为先。……许多新的 Jetpack API 和特性将首先在 Kotlin中提供。如果你要开始一个新项目,你应该使用 Kotlin 来写;用 Kotlin 编码通常意味着更少的代码——更少的键入、测试与维护。”
Kotlin是现代的静态类型编程语言,支持面向对象和函数式编程。Kotlin主要由俄罗斯团队JetBrains开发,名称取自圣彼得堡附件的一个小岛(Kotlin Island)。自从2017年Google I/O大会上宣布Kotin成为Android apps一级开发语言,并且在Android Studio IDE中支持Kotlin后,Kotlin的受欢迎程度持续提高。Google表示超过50%的专业Android开发人员在使用Kotlin。最新的Stack Overflow开发人员调查中,Kotlin被列为第4大最受欢迎的编程语言。
Kotlin要统治Android apps开发,不可避免地会被开发者与Java进行对比。按照JetBrains的说法,创建Kotlin的主要目标是创建一种兼容Java、编译速度至少同Java一样快、比Java更安全、比最成熟的竞争者Scala还简单。目前此说法被业界认为可以站住脚了。Kotlin的以下特性应该成为最吸引Java开发者的特性:
整洁、紧凑的语法
单一类型系统
空安全(Null Safety)
函数与函数式编程
数据类
扩展
运算符重载
高级对象与Singleton模式
既然Kotlin成为了Android apps开发的首选语言,而且具有诸多吸引开发者的特性,那么华为云DevCloud如何构建Kotlin开发的Android apps呢?
通常情况下,开发者可以在Android Studio中配置Kotlin开发环境,可以通过git将代码push到华为云DevCloud代码托管的仓库中。此开发过程与Android Java开发没有本质上的不同,因此本文将聚焦在如何进行Kotlin程序的构建上。与Android Java类似,开发者可以使用Gradle进行Kotlin Android apps的构建,从很大程度上降低了开发者的使用门槛。
Simple Gallery是一款照片视频画廊Android App,可以显示不同格式的图像和视频,例如SVG、RAW、全景照片和视频。本App完全采用Kotlin编写。Simple Gallery的详细功能可以参考Github上的相关介绍(https://github.com/SimpleMobileTools/Simple-Gallery)。
Simple Gallery
开发者可以访问华为云DevCloud(https://www.huaweicloud.com/devcloud/),登录后在首页新建项目,选择“空白项目”的Scrum或者看板之一,输入项目名称(例如:Simple Gallery-Kotlin)即可创建项目。
在访问Simple Gallery-Kotlin项目,并进入“代码”-“代码托管”后,可以点击“新建代码仓库”通过2种方式来创建代码库:(1)导入仓库,可以从Github上导入;(2)模板创建,可以用DevCloud已有模板库直接创建。为了提高创建效率,我们采用方式二“模板创建”,在搜索框中输入Gallery可以找到模板。
图 模板新建代码仓库
由于Simple Gallery项目使用了Gradle构建工具,因此开发者应该精通Gradle相关概念以及最佳实践。在此不做详述,主要厘清Gradle、Gradle Wrapper、Gradle Plugin等3个概念。
Gradle:开源的构建自动化工具,相较于Maven,Gradle在灵活性、性能、用户体验和依赖管理等方面表现更优,是Android官方的系统构建工具。
Gradle Wrapper:是对Gradle的包装,更利于在项目中使用统一的Gradle版本。开发者可以通过gradle-wrapper.properties文件来指定相应的Gradle版本。
Gradle Plugin:是为方便使用Gradle进行配置与编译而开发的插件,它跟随Gradle版本的变迁而变迁。在编译过程中,Gradle 版本需与Gradle版本匹配,否则编译就会失败。关于Gradle Plugin与Gradle的版本对应关系请参考https://developer.android.com/studio/releases/gradle-plugin.html#updating-plugin。
在使用编译构建服务前,首先确认一下Simple Gallery的Gradle、Gradle Plugin的版本。
Gradle版本:在Gradle Wrapper的配置文件gradle/wrapper/gradle-wrapper.properties中的distributionUrl指定了Gradle version为5.4。
Gradle Plugin版本:在build.gradle的classpath中com.android.tools.build:gradle指定了版本为3.4.1。
进入项目Simple Gallery-Kotlin,新建编译构建任务,在指定任务名称(例如ci-simple-gallery-kotlin)、源码仓库及分支后,系统会推荐使用“Android APK”模板。
图 新建编译构建任务-选择模板
在选择模板后,我们需要在构建任务的“构建步骤”选择合适的Gradle版本。
按照直觉,一般会选择与项目相匹配的某个Gradle版本。但显而易见,在Gradle的版本选择中,最高可以选择的版本为4.8,与Simple Gallery的Gradle版本5.4、Gradle plugin版本3.4.1不匹配。如果我们强行使用4.8版本,编译构建会报错,错误为“Mini supported Gradle version is 5.1.1.Current version is 4.8.……”。
按照Gradle Docs 5.4.1(https://docs.gradle.org/current/userguide/gradle_wrapper.html)中说明,执行任何Gradle构建的推荐方式是使用Gradle Wrapper。因此,为了构建Simple Gallery应用(或者其它Android App),我们可以不指定具体的Gradle版本,而是选择“Gradle Wrapper(推荐)”。
图 新建编译构建任务-选择工具版本
在发布Android apps时,需要对Android APK进行签名。Android APK签名有2种方式:
方式一:通过build.gradle文件配置签名信息。此种方式存在安全隐患,不推荐。
方式二:通过DevCloud编译构建服务提供的“Android APK签名”步骤。
我们在构建任务ci-simple-gallery-kotlin中添加步骤,通过搜索“Android APK签名”即可参加此步骤,然后输入Keystore文件、Keystore password、别名(Alias)、key password。这些信息会加密显示,解决了方式一的安全隐患。
图 新建编译构建任务-Android APK签名
在创建编译构建任务后,可以手工触发执行。构建任务顺利执行后,可以在“发布”-“软件发布仓库”中下载APK,并安装到手机上进行验证。
图 编译构建任务执行
Kotlin成为Android apps开发的首选语言,在构建工具上采用Gradle,大大降低了构建的门槛儿,也使得华为云DevCloud的编译构建服务(CloudBuild)能够支持Kotlin Android apps的构建。当然Kotlin不仅仅可以开发Android apps,也可以用来开发服务端应用。尽管对于Kotlin仍然很多成长的空间,然而在数字化转型时代,对于开发者来讲,Kotlin成为一种新选择,同时华为云DevCloud对Kotlin的支持,也将协助开发者走得更远。
来源:华为云社区原创 作者:伦语春秋