近期用android studio来作android开发的IDE,它是使用gradle来构建的,因而開始学习gradle.html
现在有一个项目,里面有一个android-library的模块。我想在作release的时候,把这个模块中我写的代码编译并打包成jar包,并且和依赖的jar包拷贝出来,但android studio对android-library的管理是把其与依赖包打包成一个aar的包的,显示这不是我要的,因而便想用gradle来实现。java
首先我找到的第一种方法是在模块中的build.gradle添加�一个编译jar包的task.代码例如如下:android
task releaseJar(type:Jar) { from sourceSet.main.java destinationDir = file('build/libs') }
另一种方法是在stackoverflow中找到的,它也确实能打包成jar包。代码例如如下:api
android.libraryVariants.all { variant -> def name = variant.buildType.name if (name.equals(com.android.builder.BuilderConstants.DEBUG)) { return; // skip debug builds } def task = project.tasks.create "jar${name.capitalize()}, Jar task.from variant.javaCompile.destinationDir artifacts.add('archives', task) }
但是它会把个人R.java也编译进去,而且这个文件又很是大。我原来的代码编译以后打包才不到13K,加上编译这个文件的话,要28K。学习
第三种方法就比較取巧了。这是因为gradle在构建的时候,会对这个模块的class文件先打包成classes.jar并放在build/bundles/release。因而我仅仅需要把它拷出来,并重命名就可以了。gradle
因而代码例如如下:ui
task releaseJar(type: Copy) { from( 'build/bundles/release') into( 'build/libs') include('classes.jar') rename('calsses.jar', 'superlog' + VERSION_NAME + '.jar') } task releaseLib(type: Copy, dependsOn: releaseJar) { into "../../release" from 'libs' from 'build/libs' }当中VERSION_NAME是我定义的一个变量,在gradle.properties文件里。该文件与gradle.build在同级文件夹。