gradle打包指定包和类的jar

在开发sdk生成jar在eclipse里相对比较容易操作,只要导出class时指定哪里导出就可以,
但在用AndroidStudio开发时要导出jar就没那么容易,需要写gradle脚本,但gradle脚本
的入门成本还是比较高,网上也有打包jar的脚本参考,但大多是通过生成classes.jar重命名
来生成,这样生成的jar是包含工程里所有类的,有时我们需要指定一些包和类来生成jar。
下面是参考脚本:

  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)

在build.gradle写上后,只要在命令行执行gradle makeJar就可以在build/libs目录下找到这个jar

如果要实现只打某个包下面的某些子包或者文件可参考如下示例:

    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$');}
    }

你可能感兴趣的:(gradle打包指定包和类的jar)