使用gradle打包jar包

最近用android studio来作android开发的IDE,它是使用gradle来构建的,因而开始学习gradle.java

如今有一个项目,里面有一个android-library的模块。我想在作release的时候,把这个模块中我写的代码编译并打包成jar包,而且和依赖的jar包拷贝出来,但android studio对android-library的管理是把其与依赖包打包成一个aar的包的,显示这不是我要的,因而便想用gradle来实现。android

首先我找到的第一种方法是在模块中的build.gradle增长一个编译jar包的task.代码以下:api

task releaseJar(type:Jar) {
    from sourceSet.main.java
    destinationDir = file('build/libs')
}

可是执行的时候,却提示里面的Log类找不到。显示用这种方法只能编译通常的java文件,没法编译用到了android库的源文件。多是还要在哪里添加依赖吧。学习


第二种方法是在stackoverflow中找到的,它也确实能打包成jar包。代码以下:gradle

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)
}

而后执行gradle jarRelease就能够了。ui

可是它会把个人R.java也编译进去,并且这个文件又很大。我原来的代码编译以后打包才不到13K,加上编译这个文件的话,要28K。spa


第三种方法就比较取巧了。这是由于gradle在构建的时候,会对这个模块的class文件先打包成classes.jar并放在build/bundles/release。因而我只须要把它拷出来,并重命名就能够了。debug

因而代码以下:code

task releaseJar(type: Copy) {
    from( 'build/bundles/release')
    into( 'build/libs')
    include('classes.jar')
    rename('classes.jar', 'superlog' + VERSION_NAME + '.jar')
}

task releaseLib(type: Copy, dependsOn: releaseJar) {
    into "../../release"
    from 'libs'
    from 'build/libs'
}

其中VERSION_NAME是我定义的一个变量,在gradle.properties文件中。该文件与gradle.build在同级目录。orm

相关文章
相关标签/搜索