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之后。

以上就是下午看了一会,更多的也是借鉴其他人的一些经验,写出来的一点点心得等。如有不足和雷同,请不吝指出,感谢~

你可能感兴趣的:(Android-技巧)