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?