在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再执行