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
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 在 Android Studio 構建的項目中,基于 Gradle 進行項目的構建,同時使用 Android DS...
    Ant_way閱讀 7,413評論 0 16
  • 說明 本文主要介紹和Gradle關系密切、相對不容易理解的配置,偏重概念介紹。部分內容是Android特有的(例如...
    jzj1993閱讀 15,701評論 1 62
  • Android開發工具 Android Studio Android開發環境,基于IntelliJ IDEA,谷歌...
    奈何心善閱讀 2,357評論 1 18
  • 題外話---關于永生的,看過一本閑書,其中一段話記憶如新:不老藥是禍,生老病死,最終變成奢望。萬家燈火看了兩千年,...
    大夢張吉玲閱讀 192評論 0 0
  • 一開始充滿著大叔與小蘿莉之間的趣事,就能感受到大叔對這個走散的小女孩很關心疼愛,但到了后面開始要送小蘿莉回國,因為...
    阿穎sxcw閱讀 483評論 0 0