Gradle 自定義Task 打Jar包

之前的ADT爲eclipse,所以對外提供jar時候,直接Export,選中src目錄輸出就可以了。但切到AS中的時候,就一直很囉嗦。所以,趁着晚上無聊,就研究了一下Gradle的Jar包的輸出。

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

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

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

方式1,採用的方式爲copy,也就是網上最多、最容易搜索、最重複的方式:

task makeJar(type: Copy) { 
    delete 'build/libs/App'sName.jar' 
    from( 'build/intermediates/bundles/release ')  
    into( 'build/libs')  
    include('classes.jar')  
    rename('classes.jar', 'App'sName.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/App'sName.jar'
    baseName 'App'sName'
    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/App'sName.jar'
    baseName 'App'sName'
    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之後。

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章