android 基于Gradle 混淆jar包

这篇博客介绍了如何在Android项目中使用Gradle进行混淆jar包操作。虽然通常混淆apk配置可以自动混淆,但若需指定某些类不混淆,可以在proguard-android.txt文件中添加特定配置。文中并未详细展开这部分内容,而是提供了build.gradle和proguard-android.txt的代码示例,以供读者实践操作。
大家都知道,混淆apk,配置如下,编译工具会给我们自动混淆
 混淆代码:
 1 先到工程目录下,找到project.properties 这个文件
 2 根据提示找到proguard-android.txt 这个文件
 3 将这个文件拷贝回工程目录。
 4 将project.properties这个文件里面的 proguard.config=proguard-android.txt
但是如果混淆的时候需要保存哪些类文件不混淆。只要在proguard-android.txt 添加一些配置就好了,具体本文本次就不做介绍。

亲试有效:这是build.gradle 的代码

apply plugin: 'android-library'

dependencies {
    compile fileTree(dir: 'libs', include: '*.jar')
    compile project(':sogou-volley')
}

android {
    compileSdkVersion 21
    buildToolsVersion "23.0.3"

    sourceSets {
        main {
            manifest.srcFile 'AndroidManifest.xml'
            java.srcDirs = ['src']
            resources.srcDirs = ['src']
            aidl.srcDirs = ['src']
            renderscript.srcDirs = ['src']
            res.srcDirs = ['res']
            assets.srcDirs = ['assets']
            jniLibs.srcDirs = ['libs']
        }

        // Move the tests to tests/java, tests/res, etc...
        instrumentTest.setRoot('tests')

        // Move the build types to build-types/<type>
        // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
        // This moves them out of them default location under src/<type>/... which would
        // conflict with src/ being used by the main source set.
        // Adding new build types or product flavors should be accompanied
        // by a similar customization.
        debug.setRoot('build-types/debug')
        release.setRoot('build-types/release')
    }
}
task makeJar(dependsOn: ['compileReleaseJavaWithJavac'], type: Jar) {

    //需打包的资源所在的路径集
    def srcClassDir = [project.buildDir.absolutePath + "/intermediates/classes/release"];

    //初始化资源路径集
    from srcClassDir
    println "lixiang-->>"+srcClassDir

    //去除路径集下部分的资源
    exclude "com/sogou/gamecenter/sdk/BuildConfig.class"
    //这里需要改为自己的包名,我的包名是,com.sogou.gamecenter.sdk。所以就写为了com/sogou/gamecenter/sdk/
    exclude "com/sogou/gamecenter/sdk/BuildConfig\$*.class"
    exclude "**/R.class"
    exclude "**/R\$*.class"
    //只导入资源路径集下的部分资源
    include "com/sogou/gamecenter/sdk/**/*.class"

    //整理输出的 Jar 文件后缀名
    extension = "jar"
    //最终的 Jar 文件名......如果没设置,默认为 [baseName]-[appendix]-[version]-[classifier].[extension]
    archiveName = "lxcaySDKLib.jar"
}

task proguardJar(dependsOn: ['makeJar'], type: proguard.gradle.ProGuardTask) {

    //混淆的配置文件,我的是叫 proguard.cfg,也许有人叫 proguard-project.txt
    configuration 'proguard.cfg'
    String inJar = makeJar.archivePath.getAbsolutePath()
    //输入 jar
    injars inJar
    println "lixiang->>"+inJar
    //输出 jar
    String outJar = inJar.substring(0, inJar.lastIndexOf(File.separator)) + "/proguard-${makeJar.archiveName}"
    outjars outJar
    println "lixiang->>"+outJar
    //设置不删除未引用的资源(类,方法等)
    dontshrink
}

//直接敲,gradlew 会打印所有的task
//gradle haha命令 ,就可以打印出 haha 来。
//task haha {
   
   
//    println "haha"
//}

//task hello << {
   
   
//    println "hello world"
//}
// 这2个是等价的。
//task hello {
   
   
//    doLast{
   
   
//        println "hello world"
//    }
//}

这是proguard-android.txt的代码


#
# This ProGuard configuration fil
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值