在 Android 中只启用混淆而不启用代码收缩?

Posted

技术标签:

【中文标题】在 Android 中只启用混淆而不启用代码收缩?【英文标题】:Enabling only obfuscation but not code shrinking in Android? 【发布时间】:2019-09-07 07:32:13 【问题描述】:

我只想在 ProGuard 中启用混淆功能,但同时禁用代码收缩,所以我设置了

minifyEnabled false
useProguard true

但是,现在发布编译不再生成mapping.txt,我猜这表明没有进行混淆?我以为minifyEnabled 控制代码收缩和useProguard 控制混淆,但似乎不是这样?

useProguard 标志具体有什么作用,如何达到预期的效果?

【问题讨论】:

【参考方案1】:

minifyEnabled true:它运行 ProGuard

shrinkResources true:它会删除 ProGuard 标记为未使用的资源。

在从 DEX 中删除不需要的文件的同时,您的 APK 大小也会减小。为了您的目的,您可以将此属性设置为false

【讨论】:

【参考方案2】:

我认为您需要使用-dontshrink 选项来保留所有未使用的类、方法和资源。

阅读Shrinking options,文档中说

-不要收缩

指定不收缩输入类文件。默认情况下,应用收缩;所有类和类成员都被删除,除了由各种 -keep 选项列出的那些以及它们直接或间接依赖的那些。在每个优化步骤之后还会应用收缩步骤,因为某些优化可能会打开删除更多类和类成员的可能性。

【讨论】:

以上是关于在 Android 中只启用混淆而不启用代码收缩?的主要内容,如果未能解决你的问题,请参考以下文章

在 Objective-C 中默认启用自动收缩

android + scala + 混淆代码

Android:proguard 不会混淆源代码

在 Android 模拟器上启用 WiFi

android 怎么实现只混淆自己的代码,而不混淆第3方jar包

Proguard:JobIntentService IllegalArgumentException启用模糊处理