Android Gradle 构建生成的 apk 包含混淆和非混淆类

Posted

技术标签:

【中文标题】Android Gradle 构建生成的 apk 包含混淆和非混淆类【英文标题】:Android Gradle build resulting apk contains both obfuscated and non-obfuscated classes 【发布时间】:2013-07-20 21:54:19 【问题描述】:

在构建我的 android 项目时,我在 build.gradle 文件中添加了以下内容以启用 proguard:

   buildTypes 
     release 
        runProguard true
        proguardFile 'proguard-project.txt'
        proguardFile '../common/proguard-shared.txt'
        proguardFile getDefaultProguardFile('proguard-android.txt')
     
   

一切正常,但是当我反汇编生成的 dex 文件时,发现混淆和非混淆文件都在那里。

例如common.Base64和common.a都存在,第一个是非混淆的,第二个是。

不确定其相关性,但项目本身具有非典型结构。 这是因为我们拥有庞大的 android 代码库,其中包含 40 多个 android 应用程序。 我们正在尝试与现有的基于 eclipse 的构建并排创建一个基于 gradle 的构建流程。

如果一切顺利,我们打算将文件结构更改为更原生的 gradle,并开始使用风味和构建类型来淘汰我们创建的许多库,以适应缺乏风味等问题。

上面的项目 E 依赖于这样的一系列库:

E -> D -> C -> B -> A

例如E 项目依赖于库 D,它依赖于库 C ...一直到 A。

【问题讨论】:

【参考方案1】:

在研究了这个之后,我发现如果你先在没有启用 proguard 的情况下构建,然后在启用它的情况下构建它,就会出现问题。这是由于dex的增量模式造成的。

您可以在启用 proguard 后进行干净的构建,它会解决这个问题。

编辑:我之前表示你可以在dex中禁用增量模式,但事实证明这并没有帮助!

【讨论】:

工作,谢谢,@Xav !在创建候选版本之前有什么建议的“强制”清理方法吗? gradle clean assembleRelease 适合你吗? @ThuyTrinh 确实如此。只需确保对所有依赖项进行“清理”(即,如果您有一个多模块项目,请先清理根目录,然后 assembleRelease 您需要的子模块)。

以上是关于Android Gradle 构建生成的 apk 包含混淆和非混淆类的主要内容,如果未能解决你的问题,请参考以下文章

在构建 gradle 和提交中更改版本代码后,不使用 devops Pipeline 生成 Android APK 版本明智

Bamboo + Android + Gradle:如何生成签名的apk?

理解使用Gradle编译打包Android apk

Android - 签名的 APK - Gradle 执行失败

尝试生成签名 Apk 时出现 Gradle 构建错误

Android Gradle 构建:重命名 apk