前言
聚合類型的手遊SDK打包涉及多渠道打包,有需求是將渠道的java代碼,根據不同的需求(規則)生成不同的jar包,而不是全部都放進一個jar包中。所以需要自己寫腳本自定義打jar包。
前提
保證module 是 library
的模式
通過合併文件的方式
def zipFile = file(''build/intermediates/packaged-classes/debug/classes.jar'') // 待打包文件位置
task deleteBuild(type:Delete){
delete 'build/test.jar' // 刪除之前生成的jar包
}
task makeJar(type:Jar){
from zipTree(zipFile)
from fileTree(dir:'src/main',includes:['assets/**']) //包含assets文件
baseName = 'test.jar'
destinationDir = file('build/')
}
makeJar.dependsOn(deleteBuild,build)
註釋:
-
以上代碼塊與
android{}
平級。 -
task 標示新建一個任務。
-
type 標示該項任務的類型,可能有的類型有:
Jar\Delete\Copy等,其他的可網上查找一下,
-
dependsOn 設置task 依賴,以上代碼表示執行makeJar時,會先執行deleteBuild,再執行build,最後執行makeJar.
直接生成jar包
task makeJar(type: Jar) {
archiveName = 'test.jar' //jar包名稱
from('build/intermediates/classes/debug/**/') //需要打jar的目錄
from('XXX') // 需包含的其他目錄
destinationDir = file('build/lib') //將生成的jar存放的位置
}
複製已有的jar包
task makeJar(type:Copy){
delete 'build/sgsdk_jinshan_4.0.7.jar'
from('build/intermediates/packaged-classes/debug/')
into('build/')
include('classes.jar')
//去掉不需要打包的目錄和文件
// exclude('kingsoft_pass/', 'BuildConfig.class', 'R.class')
// exclude('sample/', 'BuildConfig.class', 'R.class')
rename('classes.jar','sgsdk_jinshan_4.0.7.jar')
}
註釋:
如果需要自定義編譯class文件,可以使用gradle的已有命令腳本compileJava。