Gradle外掛學習筆記(四)

mymdeep發表於2019-03-03

這篇文章主要是在前幾篇文章的基礎上實現一個Android打包的外掛,所以沒看過前幾篇文章的朋友可以先檢視:

Gradle外掛學習筆記(一)

Gradle外掛學習筆記(二)

Gradle外掛學習筆記(三)


本來想將寫的外掛上傳到maven提供給大家使用,但是後來還是決定以開源庫的形式提供給大家,主要是因為

  • 網上關於Gradle功能性外掛的開源工程很少,很難找到學習資料,這個庫可以方便開發者入門,學習
  • 開發者打包需求各種各樣,由於提供的介面不夠,可能會影響開發者使用,所以,不如將原始碼提供給大家。
  • 也希望大家多多star,有什麼意見可以給我留言 demo地址

引入工程

由於並沒有上傳maven,只需要把demo工程中的buildSrc資料夾貼上入自己的工程即可使用 有問題可以issues我,或者微信公眾號給我留言: 我的公眾號:

Gradle外掛學習筆記(四)

功能介紹

這個外掛的主要功能分為三部分

打包apk

  • 打包apk提供了輸出到指定資料夾的功能
  • 打包apk提供了修改apk名字的功能
  • 打包apk提供了修改渠道或修改AndroidManifest指定欄位的功能

使用方式

修改 apk module的build.gradle

apply plugin: 'deep.app'
deep{
    name "{name}_{type}_{flavor}_deep.apk"
    path "../out"
    holder= [aaa:123,bbb:666]

}
複製程式碼
引數 描述
name 輸出的apk名字
path 指定輸出路徑
holder AndroidManifest指定替換的欄位 如上述:將AndroidManifest中的aaa替換成123,bbb替換成666

需要注意的是如果想指定名字為普通名字直接輸入字串即可,如果需要與變異模式繫結,只需要加{}:

引數 描述
{name} 當前module的名字
{type} 編譯方式,debug release或其它自定義的模式
{flavor} flavor,如果沒有自定義就沒有

效果如下:

Gradle外掛學習筆記(四)

特殊說明

可能有開發者會問,為什麼沒有提供選擇打包檔案的功能,即不同apk打包不同檔案,如果有這種需求的朋友,建議使用flavor,android提供了flavor可以很方便設定打包出不同報名不同內容的apk,如果對flavor感興趣的朋友可以給我留言,或者檢視我之前的一片文章Android工程gradle詳解

打包aar或jar

打包aar或jar提供了兩種不同形式配置

  • aar與apk類似,提供了替換Androidmanifest內容的功能
  • aar 提供了指定輸出路徑或輸出內容的功能,與apk打包一致
  • jar提供了指定混淆,指定打入內容,指定去除內容,指定打入三方依賴庫,指定輸出的功能

使用方式

apply plugin: 'deep.library'
deep {

           aar{
               name "{name}_{type}_{flavor}_deep.aar"
               path "../out/aar"
               holder= [aaa:123,bbb:666]
           }
    jar{
                name "{name}_{type}_{flavor}_deep.jar"
                path "../out/jar"
                excludeClass=['com/deep/test/exclude.class']
                excludePackage=['exclude']
                isProguard true

                includeJar = ["libs/open_sdk_r5923_lite.jar"]
            }
   }
複製程式碼

aar中引數說明:

引數 描述 備註
name 輸出的aar名字 特殊引數與apk一致,這裡不做贅述
path 指定輸出路徑
holder AndroidManifest指定替換的欄位 如上述:將AndroidManifest中的aaa替換成123,bbb替換成666

效果如下:

Gradle外掛學習筆記(四)

jar中引數說明:

引數 描述 備註
name 輸出的jar名字 特殊引數與apk一致,這裡不做贅述
excludeClass 打成jar,不包含的檔案
excludePackage 打成jar 不包含的package
isProguard 是否混淆
prpguardFile 混淆檔案 相對於module路徑的,不設定,預設使用proguard-rules.pro
includeJar 需要打入的三方jar

效果如下:

Gradle外掛學習筆記(四)

打包日誌功能

有的時候,我們覺得gradle的打包日誌都是英文很煩,沒用頁也看不懂,沒關係,使用這個功能可以開關日誌,或列印自己需要的日誌。 選擇使用的module,修改build.gradle

import com.deep.DeepLogger
import com.deep.DeepTimeListener
gradle.useLogger(new DeepLogger(true))
gradle.addListener(new DeepTimeListener(true))
複製程式碼

如果不想使用,只需要將引數設定為false即可:

Gradle外掛學習筆記(四)
通過這個日誌可以看出沒有Task的耗時,以及對應任務的開始關閉。 在最後會有所有任務的耗時:
Gradle外掛學習筆記(四)

這些日誌的提示內容都是可以設定: 只需要修改DeepLogger檔案,這裡面有所有任務的生命週期,只需要插入你想要的log即可。

總結

今天將外掛的所有功能介紹完畢了,如果有需求,也可以給我留言,我會再開一篇文章介紹一下程式碼,方便大家修改程式碼。

相關文章