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 包含混淆和非混淆类的主要内容,如果未能解决你的问题,请参考以下文章

构建android gradle项目时如何禁用proguard生成dump.txt

Android Gradle 插件Gradle 基础配置 ③ ( 生成 Gradle Wrapper 配置 | 分析生成的 gradle-wrapper.properties 配置文件 )

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

从 Android Studio Gradle 构建为 AWS Device Farm 生成 UIAutomator 测试 JAR

Android Gradle 插件Gradle 构建机制 ① ( 空白工程 Gradle 构建文件 | IntelliJ IDEA 工程构建文件 | Android Studio 工程构建文件 )

Android Gradle 插件自定义 Gradle 任务 ① ( Gradle 面板显示任务列表 | 自定义任务生成与显示分组 )