Android Gradle Kotlin DSL 遷移

前言

18年做了大概半年的 java 開發(fā),在年底的時候把 springboot 的構(gòu)建腳本按照官方指導遷移到了 Kotlin DSL,這幾天抽空把 Android 的項目也做了遷移,中間遇到的問題做個紀錄,本文不含有太多深層次的研究,只是結(jié)合自己使用中的問題做一些備忘.

工具環(huán)境

  1. Android Studio 3.3
  2. Gradle-5.1-all
  3. 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.gradlebuild.gradle 以及 App Module 下面的 build.gradle

  1. 將三個文件
    7AB726E4-C26D-4351-B6F8-B9A3DFA0365E.png

    中的所有單引號改為 雙引號 (因為在 kotlin 中,不管是字符串還是字符串模板,都是用的雙引號)
  2. 將三個文件重命名,各自添加 .kts 變?yōu)橄旅嫒齻€文件
    BF7ACB4B-27C1-42EF-87B0-6E8FA4A0E6F6.png
  3. 接下來,就是重點各個文件的改寫了,主要是涉及到原來 gradle 中的函數(shù),成員設(shè)置,變?yōu)?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

      里面有多種寫法的,我都盡可能的用到了多種寫法(注釋掉的地方).以上就是一個新建的項目中需要改動的一般配置的地方,改完之后就可以使用了.

踩過的坑

注意,上面只是一般的寫法,現(xiàn)在是劃重點的時候.

  1. android 配置中的 signingConfigs 配置,自帶的 debug 配置,就是這一塊
    WX20190129-143659.png
    debug 是通過 getByName 來獲取然后配置的
    WX20190129-143936.png
    但是 release 不是, release 其實是自己創(chuàng)建的(上圖有), 其原因是因為 debugandroid 構(gòu)建插件自帶的配置,而 release 不是,它其實屬于我們自定義的,所以我們之前那種純 groovy 的語法寫的時候因為太過于自由,沒有認真讀過插件文檔的同學(比如我),改的時候就會一頭包.同理可得 buildTypes 塊,中間的配置也是通過 getByName 或者 create 來獲取覆蓋配置或者創(chuàng)建自己的配置
  2. 項目中我在實際編碼中用到了 org.jetbrains.kotlin.android.extensions 中的一些功能, 比如 kotlinx.android.parcel.Parcelize 中的 @Parcelize 自動序列化注解,這里面會涉及到的就是該庫中的這個實驗性開關(guān)配置 androidExtensions { experimental = true } ,如果直接改成 androidExtensions { isExperimental = true } 是不行的,會報注解找不到的錯誤.正確的改法是下面這樣
    WX20190129-145419.png
  3. 現(xiàn)在大工程一般都是不僅僅只用官方標配構(gòu)建插件了,涉及到編譯時注解,打包干預(yù)功能的都或多或少會用到其他的構(gòu)建插件,這里也貼出使用 fabric 插件的編寫方法,其他插件同理
    • 在工程的 build.gradle.kts 腳本中引用插件倉庫鏈接和 classpath 配置
      WX20190129-150019.png
    • 在 module 的 build.gradle.ktsplugins 塊,聲明插件即可
      WX20190129-150135.png

依賴統(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" 的版本號為例)

  1. 在工程的根目錄下建立如下文件夾和文件
    WX20190129-150936.png
    注意只有這個 buildSrc 目錄
  2. 里面的兩個文件 build.gradle.ktsVers 內(nèi)容如下
    • 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 構(gòu)建腳本中遇到的坑,如果有人遇到同樣的問題,可以參考一下這個配置.最后附上成功圖


WX20190129-151832.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市茫藏,隨后出現(xiàn)的幾起案子混萝,更是在濱河造成了極大的恐慌,老刑警劉巖纬向,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡郭计,警方通過查閱死者的電腦和手機政供,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門播聪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人布隔,你說我怎么就攤上這事离陶。” “怎么了衅檀?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵招刨,是天一觀的道長。 經(jīng)常有香客問我哀军,道長沉眶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任排苍,我火速辦了婚禮沦寂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘淘衙。我一直安慰自己传藏,他們只是感情好,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著毯侦,像睡著了一般哭靖。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上侈离,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天试幽,我揣著相機與錄音,去河邊找鬼卦碾。 笑死铺坞,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的洲胖。 我是一名探鬼主播济榨,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼绿映!你這毒婦竟也來了擒滑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤叉弦,失蹤者是張志新(化名)和其女友劉穎丐一,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體淹冰,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡库车,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了榄棵。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凝颇。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡潘拱,死狀恐怖疹鳄,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情芦岂,我是刑警寧澤瘪弓,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站禽最,受9級特大地震影響腺怯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜川无,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一呛占、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧懦趋,春花似錦晾虑、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽糙捺。三九已至,卻和暖如春笙隙,著一層夾襖步出監(jiān)牢的瞬間洪灯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工竟痰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留签钩,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓坏快,卻偏偏與公主長得像边臼,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子假消,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容