Kotlin语言和Gradle构建搭建SpringBoot工程

前言

最近想做一个小项目,遇到了后台开发问题,从Python、Go、Nodejs、Java、Kotlin中我对比选择了一下,最后还是决定使用自己最熟悉的Java开发,后来又想了一下,既然现在Android开发都是用Kotlin了,而且Kotlin语法这么灵活简介,为何不用Kotlin结合Gradle构建来搭建一个SpringBoot工程呢,整个过程也是本人在逐渐摸索,中间可能会遇到很多障碍和问题,但是没关系,俗话说开弓没有回头箭,因为我已经决定开始了。

Gradle构建分析与Task详解

前言

我们现在已经对如何使用Gradle来构建Android工程有了认识,并且大致了解了Groovy的语法和Maven仓库的相关知识,本篇文章计划从原理和API接口角度来分析一下我们配置的脚本文件,以及是如何工作的,只有学会了如何查看API文档才能灵活的去配置构建。

我们已经知道Gradle中待编译的工程叫project,每个project由多个task来组成,而这些task就是具体完成任务的基本单位。你是否还记得第一次使用Android Studio来创建新工程,发现里面默认有很多任务,它们是怎么来的呢?它们又能做什么呢?

Gradle构建之Groovy语法详解

前言

前面几篇基本上对Gradle构建在Android中的使用场景和流程都有了大致了解,包括如何使用以及如何自定义插件等,这些基本都是基于官方的教程引导来了解的。接下来我们通过几篇文章来深入了解一下具体的几个核心知识点,今天就以Groovy语法为切入点,接下来几篇你可能还会看到关于标准的Gradle插件、Maven插件、自定义构建等具体的知识点相关文章。

Groovy初识

在Apache的groovy-lang.org官网可以看到一句很醒目的话:

A multi-faceted language for the Java platform / 一个Java平台的多窗口语言

从这一句话中我们可以得知它的重要性,它可以帮助我们方便的使Java平台和其他语言交互,它也是一个面向对象的语言。这门动态语言拥有类似Python、Ruby和Smalltalk中的一些特性,可以作为Java平台的脚本语言使用。由于其运行在JVM上的特性,Groovy可以使用其他Java语言编写的库。Groovy的语法与Java非常相似,大多数Java代码也符合Groovy的语法规则,尽管可能语义不同。

使用Gradle自定义Android工程插件

前言

在前面几篇对Gradle的使用大致有了认识,我们在实际开发中某些情况下不仅仅需要配置构建而且需要自定义一些构建过程,这个时候就需要用到自定义Gradle插件了,自定义插件有三种方式:

  1. 在build.gradle脚本中直接使用(只在对应的gradle配置文件中使用)。
  2. 在buildSrc中使用(可在工程中随意使用)。
  3. 在独立Module中使用(可以供其他工程引用使用)。

开发Gradle插件可以在IDEA中进行开发,也可以在Android Studio中进行开发,它们唯一的不同,就是IDEA提供了Gradle开发的插件,比较方便创建文件和目录,而Android Studio中,开发者需要手动创建(但实际上,这些目录并不多,也不复杂,完全可以手动创建,而且在AS中进行创建有利于进行插件依赖的调试和功能的完善)。

Build script

在app的build.gradle最底下添加如下代码:

1
2
3
4
5
6
7
8
9
10
11
apply plugin: CustomePlugin

class CustomePlugin implements Plugin<Project>{

@Override
void apply(Project project){
project.task('CustomePluginTask') << {
println "这是一个通过自定义插件方式创建的任务"
}
}
}

发布Android项目到JCenter仓库

注册

为什么将注册单独拿出来说呢?因为这里有两个坑,不要第一步就死翘翘了。

Bintray的基本功能类似于Maven Central,一样的我们需要一个账号,点这里注册,注册前切记两件事情。

Bintray注册界面

  1. 一定要点击右边的For an Open Source Account Sign Up Here而不是左边的绿色按钮。
  2. 不管你选择新注册还是用第三方登录,如果你的邮箱是QQ或者163,都是不行的,建议用google邮箱注册。

再提醒一遍:bintary账号分为普通账号和开源账号,果然点击左边的绿色按钮,你注册的是普通账号,你就必须要加入或者创建组织才可以建立自己的仓库,关键是如果你点错了,你还删不了,非常麻烦。

Gradle在Android中的自定义用法

参考链接:

《Android Developer》
《Android Plugin DSL》

使用共享库

在Android中除了标准的SDK还存在两种库:

一种是add-ons库(位于sdk的add-ons目录下,大部分是第三方厂商或者公司开发的)
一种是optional库(位于platforms/android-xx/optional目录下,一般是为了兼容旧版本的API)

第一类库Android Gradle会自动解析,帮我们添加到classpath中。
第二类库需要我们自己手动添加到classpath中。

1
2
3
android {
useLibrary 'org.apache.http.legacy'
}

最好在AndroidManifest文件里面配置一下uses-library标签,类似于google Maps如下:

1
2
3
<uses-library
android:name="com.google.android.maps"
android:required="true"/>

Gradle构建Android工程

参考链接:

《Android Developer》
《Android Plugin DSL》

Android Gradle插件是Google专门为Android工程做的一个Gradle的第三方插件。它可以完成测试、部署、签名和分发打包apk.

关于Gradle构建原理和过程请看《Gradle构建过程浅析》

构建流程

AndroidGradle构建流程

如上图,典型的Android应用模块构建流程通常依循如下步骤:

  1. 编译器将您的源代码转换成 DEX(Dalvik Executable) 文件(其中包括运行在 Android 设备上的字节码),将所有其他内容转换成已编译资源。
  2. APK 打包器将 DEX 文件和已编译资源合并成单个 APK。不过,必须先签署 APK,才能将应用安装并部署到 Android 设备上。
  3. APK 打包器使用调试或发布密钥库签署您的 APK.
  4. 在生成最终 APK 之前,打包器会使用 zipalign 工具对应用进行优化,减少其在设备上运行时的内存占用。

顶级构建文件

1
2
3
4
5
6
7
8
9
10
buildscript {

repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.1'
}
}

Gradle构建过程概览

参考链接:

《Gradle权威指南》(京东购买)
《精通Groovy》
《Groovy官网闭包文档》
《Boyce》

HelloWorld

假设条件:

此时你已经有了JDK6.0以上版本,并配置了环境变量。
此时已经在你的电脑上安装了Android Studio并且新建了一个最简单的工程。

下载并解压:从Gradle官方网站上下载Gradle的发行包。

1
2
3
4
5
6
7
8
9
10
11
12
gradle-package
|
├─bin # Gradle可执行文件
├─doc
| ├─userguide # 用户指南(HTML和PDF两种版本)
| ├─javadoc # API文档(包括Javadoc和Groovydoc)
| ├─dsl # DSL参考指南。
|
├─lib # 库文件(jar包)
├─media # 一些资源文件(比如图标)
├─samples # 大量的样例,包括用户指南里的例子
├─src # 源代码。这些源代码仅供参考,要编译Gradle需要去下载源码发行包。

配置环境变量:

GRADLE_HOME –> ~\gradle\gradle-4.6
PATH –> %GRADLE_HOME%\bin

测试安装结果:可以通过运行gradle命令或者gradle -v来查看是否安装成功。

新建android-gradle目录,并在其中新建文件build.gradle(Gradle自带了Groovy库,因此不需要安装Groovy)

1
2
3
4
5
task hello{
doLast{
println'Hello World!'
}
}

在android-gradle目录执行命令gradle -q hello

1
2
$ gradle -q hello
>>> Hello World!

这里定义了一个任务(task),任务中执行了打印输出操作,接下来我们看看什么是任务。

Ajax Android AndroidStudio Animation Anroid Studio AppBarLayout Babel Banner Buffer Bulma ByteBuffer C++ C11 C89 C99 CDN CMYK COM1 COM2 CSS Camera Raw, 直方图 Chrome ContentProvider CoordinatorLayout C语言 DML DOM Dagger Dagger2 Darktable Demo Document DownloadManage ES2015 ESLint Element Error Exception Extensions File FileProvider Flow Fresco GCC Git GitHub GitLab Gradle Groovy HTML5 Handler HandlerThread Hexo Hybrid I/O IDEA IO ImageMagick IntelliJ Intellij Interpolator JCenter JNI JS Java JavaScript JsBridge Kotlin Lab Lambda Lifecycle Lint Linux Looper MQTT MVC MVP Maven MessageQueue Modbus Momentum MySQL NDK NIO NexT Next Nodejs ObjectAnimator Oracle VM Permission PhotoShop Physics Python RGB RS-232 RTU Remote-SSH Retrofit Runnable RxAndroid RxJava SE0 SSH Spring SpringBoot Statubar Task Theme Thread Tkinter UI UIKit UML VM virtualBox VS Code VUE ValueAnimator ViewPropertyAnimator Vue Web Web前端 Workbench api apk bookmark by关键字 compileOnly css c语言 databases demo hexo hotfix html iOS icarus implementation init jQuery javascript launchModel logo merge mvp offset photos pug query rxjava2 scss servlet shell svg tkinter tomcat transition unicode utf-8 vector virtual box vscode 七牛 下载 中介者模式 串口 临潼石榴 主题 书签 事件 享元模式 仓库 代理模式 位运算 依赖注入 修改,tables 光和色 内存 内核 内部分享 函数 函数式编程 分支 分析 创建 删除 动画 单例模式 压缩图片 发布 可空性 合并 同向性 后期 启动模式 命令 命令模式 响应式 响应式编程 图层 图床 图片压缩 图片处理 图片轮播 地球 域名 基础 增加 备忘录模式 外观模式 多线程 大爆炸 天气APP 太白山 头文件 奇点 字符串 字符集 存储引擎 宇宙 宏定义 实践 属性 属性动画 岐山擀面皮 岐山肉臊子 岐山香醋 工具 工厂模式 年终总结 开发技巧 异常 弱引用 恒星 打包 技巧 指针 插件 摄影 操作系统 攻略 故事 数据库 数据类型 数组 文件 新功能 旅行 旋转木马 时序图 时空 时间简史 曲线 杂谈 权限 枚举 架构 查询 标准库 标签选择器 样式 核心 框架 案例 桥接模式 检测工具 模块化 模板引擎 模板方法模式 油泼辣子 泛型 洛川苹果 浅色状态栏 源码 源码分析 瀑布流 热修复 版本 版本控制 状态栏 状态模式 生活 留言板 相册 相对论 眉县猕猴桃 知识点 码云 磁盘 科学 笔记 策略模式 类图 系统,发行版, GNU 索引 组件 组合模式 结构 结构体 编码 网易云信 网格布局 网站广播 网站通知 网络 美化 联合 膨胀的宇宙 自定义 自定义View 自定义插件 蒙版 虚拟 虚拟机 补码 补齐 表单 表达式 装饰模式 西安 观察者模式 规范 视图 视频 解耦器模式 设计 设计原则 设计模式 访问者模式 语法 责任链模式 贪吃蛇 转换 软件工程 软引用 运算符 迭代子模式 适配器模式 选择器 通信 通道 配置 链表 锐化 错误 键盘 闭包 降噪 陕西地方特产 面向对象 项目优化 项目构建 黑洞
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×