在library的module中
//android 变种配置, 在build的时候会回调
android.libraryVariants.all { variant ->
def name = variant.buildType.name
//debug 和release
if (name.equals(com.android.builder.core.BuilderConstants.DEBUG)) {
return;
}
//创建一个打Jar包任务
def task = project.tasks.create "makeJar1", Jar
//指定需要打包的class文件位置
task.from variant.javaCompile.destinationDir
println(">>>>>>>>>> " + variant.javaCompile.destinationDir)// F:\Work\TeddyWork\transactionsdk\app\build\intermediates\classes\release
//依赖的jar包
task.from configurations.compile.findAll {
it.getName() != 'android.jar' && !it.getName().startsWith('junit') && !it.getName().startsWith('hamcrest')
}.collect {
it.isDirectory() ? it : zipTree(it)
}
task.baseName "smssdk_${buildInfo.version}"//定义jar的名字
task.manifest {//定义manifest信息
attributes 'Created-By': "smssdk_${buildInfo.version}_${buildInfo.vcs_version}_${buildInfo.build_time}"
}
//Jar任务是一个Zip任务,如果想指定输出路径, 可以如此配置
task.destinationDir rootProject.buildDir
}
其实和下面的打包方式是一样的
task makeJar(type: Jar, dependsOn: "assembleRelease") {
doFirst {
delete fileTree(BUILD_LIBS_PATH) {
include JAR_NAME_PREFIX + "**.jar"
}
}
archiveName = 'kkcoresdk.jar'
from('build/intermediates/classes/release')
from(project.zipTree("libs/app_kookong_data.jar"))
from(project.zipTree("libs/app_service.jar"))
from(project.zipTree("libs/xutils.jar"))
destinationDir = file('build/libs')
// exclude('com/kookong/sdk/BuildConfig.class')
exclude('com/kookong/sdk/BuildConfig\$*.class')
exclude('**/R.class')
exclude('**/R\$*.class')
}
都是:
1.定义打包jar的task
2.设置打包class的目录
3.编译所依赖的jar
4.指定输出路径
区别
第一个 通过gradle build即可生成jar
第二个 需要先执行build再执行