從零開始的Android新專案(2):Gradle 篇

markzhai發表於2016-04-15

從零開始的Android新專案(1):架構搭建篇

相信大家的專案用上gradle都已經很久了,但用得如何呢?這裡分享一下我的gradle指令碼,大部分都是去年6月左右就開始用上的,有一部分比如簽名的安全儲存則是最近才自己動手,做了令自己覺得還不錯的方案。

module型別的區分

科普小結,可能有些同學不太明白Java library module和Android library module是怎麼區分的,其實就是個plugin的區別,在module的build.gradle中:

Android application module:

Android library module:

Java library module:

版本號管理

如果只有一個application module還好,如果我們有多個module怎麼辦呢?每次改版本號累不累?

解決方案就是在root裡申明全域性變數,可以在單獨的gradle裡(比如新建一個dependency.gradle)申明然後apply from引用進來,或者直接定義在root的build.gradle中。

在子module裡面則使用rootProject.ext去進行引用:

依賴管理

那麼多第三方庫的引用,在多個module裡引用,修改起版本號來好辛苦,萬一有一個漏改了(比如gson)結果導致了異常行為,搞不好查原因查個半天,結果摔鍵盤竟然是版本號導致的。

so,和上節類似,我們需要統一定義依賴:

這裡也可以根據個人喜好把版本號也全都抽出去,我個人的實踐原則是除非引用超出1處,否則還是定義在一起。

module中使用:

這裡我還特地為一些debug和release compile不同包的定義了2個map,見leakCanary和blockCanary引用。

簽名管理

簽名是一個很敏感的東西,只要有了簽名檔案和對應的密碼資訊,就能輕易反編譯修改原始碼然後再簽名進行釋出,因此如何儲存這些敏感資訊是很重要的。

在我的個人實踐中,主要做了這麼幾點:

local.properties定義keystore資訊檔案路徑:

keystore.properties儲存keystore資訊:

buildsystem下儲存了:

application module的signingConfigs:

Java8支援

對Android的module

對Java的module:

Split APK

詳細的可以看看Google的官方文件Apk Splits

我的使用:

大致來說,就是可以根據指令碼的配置,將apk以abi、density進行分包。再也不用為了縮小包的體積而專門去只留下一個arm的jni資料夾了,想怎麼分怎麼分,搞不定哪天就要傳一個x86的包了,而且有的模擬器也只支援x86。

當然如果市場能支援這些配置,那就更好了,使用者下載apk的流量就小多了。

Module aar依賴

怎麼能在使用aar依賴提升編譯速度的同時,又能兼顧靈活性,隨時可以修改原始碼呢?

解決方案就是module式aar依賴。

在你的library module目錄下, 開啟build/outputs/aar,是不是有aar檔案(編譯過後就會生成)?把它放到module目錄下面,然後在build.gradle裡面:

再把原來那些指令碼給註釋了,就搞定了。是不是特別簡單?如果想再使用原始碼依賴,反註釋一下就好了。

總結

本篇主要講了開發階段gradle的各種實踐,下一篇講一講MVPVM的實踐。

打賞支援我寫出更多好文章,謝謝!

打賞作者

打賞支援我寫出更多好文章,謝謝!

任選一種支付方式

從零開始的Android新專案(2):Gradle 篇 從零開始的Android新專案(2):Gradle 篇

相關文章