Android Studio 使用 Gradle 打包 Jar

参考:http://chaosleong.github.io/blog/2015/08/02/android-studio-shi-yong-gradle-da-bao-jar/
http://blog.csdn.net/hjq842382134/article/details/38538097
http://www.cnblogs.com/wuya/p/android-studio-gradle-export-jar-assets.html
Gradle的基础知识:http://tech.meituan.com/gradle-practice.html

方法一:

1.在module的gradle里添加下面代码(有指定 applicationId 情况下还需要注释对应代码),运行命令 gradle bundleRelease,等待完成

apply plugin: 'com.andriod.library'  

2.找到对应 module文件夹下的 build/intermediates/bundles/debug(release) /classes.jar

3.build的时候,android studio 1.0会在 module目录的build/intermediates/bundles/release/ 子目录(这个目录以后版本可能会变)里生成一个名为classes的jar包。也可以使用 jar 等工具剔除多余的 class

方法二:

使用AndroidStudio自动的帮我搞好,生成jar包。
module下面的gradle:
代码中部分路径需要自己修改
不需要的代码可自行取消,代码中都有注释

import com.android.build.gradle.AppPlugin
import com.android.build.gradle.LibraryPlugin
import proguard.gradle.ProGuardTask

apply plugin: 'com.android.application'

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        applicationId "org.chaos.demo.jar"
        minSdkVersion 22
        targetSdkVersion 22
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
}

//dependsOn 可根据实际需要增加或更改
task buildJar(dependsOn: ['compileReleaseJava'], type: Jar) {

    appendix = "demo"
    baseName = "androidJar"
    version = "1.0.0"
    classifier = "release"

    //后缀名
    extension = "jar"
    //最终的 Jar 包名,如果没设置,默认为 [baseName]-[appendix]-[version]-[classifier].[extension]
    archiveName = "AndroidJarDemo.jar"

    //需打包的资源所在的路径集
    def srcClassDir = [project.buildDir.absolutePath + "/intermediates/classes/release"];
    //初始化资源路径集
    from srcClassDir

    //去除路径集下部分的资源
    exclude "org/chaos/demo/jar/BuildConfig.class"
    exclude "org/chaos/demo/jar/BuildConfig\$*.class"
    exclude "**/R.class"
    exclude "**/R\$*.class"

    //只导入资源路径集下的部分资源
    include "org/chaos/demo/jar/**/*.class"

    //注: exclude include 支持可变长参数
}

task proguardJar(dependsOn: ['buildJar'], type: ProGuardTask) {
    //Android 默认的 proguard 文件
    configuration android.getDefaultProguardFile('proguard-android.txt')
    //manifest 注册的组件对应的 proguard 文件
    configuration project.buildDir.absolutePath + "/intermediates/proguard-rules/release/aapt_rules.txt"
    configuration 'proguard-rules.pro'

    String inJar = buildJar.archivePath.getAbsolutePath()
    //输入 jar
    injars inJar
    //输出 jar
    outjars inJar.substring(0, inJar.lastIndexOf('/')) + "/proguard-${buildJar.archiveName}"

    //设置不删除未引用的资源(类,方法等)
    dontshrink

    Plugin plugin = getPlugins().hasPlugin(AppPlugin) ?
            getPlugins().findPlugin(AppPlugin) :
            getPlugins().findPlugin(LibraryPlugin)
    if (plugin != null) {
        List<String> runtimeJarList
        if (plugin.getMetaClass().getMetaMethod("getRuntimeJarList")) {
            runtimeJarList = plugin.getRuntimeJarList()
        } else if (android.getMetaClass().getMetaMethod("getBootClasspath")) {
            runtimeJarList = android.getBootClasspath()
        } else {
            runtimeJarList = plugin.getBootClasspath()
        }

        for (String runtimeJar : runtimeJarList) {
            //给 proguard 添加 runtime
            libraryjars(runtimeJar)
        }
    }
}

不需要混淆则运行命令:

gradle buildJar

需要混淆则运行:

gradle proguardJar

不知道在哪里运行上面这两条命令?下面提供两种方法:
1.你可以点底部任务栏的Terminal,输入gradle buildJar(图片来自其他博客,命令自行改正)我在Android studio装输入命令无效,但是我已经安装了gradle,暂不知道原因

2.安装Gradle,Gradle的安装非常方便,下载ZIP包,解压到本地目录,设置 GRADLE_HOME 环境变量并将 GRADLE_HOME/bin 加到 PATH 环境变量中,安装就完成了。为什么、如何设置环境变量?

cmd下,切换到你的工程目录下,F:\StudioProjects\youApplication\,执行gradle buildJar命令

最后生成的jar在\StudioProjects\youApplication\app\libs文件夹下

你可能感兴趣的:(gradle,打包jar)