1. 程式人生 > >android實現gradle動態依賴打包

android實現gradle動態依賴打包

一、gradle基本知識

gradle是基於Groovy語言的,一個Android Project專案基本會生成三種gradle檔案:module gradle、project gradle 和 setting gradle

這裡寫圖片描述
- module gradle一個模組有一個,如 上圖所示app.gradle和firstflavor.gradle。該gradle是配置本模組資訊的
- project gradle如圖中QQView,該gradle配置專案的總的資訊
- setting gradle如圖中Settings,指定專案所使用的模組

二、使用gradle隱藏敏感簽名信息

  1. 在根目錄建立keystore.properties檔案,在檔案裡面配置簽名信息
  2. 在主模組的gradle檔案中載入properties檔案中的簽名信息
  3. 在簽名配置中使用properties例項代替原來簽名

    這裡寫圖片描述

這裡寫圖片描述

三、使用buildType和flavor

buildType和flavor可以對mudule進行絕大多數的配置,也是動態依賴的關鍵
在AS左上角File->Project Structure->可以找到buildType和Flavor的快捷配置
包含了許多常見的引數
這裡寫圖片描述

這裡寫圖片描述

這裡寫圖片描述

其中SigningConfig可以在Singning裡面配置好籤名資訊。VersionName Suffix和ApplicationId Stuffix分別表示版本資訊的字尾名和包名的字尾名

有些引數在buildTypes和Flavor都可以配置,但是如果重複了會被buildTypes中的代替,如buildConfigField,該引數可以配置常量,然後在程式碼中使用Build.IBS引用。

可以看到,buildTypes有debug,realease,還可以有其他許多不同的配置,Flavor也是同樣的道理,也就是總共有buildtypes種類×Flavor種類的組合,可以利用這個組合進行多渠道打包編譯和定製。
這裡寫圖片描述

差異化打包一

在mudule目錄的src目錄下右鍵新建JavaFolder檔案,會有多個選項可以選,分別對應debug,release,和其他多組合。建完檔案以後可以在裡面使用與main檔案相同的xml資原始檔,編譯打包時會覆蓋原來的main資原始檔,從而實現動態打包。比如可以更改mipmap檔案中的icon,不同的打包會有不同的應用圖示。

差異化打包二

新建一個module,名字與所定義某一個flavor相同,在模組的gradle檔案中配置好版本資訊後,同樣更改所要替換的資原始檔,不過,需要刪除main檔案中的同名檔案,否則無效。這與上面一種方法不同

差異化編譯三

使用compile實現差異化打包

這裡寫圖片描述

這裡寫圖片描述

預設先使用compile編譯,testCompile為單元測試的,xxxCompile表示再按照flavor偏好編譯。當使用module作為依賴庫時,只需compile project ‘:library’或者xxxCompile project ‘:library’即可,當使用module作為flavor動態編譯時(上面方法差異化打包二),需要module與flavor同名,並且需要使用xxxCompile project
(xxx為flavor名字),還需要刪除主模組中重名的檔案才可以。

關於使用變數

在manifest可以使用鍵值對用於Application或者Acticity中,然後在程式碼中訪問。

這裡寫圖片描述

這裡寫圖片描述

其中,${APP_NAME_THIS}使用EL表示式也類似kotlin中字串存在的用法,manifest中的${xx}變數的值配置在flavor和buildTypes時表示為

manifestPlaceholder = [APP_NAME:"name"(value)]

${xx}為gradle中變數時,如compile’xxx’需要變為compile “xxxx${xx}”,然後在project中配置值
這裡寫圖片描述

這裡寫圖片描述

大致就是這樣,自己本人對於gradle還比較陌生,算是做做筆記,再接再厲。