生成混淆的jar包需要在module的build.gradle文件中添加以下两个脚本函数,最后运行对应的gradle指令即可。
task buildJar(dependsOn: ['assembleRelease'], type: Jar) {
build_type = 1
//后缀名
extension = "jar"
//最终的 Jar 包名
archiveName = "${project.getName()}-release.jar"
//需打包的资源所在的路径集
def srcClassDir = [project.buildDir.absolutePath + "/intermediates/classes/release"]
def srcKotlinClassDir = [project.buildDir.absolutePath + "/tmp/kotlin-classes/release"]
//初始化资源路径集
from srcClassDir
from srcKotlinClassDir
// from fileTree(dir: 'src/main', includes: ['assets/**'])
//去掉不要的类
exclude('io/reactivex/android/R.class')
//需要打包的类
include('com/smartahc/android/smartble/*.class')
include('com/smartahc/android/smartble/**/*.class')
// include('assets/**')
}
task buildProguardJar(dependsOn: ['buildJar'], type: ProGuardTask) {
// Android 默认的 proguard 文件
// configuration android.getDefaultProguardFile('proguard-android.txt')
//会根据该文件对 Jar 进行混淆,注意:需要在 manifest 注册的组件也要加入该文件中
configuration 'proguard-rules.pro'
String inJar = buildJar.archivePath.getAbsolutePath()
//输入 jar
injars inJar
//输出 jar
outjars inJar.substring(0, inJar.indexOf(".")) + "_proguard.jar"
//设置不删除未引用的资源(类,方法等)
dontshrink
AppPlugin appPlugin = getPlugins().findPlugin(AppPlugin)
if (appPlugin != null) {
List<String> runtimeJarList
if (appPlugin.getMetaClass().getMetaMethod("getRuntimeJarList")) {
runtimeJarList = appPlugin.getRuntimeJarList()
} else if (android.getMetaClass().getMetaMethod("getBootClasspath")) {
runtimeJarList = android.getBootClasspath()
} else {
runtimeJarList = appPlugin.getBootClasspath()
}
for (String runtimeJar : runtimeJarList) {
//给 proguard 添加 runtime
libraryjars(runtimeJar)
}
build_type = 2
}
}
image.png
网友评论