Android Gradle Kotlin DSL 迁移

前言

18年做了大概半年的 java 开发,在年底的时候把 springboot 的构建脚本按照官方指导迁移到了 Kotlin DSL,这几天抽空把 Android 的项目也做了迁移,中间遇到的问题做个纪录,本文不含有太多深层次的研究,只是结合自己使用中的问题做一些备忘.

工具环境

  1. Android Studio 3.3
  2. Gradle-5.1-all
  3. java version "1.8.0_101",AndroidStudio使用内嵌的 jdk 如果是用的 IDEA 需要关注这个版本,因为有的老一点的 java 版本, https 连不上 Gradle 插件仓库 而导致无法识别一些构建插件,遇到此类问题的请检查一下自己的 jdk 版本

一点点的说明

因为老的Groovy编写的gradle脚本(后面简称gradle)和新的Kotlin编写的kts脚本(下文简称kts)可以一起用,所以对于多Module的工程不进行进一步的说明.另外,在改动脚本的过程中,IDE 会进行多次的 index 索引工作,所以需要多一点耐心,还有在改动的过程中会出现大面积的爆红,不要惊慌,要灵活运用命令 assembleDebug --info 来查找问题

步骤

改动过程中,只是用一个新建的模板工程来进行说明,所以只针对三个文件: 工程根目录下的 settings.gradlebuild.gradle 以及 App Module 下面的 build.gradle

  1. 将三个文件
    7AB726E4-C26D-4351-B6F8-B9A3DFA0365E.png

    中的所有单引号改为 双引号 (因为在 kotlin 中,不管是字符串还是字符串模板,都是用的双引号)
  2. 将三个文件重命名,各自添加 .kts 变为下面三个文件
    BF7ACB4B-27C1-42EF-87B0-6E8FA4A0E6F6.png
  3. 接下来,就是重点各个文件的改写了,主要是涉及到原来 gradle 中的函数,成员设置,变为 kotlin 的标准语法(groovy 实在是太自由了,自由的有点混淆概念),由于分开讲的话,篇幅长且不一定有图直观,所以就直接上图了(其实也没必要从这里拷贝,因为自己改写的时候基本上都是报错的地方改一下就行了)
    • 项目的 settings.gradle.kts ,改为如下
      WX20190129-142004.png
    • 项目的 build.gradle.kts ,改为如下
      WX20190129-141619.png
    • Module 的 build.gradle.kts,改为如下三图
      WX20190129-142345.png
      WX20190129-142701.png
      WX20190129-142755.png

      里面有多种写法的,我都尽可能的用到了多种写法(注释掉的地方).以上就是一个新建的项目中需要改动的一般配置的地方,改完之后就可以使用了.

踩过的坑

注意,上面只是一般的写法,现在是划重点的时候.

  1. android 配置中的 signingConfigs 配置,自带的 debug 配置,就是这一块
    WX20190129-143659.png
    debug 是通过 getByName 来获取然后配置的
    WX20190129-143936.png
    但是 release 不是, release 其实是自己创建的(上图有), 其原因是因为 debugandroid 构建插件自带的配置,而 release 不是,它其实属于我们自定义的,所以我们之前那种纯 groovy 的语法写的时候因为太过于自由,没有认真读过插件文档的同学(比如我),改的时候就会一头包.同理可得 buildTypes 块,中间的配置也是通过 getByName 或者 create 来获取覆盖配置或者创建自己的配置
  2. 项目中我在实际编码中用到了 org.jetbrains.kotlin.android.extensions 中的一些功能, 比如 kotlinx.android.parcel.Parcelize 中的 @Parcelize 自动序列化注解,这里面会涉及到的就是该库中的这个实验性开关配置 androidExtensions { experimental = true } ,如果直接改成 androidExtensions { isExperimental = true } 是不行的,会报注解找不到的错误.正确的改法是下面这样
    WX20190129-145419.png
  3. 现在大工程一般都是不仅仅只用官方标配构建插件了,涉及到编译时注解,打包干预功能的都或多或少会用到其他的构建插件,这里也贴出使用 fabric 插件的编写方法,其他插件同理
    • 在工程的 build.gradle.kts 脚本中引用插件仓库链接和 classpath 配置
      WX20190129-150019.png
    • 在 module 的 build.gradle.ktsplugins 块,声明插件即可
      WX20190129-150135.png

依赖统一管理

很多超大型项目的依赖配置都不是分散的,而是统一管理的.之前的做法都是单独声明文件再引用或者在项目的 build.gradle 中的 buildscript 中定义,然后引用,改为 kotlin 之后,这种办法识别不了了(至少我在 buildscript 中声明 ext {} 不再可用了,单独文件还没有尝试),那么在 kotlin 中应该怎么做,其实在 kotlin 中引入了一个 buildSrc 的配置功能,该配置启用方法如下(以统一管理上图中的 "com.android.tools.build:gradle:3.3.0" 的版本号为例)

  1. 在工程的根目录下建立如下文件夹和文件
    WX20190129-150936.png
    注意只有这个 buildSrc 目录
  2. 里面的两个文件 build.gradle.ktsVers 内容如下
    • build.gradle.kts
      WX20190129-151209.png
    • Vers
      WX20190129-151240.png
  3. 同步或者编译运行一次之后,修改 "com.android.tools.build:gradle:3.3.0""com.android.tools.build:gradle:${Vers.Plugins.android}" 即可,其他依赖管理同理

以上就是在迁移 android 构建脚本中遇到的坑,如果有人遇到同样的问题,可以参考一下这个配置.最后附上成功图


WX20190129-151832.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容