1 2 3 4 5 |
在開發sdk生成jar在eclipse里相對比較容易操作,只要導出class時指定哪里導出就可以, 但在用AndroidStudio開發時要導出jar就沒那么容易,需要寫gradle腳本,但gradle腳本 的入門成本還是比較高,網上也有打包jar的腳本參考,但大多是通過生成classes.jar重命名 來生成,這樣生成的jar是包含工程里所有類的,有時我們需要指定一些包和類來生成jar。 下面是參考腳本: |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
task clearJar(type: Delete) { delete 'libs/sdk.jar' } task makeJar(type:org.gradle.api.tasks.bundling.Jar) { //指定生成的jar名 baseName 'sdk' //從哪里打包class文件 from('build/intermediates/classes/debug/org/cmdmac/cloud/pluginsdk/') //打包到jar后的目錄結構 into('org/cmdmac/cloud/pluginsdk/') //去掉不需要打包的目錄和文件 exclude('test/', 'BuildConfig.class', 'R.class') //去掉R$開頭的文件 exclude{ it.name.startsWith('R$');} } makeJar.dependsOn(clearJar, build) |
1 |
在build.gradle寫上后,只要在命令行執行gradle makeJar就可以在build/libs目錄下找到這個jar |
上面是個簡單的例子,只能打包某個包下面的所有文件,如果要實現只打某個包下面的某些子包或者文件可參考如下示例:
1 2 3 4 5 6 7 8 9 10 11 |
task makeSdkJar(type:org.gradle.api.tasks.bundling.Jar) { baseName 'pluginsdk' //只打包org.cmdmac下的org.cmdmac.pluginsdk.impl和org.cmdmac.gamecenter,其他子包不會被打包進去 from('build/intermediates/classes/debug/org/cmdmac/') { include 'pluginsdk/impl' include 'gamecenter' } into('org/cmdmac/') // exclude('R.class') // exclude{ it.name.startsWith('R$');} } |
wl9739 2016 年 4 月 7 日
能打包資源文件么?
Cmdmac 2017 年 6 月 30 日
學會 gradle 可以做很多
nought 2015 年 6 月 2 日
你好,請問您的 rtx 是多少???我想請教一下 android 開發相關的問題,我們是一個做 sdk 的項目組,最近打算從 ant+Eclipse 換到 gradle+AS,但是目前還不太熟悉怎么把 sdk 打包成 jar,想請教下。因為我自己查看官網的資料,像 sdk 開發這樣的情況,一般是采用 android library 的項目進行開發,再配合一個 sample 進行功能自測和演示。但是這樣要如何只把 library 部分的代碼打包成一個 jar 包呢?
另外,假如不采用 library+sample 這樣兩個 module 的方式,我直接將 library 和 sample 代碼放在一個 module 中,能不能打包出我需要的 jar 包呢,可能說的有點復雜,請教一下大神,非常感謝了~
Cmdmac 2015 年 6 月 7 日
己更新了哈,可以通過 QQ:7539368 聯系我~