使用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

相關文章
相關標籤/搜索