Android build.gradle 中的 proguard-android-optimize.txt 与 proguard-android.txt

Posted

技术标签:

【中文标题】Android build.gradle 中的 proguard-android-optimize.txt 与 proguard-android.txt【英文标题】:proguard-android-optimize.txt vs proguard-android.txt in Android build.gradle 【发布时间】:2019-11-16 01:07:03 【问题描述】:

我正在阅读the docs about shrinking, obfuscating and optimising for a release build using build.gradle for an android app。在文档的一部分中,proguard-android.txt 用作默认的 ProGuard 文件:

android 
    ...
    buildTypes 
        release 
            shrinkResources true
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android.txt'),
                    'proguard-rules.pro'
        
    

在另一个部分中,使用了 proguard-android-optimize.txt

android 
    ...
    buildTypes 
        release 
            shrinkResources true
            minifyEnabled true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),
                    'proguard-rules.pro'
        
    

似乎没有解释这些之间的区别,我找不到任何信息。有人可以解释一下区别是什么以及您何时使用 proguard-android-optimize.txtproguard-android.txt

谢谢:)

【问题讨论】:

【参考方案1】:

通过here查看Android源代码。

优化:如果您不想优化,请使用 proguard-android.txt 配置文件而不是这个, 关闭优化标志。添加优化介绍 某些风险,因为例如并非所有优化都由 ProGuard 适用于所有版本的 Dalvik。以下标志转 关闭各种已知存在问题的优化,但列表可能没有 是完整的或最新的。 (“算术”优化可以是 仅针对 Android 2.0 或更高版本时使用。)确保您 如果你走这条路,请彻底测试。

另外,answer 也是一本不错的读物。

【讨论】:

如果你使用R8,我认为优化文件没有效果吧?阅读developer.android.com/studio/build/shrink-code#optimizationR8 ignores any ProGuard rules that attempt to modify default optimizations, such as -optimizations and - optimizationpasses @ErsenOsman 正确,尽管针对 R8 有不同的优化方式。例如:developer.android.com/studio/build/shrink-code#full-mode 和 jakewharton.com/blog 有一些关于 R8 优化的帖子。

以上是关于Android build.gradle 中的 proguard-android-optimize.txt 与 proguard-android.txt的主要内容,如果未能解决你的问题,请参考以下文章

Android Gradle 插件build.gradle 中的 android 配置 ( 配置项 | compileSdkVersion 配置 | buildToolsVersion 配置 )

Android Gradle 插件Gradle 依赖管理 ② ( build.gradle 中的 dependencies 依赖配置 | DependencyHandler#add 方法介绍 )

从 Jenkins 管道中的 build.gradle 读取 android 的 versionName

android studio 中的build.gradle

详解Android中的build.gradle文件

Android Gradle 插件Gradle 扩展属性 ② ( 定义在根目录 build.gradle 中的扩展属性 | 使用 rootProject.扩展属性名访问 | 扩展属性示例 )