升级到 Android Gradle 插件 3.4.0 后类不再混淆

2023-11-30

升级到 Android Gradle 插件 3.4.0 后,基本类不再被混淆。

以下基本步骤可以重现该问题:

  1. 在 Android Studio 中创建一个新的空项目
  2. In app/build.gradle change minifyEnabled to true
  3. 创建以下类,ProguardTestClass.java:

    public class ProguardTestClass {
    
        public interface ProguardTestInnerInterface {
            void proguardTestCallback(String message);
        }
    
        public static void proguardTestMethod(String input, ProguardTestInnerInterface impl) {
            impl.proguardTestCallback("proguardTestMethod received input=[" + input + "]");
        }
    }
    
  4. 参考课程来自MainActivity.java:

        public class MainActivity extends AppCompatActivity {
            private static final String TAG = "MainActivity";
    
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
    
                ProguardTestClass.proguardTestMethod("MainActivity's ProguardTestClass", new ProguardTestClass.ProguardTestInnerInterface() {
                    @Override
                    public void proguardTestCallback(String message) {
                        Log.d(TAG, "Proguard test: " + message);
                    }
                });
            }
        }
    
  5. 确认它使用的是 Android Gradle 插件 3.4.0build.gradle

  6. 确认正在使用gradle-5.1.1 in gradle/wrapper/gradle-wrapper.properties
  7. 在“终端”选项卡中打开“终端”窗口
  8. Run ./gradlew clean build
  9. Run find . -name mapping.txt | xargs grep "ProguardTestClass -> "

预期输出:

com.example.proguardgradleplugin340.ProguardTestClass -> com.example.proguardgradleplugin340.a:

实际输出:

app/build/outputs/mapping/release/mapping.txt没有提到任何重命名ProguardTestClass.

要查看之前的 Android Gradle 插件版本是否可以产生预期的输出,请重复上述步骤,但指向之前版本的 Android Gradle 插件和 Gradle:

  1. 更改为 Android Gradle 插件 3.3.2 中build.gradle
  2. 改成gradle-4.10.1 in gradle/wrapper/gradle-wrapper.properties

我试图通过调查其他人来进行调查我们以前从 Proguard 获取的诊断文件,但它们不再输出(至少默认情况下不会):

find . -name seeds.txt find . -name usage.txt

我还检查了 Android Gradle 插件 3.4.0 发行说明,发现它取代了 Proguard,转而采用了一项新技术:“将脱糖、收缩、混淆、优化和去糖化全部集成在一个步骤中”.


尝试设置useProguard false让插件使用 R8 而不是 ProGuard 来缩小和混淆应用程序的代码和资源。例如。

android {
    ...
    buildTypes {
        debug {
            minifyEnabled true
            useProguard false
        }
        release {
            minifyEnabled true
            useProguard false 
        }
    }
}

或者,如果你想坚持使用 ProGuard,你应该禁用 R8gradle.properties像下面这样:

# Disables R8 for Android Library modules only.
android.enableR8.libraries = false
# Disables R8 for all modules.
android.enableR8 = false

并且记得设置useProguard true.


Edit #1

请在此处查看如何将 Proguard 迁移到 R8:Android/java:从 ProGuard 过渡/迁移到 R8?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

升级到 Android Gradle 插件 3.4.0 后类不再混淆 的相关文章

随机推荐

  • 熊猫找到满足条件的日期之间的持续时间?

    我有一个 pandas DataFrame 如下所示 VENDOR ID DATE 1 33 01 12 2018 2 33 03 12 2018 3 12 01 08 2018 4 12 01 15 2018 5 12 01 23 201
  • 用数组中缺失周期的行填充二维数组

    我有一个包含 1 13 期间的数组 有时 该数组并不包含所有期间的数据 我需要填写缺失的数据 例如 array period gt 7 y gt 20 period gt 8 y gt 20 50 period gt 9 y gt 7020
  • 我们可以用Java读取操作系统的环境变量吗?

    我的操作系统是windows7 我想读取 Java 应用程序中的环境变量 我搜了google很多人的答案都是使用方法System getProperty String name or System getenv String name 但这
  • 根据对象属性删除数组元素

    我有一个像这样的对象数组 var myArray field id operator eq value id field cStatus operator eq value cStatus field money operator eq v
  • Javascript按名称删除嵌套对象属性[重复]

    这个问题在这里已经有答案了 我有一个复杂的 javascript 对象 其中包含多个嵌套数组和映射 我想删除具有给定名称的对象的每个字段 例如 myObj name John deleteMe 30 cars car1 Ford car2
  • Python:继续外循环中的下一次迭代

    我想知道是否有任何内置方法可以继续 python 外循环中的下一次迭代 例如 考虑以下代码 for ii in range 200 for jj in range 200 400 block0 if something continue b
  • 增加 WebView 中 WebSQL 配额的大小

    在普通的 Android Web 应用程序中 WebSQL 数据库的最大大小通常约为 8MB 在我正在制作的混合网络应用程序中 我想增加此限制 我该怎么做呢 看起来网络存储可能与它有关 但我能看到的唯一方法似乎是设置大小 setQuotaF
  • JavaScript 数独 - 检查规则

    我正在开发一个 javascript 数独 就输入验证而言 我很困惑 当每个值被输入到数独表中时 我有一个 onkeyup 触发一个函数 我试图使用该函数来确保没有值进入已经存在此类值的行 列 框 这是我第一次尝试这样的项目 所以我提前为菜
  • 通过 FTP 将 ANSI 字符串写入 Unicode 文件

    我有以下 Visual Basic 6 0 函数 它通过 FTP 将 ANSI 字符串写入新文件 我希望它将文件写入 UTF 16LE 在以下方法中有什么好的方法可以做到这一点吗 Public Sub writeToFile ByVal F
  • Pandas 缺少必需的依赖项 ['numpy']

    我目前正在学习机器学习的初学者介绍 输入命令时 import pandas as pd在终端的 python shell 中 我收到错误消息 导入错误 缺少必需的依赖项 numpy 我已经查看了其他类似的问题 尝试了该解决方案 但仍然收到相
  • 如何在 Angular2 中动态创建 SVG 组件?

    我正在创建一个使用 SVG 的 Web 应用程序 我创建了由 SVG 元素组成的组件 并将它们放入根目录中svg元素 它们有属性选择器 因为 SVG XML 文档树很严格 所以我不能使用元素选择器 他们有一个以以下开头的模板svg g ta
  • 更改购物车小部件 Woocommerce 中的“查看购物车”和“结帐”按钮文本

    我试图找到正确的功能或过滤器来编辑 Woocommerce 购物车小部件中 查看购物车 和 结账 按钮的文本 我的网站网址 http modularwave com 只是为了让你知道我正在使用来自 zigzagpress 的 Brutal
  • 将 Elasticsearch kibana 查询字符串格式转换为 URI 搜索格式

    从上周开始 我开始使用 AWS 上的 Elastic Search Service 我当前的 Elasticseach 版本是 6 X X 和 Kibana 6 X X 现在我对在 Kibana 客户端上运行的查询格式有点灵活 但我的问题是
  • 我可以将图像转换为点网格吗?

    只是一个简单的问题 可以这样吗 在 iOS 设备上完成图像处理 如果是 怎么办 是的 尽管 Core Graphics 可能不是对图像进行此类过滤的最佳方式 我的建议是使用 OpenGL ES 2 0 片段着色器 事实上 我只是写了一个来做
  • 关于静态变量的访问问题[重复]

    这个问题在这里已经有答案了 我在某些头文件 Class1 hpp 中有一个类 Class1 class Class1 static std vector
  • 使用正则表达式替换文件

    我尝试替换月份标签的内部文本 即月份名称应替换为其指定的月份编号 我试过这个 Dim strFile As String File ReadAllText TextBox1 Text parentFolder xml strFile Reg
  • Heroku 上的 OpenSSL::SSL::SSLError [重复]

    这个问题在这里已经有答案了 我正在尝试通过 Facebook 或 Twitter 对用户进行身份验证 让他们填写信息 然后单击 保存 从而创建用户记录 单击 保存 后 我在最后一步中收到 OpenSSL 错误 这发生在 Devise Reg
  • JSON无法反序列化为对象,需要数组吗?

    我正在尝试获取传入的 JSON 项目并将它们绑定到列表框项目 但 Visual Studio 告诉我我需要执行数组而不是对象 我从来没有这样做过 有人知道怎么做吗 我的根对象 public class RootObject public s
  • 获取列表中元组的计数,无论元素顺序如何

    我有一个元组列表 看起来像这样 my list 1 12 12 1 12 1 20 15 7 8 15 20 我想计算数字组合的数量 无论顺序如何 例如 如果只是打印它 我希望输出为 1 12 3 20 15 2 7 8 1 基本上 我有一
  • 升级到 Android Gradle 插件 3.4.0 后类不再混淆

    升级到 Android Gradle 插件 3 4 0 后 基本类不再被混淆 以下基本步骤可以重现该问题 在 Android Studio 中创建一个新的空项目 In app build gradle change minifyEnable