自定義task生成jar包
阿新 • • 發佈:2019-01-03
背景:之前轉載過別人的在build.gradle中自定義task來打Jar包的文章
文章地址:http://blog.csdn.net/u010479969/article/details/76096162
如果是簡單的單一工程需求,這個完全可以滿足,但是作為如果想要支撐全公司的業務,這樣就有一些麻煩了,如果公司有十個產品線,則需要十個產品線都加入這些程式碼,感覺還是挺麻煩的
所以想要開發自定義gradle外掛,來實現這個功能,接入成本會降低一些.
好久沒有寫自定義外掛了,所以這裡記錄下來,也是防止以後忘記。
首先記錄一下,我們常規開發gradle外掛的套路,
1.建立extensions來傳遞資料
package com.plugin.buildtool import org.gradle.api.Project /** * */ class ProviderJarPluginExtension { def archiveName = "provider.jar" def srcClassDir = "" ProviderJarPluginExtension(Project project){ archiveName = project.name+".jar" srcClassDir = project.buildDir.absolutePath + "/intermediates/classes/release" } }
project.extensions.create('providerJar', ProviderJarPluginExtension,project)
2.加入task
project.task(ProviderJarTask.NAME,type:ProviderJarTask, dependsOn: 'assembleRelease')
3.建立task
import org.gradle.api.tasks.bundling.Jar /** * */ class ProviderJarTask extends Jar { static final String NAME = "providerJar" String archiveName String srcClassDir ProviderJarTask() { group = "hummingbird" description = "" if(archiveName == null){ archiveName = project.providerJar.archiveName } if(srcClassDir == null){ srcClassDir = project.providerJar.srcClassDir } from(srcClassDir) } }
這樣就可以完成一個外掛話開發
然後
./gradlew providerJar
就會在build/libs/下生成project.name.jar檔案,
我們也可以,將jar包移動到我們需要的目錄下,
擴充套件:我們還可以增加過濾等手段來處理我們的jar包
擴充套件:增加過濾的檔案型別,例如,過濾掉某些R.class型別檔案
ProviderJarTask() { if(srcClassDir == null){ srcClassDir = project.providerJar.srcClassDir } if(archiveName == null){ archiveName = project.providerJar.archiveName } from(srcClassDir) String packageName = project.android.defaultConfig.applicationId //獲取當前工程包名 String p = packageName.replace('.',File.separator); //將包名轉化為路徑 exclude{ if(!it.path.startsWith(p)){ //當前包名下的R不過濾,其他的R統統刪掉 it.name.endsWith('R.class'); } else { return false } } exclude { if(!it.path.startsWith(p)){ it.name.startsWith('R$'); } else { return false } } }