前言
18年做了大概半年的 java 開發(fā),在年底的時候把 springboot 的構(gòu)建腳本按照官方指導遷移到了 Kotlin DSL,這幾天抽空把 Android 的項目也做了遷移,中間遇到的問題做個紀錄,本文不含有太多深層次的研究,只是結(jié)合自己使用中的問題做一些備忘.
工具環(huán)境
- Android Studio 3.3
- Gradle-5.1-all
-
java version "1.8.0_101",AndroidStudio使用內(nèi)嵌的 jdk如果是用的 IDEA 需要關(guān)注這個版本,因為有的老一點的 java 版本, https 連不上 Gradle 插件倉庫 而導致無法識別一些構(gòu)建插件,遇到此類問題的請檢查一下自己的 jdk 版本
一點點的說明
因為老的Groovy編寫的gradle腳本(后面簡稱gradle)和新的Kotlin編寫的kts腳本(下文簡稱kts)可以一起用,所以對于多Module的工程不進行進一步的說明.另外,在改動腳本的過程中,IDE 會進行多次的 index 索引工作,所以需要多一點耐心,還有在改動的過程中會出現(xiàn)大面積的爆紅,不要驚慌,要靈活運用命令 assembleDebug --info
來查找問題
步驟
改動過程中,只是用一個新建的模板工程來進行說明,所以只針對三個文件: 工程根目錄下的 settings.gradle
和 build.gradle
以及 App Module 下面的 build.gradle
- 將三個文件
中的所有單引號改為 雙引號 (因為在 kotlin 中,不管是字符串還是字符串模板,都是用的雙引號) - 將三個文件重命名,各自添加
.kts
變?yōu)橄旅嫒齻€文件
- 接下來,就是重點各個文件的改寫了,主要是涉及到原來 gradle 中的函數(shù),成員設(shè)置,變?yōu)?kotlin 的標準語法(groovy 實在是太自由了,自由的有點混淆概念),由于分開講的話,篇幅長且不一定有圖直觀,所以就直接上圖了(其實也沒必要從這里拷貝,因為自己改寫的時候基本上都是報錯的地方改一下就行了)
- 項目的
settings.gradle.kts
,改為如下 - 項目的
build.gradle.kts
,改為如下 - Module 的
build.gradle.kts
,改為如下三圖
里面有多種寫法的,我都盡可能的用到了多種寫法(注釋掉的地方).以上就是一個新建的項目中需要改動的一般配置的地方,改完之后就可以使用了.
- 項目的
踩過的坑
注意,上面只是一般的寫法,現(xiàn)在是劃重點的時候.
-
android
配置中的signingConfigs
配置,自帶的debug
配置,就是這一塊debug
是通過getByName
來獲取然后配置的release
不是,release
其實是自己創(chuàng)建的(上圖有), 其原因是因為debug
是android
構(gòu)建插件自帶的配置,而release
不是,它其實屬于我們自定義的,所以我們之前那種純 groovy 的語法寫的時候因為太過于自由,沒有認真讀過插件文檔的同學(比如我),改的時候就會一頭包.同理可得buildTypes
塊,中間的配置也是通過getByName
或者create
來獲取覆蓋配置或者創(chuàng)建自己的配置 - 項目中我在實際編碼中用到了
org.jetbrains.kotlin.android.extensions
中的一些功能, 比如kotlinx.android.parcel.Parcelize
中的@Parcelize
自動序列化注解,這里面會涉及到的就是該庫中的這個實驗性開關(guān)配置androidExtensions { experimental = true }
,如果直接改成androidExtensions { isExperimental = true }
是不行的,會報注解找不到的錯誤.正確的改法是下面這樣 - 現(xiàn)在大工程一般都是不僅僅只用官方標配構(gòu)建插件了,涉及到編譯時注解,打包干預(yù)功能的都或多或少會用到其他的構(gòu)建插件,這里也貼出使用
fabric
插件的編寫方法,其他插件同理- 在工程的
build.gradle.kts
腳本中引用插件倉庫鏈接和classpath
配置 - 在 module 的
build.gradle.kts
的plugins
塊,聲明插件即可
- 在工程的
依賴統(tǒng)一管理
很多超大型項目的依賴配置都不是分散的,而是統(tǒng)一管理的.之前的做法都是單獨聲明文件再引用或者在項目的 build.gradle
中的 buildscript
中定義,然后引用,改為 kotlin 之后,這種辦法識別不了了(至少我在 buildscript
中聲明 ext {}
不再可用了,單獨文件還沒有嘗試),那么在 kotlin 中應(yīng)該怎么做,其實在 kotlin 中引入了一個 buildSrc 的配置功能,該配置啟用方法如下(以統(tǒng)一管理上圖中的 "com.android.tools.build:gradle:3.3.0"
的版本號為例)
- 在工程的根目錄下建立如下文件夾和文件
buildSrc
目錄 - 里面的兩個文件
build.gradle.kts
和Vers
內(nèi)容如下-
build.gradle.kts
-
Vers
-
- 同步或者編譯運行一次之后,修改
"com.android.tools.build:gradle:3.3.0"
為"com.android.tools.build:gradle:${Vers.Plugins.android}"
即可,其他依賴管理同理
以上就是在遷移 android 構(gòu)建腳本中遇到的坑,如果有人遇到同樣的問題,可以參考一下這個配置.最后附上成功圖