1. 程式人生 > >Gradle 自定義Task 打Jar包

Gradle 自定義Task 打Jar包

ask cef resource pro 等等 點心 copy gradle ren

可以作為Jar包內容的有兩個地方:

1: build/intermediates/bundles/release/ 下的classes.jar

2: build/intermediates/classes/release/ 下 你的工程目錄

方式1,采用的方式為copy,也就是網上最多、最容易搜索、最重復的方式:

task makeJar(type: Copy) { 
    delete build/libs/AppsName.jar 
    from( build/intermediates/bundles/release )  
    into( build/libs
) include(classes.jar) rename(classes.jar, AppsName.jar) } makeJar.dependsOn(build)

當你需要生成Jar包的時候,在命令行Terminal中,輸入gradlew makeJar
就會在 ’build/libs‘目錄下生成你命名的jar包。
但會有缺點,無法自定義的編輯我要輸入的文件和文件夾,所以,作為碼農感覺不是很爽。
(Ps: 即使可以手動的剔除不需要的文件,但是不自動話,感覺很low~)
簡要說明:task後面的makeJar 就是方法名,你可以隨意命名,到時候你執行命令的時候執行該方法就可以。至於其他deletey刪除什麽,from從哪裏讀,into到哪裏去,include包括什麽,rename要改什麽名字,exclude去除什麽,dependsOn就是依賴什麽。。。等等字面意思就是它要表達的意思。

方式2:這個是個人比較喜歡的,因為你可以更自由的選擇你想要打入jar包的文件和文件夾。

task makeJar(type: Jar) {
    delete build/libs/AppsName.jar    baseName AppsName    from(build/intermediates/classes/release)
    exclude(android/,  BuildConfig.class, R.class)
    exclude {
        it.name.startsWith(R$);
    }
}
makeJar.dependsOn(build)

這個方法很好的滿足了我的需求,稍顯不足的是有的工程會在App工程的src下面寫入’resources/xxx.properties‘文件進入配置,這樣生成的jar包就會沒有該配置文件,現在有一種比較笨的方法,就是手動的把文件拷進去。So作為碼農,這樣依舊感覺很low。。所以我們就要想另外一種方法。
我們回頭看看方式1是copy,方式2是jar的方式,所以我們可以融合一下,就解決我們的問題了。
Ps:resources 生成的文件的路徑為:

build/intermediates/sourceFolderJavaResources/release

所以我們現在需要寫兩個task

task copyProperties(type: Copy) {
    delete build/intermediates/classes/release/xxx.properties
    from(build/intermediates/sourceFolderJavaResources/release)
    into(build/intermediates/classes/release/)

}
task makeJar(type: Jar) {
    delete build/libs/AppsName.jar    baseName AppsName    from(build/intermediates/classes/release)
    exclude(android/,  BuildConfig.class, R.class)
    exclude {
        it.name.startsWith(R$);
    }
}
copyProperties.dependsOn(build)
makeJar.dependsOn(copyProperties)

當需要執行的時候,在命令行Terminal中,輸入gradlew makeJar,就可以在’build/libs ‘文件夾下面看到我們的想要的jar包了。
執行順序為copyProperties在執行build完之後,makeJar在執行copyProperties之後。

以上就是下午看了一會,更多的也是借鑒其他人的一些經驗,寫出來的一點點心得等。如有不足和雷同,請不吝指出,感謝~

Gradle 自定義Task 打Jar包