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 联系我~