惊!Android build.gradle设置buildTypes中debug开启混淆,实际却没混淆!

188 阅读2分钟

我们知道,在Android开发中,buildTypes是在app的build.gradle中用来定义不同构建类型的一种机制。开发者通过BuildTypes可以为应用程序定义不同的配置选项、资源等。常见的buildTypes包括debug和release两种,分别用于开发阶段和发布阶段。具体的可以通过如下代码来定义你的buiTypes

android {
    buildTypes {
        debug {
            // 配置debug构建类型的相关选项
            minifyEnabled true //是否开启混淆
            zipAlignEnabled true //是否压缩优化
            shrinkResources true //是否移除无用资源
            signingConfig xxx //签名文件配置
            proguardFiles xxx //配置混淆文件
        }
        release {
            // 配置release构建类型的相关选项
            minifyEnabled true //是否开启混淆
            zipAlignEnabled true //是否压缩优化
            shrinkResources true //是否移除无用资源
            signingConfig xxx //签名文件配置
            proguardFiles xxx //配置混淆文件
        }
    }
}

今天在接手一个他人的老项目时,在用release发布的app上传图片的时候出现问题,接收不到返回的图片url链接;在debug发布的app上上传图片,能够正常接收到返回的图片url链接。当时第一个念头就是,是不是某个javabean文件被混淆了。于是打开app的build.gradle,发现debug和release中都开启了混淆(minifyEnabled设置true ),顿时我就纳闷了,这是神马情况?心里想,这不应该啊,debug和release都开启了混淆,按理说,debug正常能上传和接收图片,release应该也可以的啊(此时内心有点抓狂。后面排查的时候,发现确实是某个javabean类被混淆了导致的上传问题)。于是,后面我为了验证两种模式打的app包是否都混淆了,分别将它们解压缩,看下代码文件到底有没有混淆。结果是,debug版本的apk文件中,虽然设置了混淆,但实际却没有混淆。而release版本的apk文件开启了混淆,代码文件实际也是混淆。具体看下图对比:

01.png (上图是debug版本的apk文件)

02.png (上图是release版本的apk文件)

所以,当我们在build.gradle中设置debug中开启混淆,实际结果是没有被混淆的。而在release中设置的混淆,是有效果的。今天刚好遇到这个问题,借此记录一下,避免以后开发中遇到类似的问题。