Proguard如何检测未使用的类,有什么办法可以让我们知道要在proguard中添加哪些类?

问题描述 投票:2回答:1

[每当我在项目中创建请求和响应模型时,我都会将它们添加到proguard中,我要格外小心,因此proguard不会在Release环境中删除我的模型。但这对我来说似乎不是一个好习惯,所以我只想知道它是在哪个基础上将任何类声明为未使用的类。

android proguard obfuscation
1个回答
-1
投票

ProGuard会删除您的代码不直接使用的所有内容。

仅当您的代码使用反射时,才需要添加规则,而ProGuard无法知道您实际使用的是什么。假设您有此类:

class User {
    String name;
    String phoneNumber;

    public String getName() {
        return name;
    }
}

如果直接拨打user.getName(),就可以了。但是您也可以这样称呼它:

Class.forName("com.app.User").getMethod("getName").invoke(user); // same as user.getName()

[ProGuard无法理解您在做什么,并且很可能会删除User类或至少getName()方法,以为您没有使用它。

现在您很可能自己不使用反射,但是第三方库可以使用,通常是JSON解析器和HTTP客户端,例如,它们可以使用反射从JSON字段名称初始化模型。

由于这种可能性,强烈建议添加规则以确保ProGuard不会删除您的模型。推荐的方法是创建一个适用于所有模型的规则,通常是将它们全部放在同一文件夹中,在此com/app/models

-keep class com.app.models.** { *; }
© www.soinside.com 2019 - 2024. All rights reserved.