Gradle插件學習筆記(四)

這篇文章主要是在前幾篇文章的基礎上實現一個Android打包的插件,因此沒看過前幾篇文章的朋友能夠先查看:android

Gradle插件學習筆記(一)git

Gradle插件學習筆記(二)github

Gradle插件學習筆記(三)bash


原本想將寫的插件上傳到maven提供給你們使用,可是後來仍是決定以開源庫的形式提供給你們,主要是由於微信

  • 網上關於Gradle功能性插件的開源工程不多,很難找到學習資料,這個庫能夠方便開發者入門,學習
  • 開發者打包需求各類各樣,因爲提供的接口不夠,可能會影響開發者使用,因此,不如將源碼提供給你們。
  • 也但願你們多多star,有什麼意見能夠給我留言 demo地址

引入工程

因爲並無上傳maven,只須要把demo工程中的buildSrc文件夾粘貼入本身的工程便可使用 有問題能夠issues我,或者微信公衆號給我留言: 個人公衆號: app

功能介紹

這個插件的主要功能分爲三部分maven

打包apk

  • 打包apk提供了輸出到指定文件夾的功能
  • 打包apk提供了修改apk名字的功能
  • 打包apk提供了修改渠道或修改AndroidManifest指定字段的功能

使用方式

修改 apk module的build.gradlepost

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

效果以下:

jar中參數說明:

參數 描述 備註
name 輸出的jar名字 特殊參數與apk一致,這裏不作贅述
excludeClass 打成jar,不包含的文件
excludePackage 打成jar 不包含的package
isProguard 是否混淆
prpguardFile 混淆文件 相對於module路徑的,不設置,默認使用proguard-rules.pro
includeJar 須要打入的三方jar

效果以下:

打包日誌功能

有的時候,咱們以爲gradle的打包日誌都是英文很煩,沒用頁也看不懂,不要緊,使用這個功能能夠開關日誌,或打印本身須要的日誌。 選擇使用的module,修改build.gradle

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

若是不想使用,只須要將參數設置爲false便可:

經過這個日誌能夠看出沒有Task的耗時,以及對應任務的開始關閉。 在最後會有全部任務的耗時:

這些日誌的提示內容都是能夠設置: 只須要修改DeepLogger文件,這裏面有全部任務的生命週期,只須要插入你想要的log便可。

總結

今天將插件的全部功能介紹完畢了,若是有需求,也能夠給我留言,我會再開一篇文章介紹一下代碼,方便你們修改代碼。

相關文章
相關標籤/搜索