jar包混淆

生成混淆的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 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
    }
}
jar包混淆_第1张图片
image.png

你可能感兴趣的:(jar包混淆)