由于最近打算用Kotlin来开发项目,我们的项目基本是一些SDK项目,要对外输出Jar,所以想先看看用Android Studio来打包Kotlin写的代码看看有没有坑,在这里记录一下,和原来的Java打包Jar的方式基本一样,只是有个路径不同,并且需要同时将Java(历史遗留下来的旧代码)与Kotlin编写的class文件一起打进一个Jar。
task makeJar(dependsOn: ['compileReleaseJavaWithJavac'], type: Jar) {
delete 'build/libs/kotlin_and_java.jar' //生成的jar存放路径
appendix = "demo"
baseName = "androidJar"
version = "1.0.0"
classifier = "release"
//后缀名
extension = "jar"
//最终的 Jar 包名,如果没设置,默认为 [baseName]-[appendix]-[version]-[classifier].[extension]
archiveName = "kotlin_and_java.jar"
//需打包的资源所在的路径集
def srcClassesDir1 = [project.buildDir.absolutePath + "/tmp/kotlin-classes/release"] //Kotlin 生成的classes文件路径
def srcClassesDir2 = [project.buildDir.absolutePath + "/intermediates/classes/release"] //Java 生成的classes文件路径
//初始化资源路径集
from srcClassesDir1, srcClassesDir2
//去除路径集下部分的资源
exclude "**/R.class"
exclude "**/R\$*.class"
//只导入资源路径集下的部分资源
include "com/turbo/testapplication/**/*.class"
}
上面只贴了生成jar的代码,没有混淆,网上常见的混淆都是自己写一个"ProGuard Task",需要的可以自己搜索,我这里就不贴了。本人比较喜欢用的方式是直接用将“minifyEnabled”置为"true",这样"build"以后生成的classes文件就已经混淆过了,再用上面的代码生成Jar就可以了。
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
网友评论