Enums 如何使枚举在启用proguard的情况下工作?

Enums 如何使枚举在启用proguard的情况下工作?,enums,proguard,obfuscation,android-proguard,android-security,Enums,Proguard,Obfuscation,Android Proguard,Android Security,我开发了一个android应用程序,在许多模块中使用enum。现在我正试图保护我的应用程序不受反向工程的影响,为此,我在应用程序中启用了proguard,但问题是在启用proguard后,无论我在哪里使用枚举,我的应用程序都会崩溃。 我创建了以下类来定义所有枚举 package app.mypackagename.utils; import android.content.Context; public class EnumUtils { public static enum Ap

我开发了一个android应用程序,在许多模块中使用enum。现在我正试图保护我的应用程序不受反向工程的影响,为此,我在应用程序中启用了proguard,但问题是在启用proguard后,无论我在哪里使用枚举,我的应用程序都会崩溃。 我创建了以下类来定义所有枚举

package app.mypackagename.utils;

import android.content.Context;

public class EnumUtils {

    public static enum AppDomain {
        LIVE, STAGING, MOCK
    }

    public static enum UserRole {
        CUSTOMER, ADMIN;

    }
    public static enum Module {
        REGISTRATION, PRODUCT
    }

}
枚举“UserRole”正在模型类“User”中使用

成功登录后,我将使用以下代码检查用户角色

                            Gson gson = new Gson();
                            Type listType = new TypeToken<User>() {
                            }.getType();
                            onlineUser = ((User) gson.fromJson(taskItem.getRawResponse(),
                                    listType));
                            onlineUser.userID = userId;
                            if (onlineUser.sulLevelcode.equalsIgnoreCase(Constants.LEVEL_CODE_CUSTOMER)) {
                                onlineUser.userRole = EnumUtils.UserRole.CUSTOMER;
                            }

有人能帮我解决这个问题吗。任何帮助都将不胜感激。

我也遇到了同样的问题,但将这一行添加到我的proguard-rules.pro中仍然有效-

-keep class app.mypackagename.constants.* { <fields>; }.   
-保留类app.mypackagename.constants.*{;}。

其中“app.mypackagename.constants”是我的所有枚举所在的包。

我也有同样的问题,但将这一行添加到我的proguard-rules.pro中仍然有效-

-keep class app.mypackagename.constants.* { <fields>; }.   
-保留类app.mypackagename.constants.*{;}。
其中“app.mypackagename.constants”是所有枚举所在的包

# Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle.
#
# For more details, see
#   http://developer.android.com/guide/developing/tools/proguard.html

# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
#   public *;
#}

# Uncomment this to preserve the line number information for
# debugging stack traces.
#-keepattributes SourceFile,LineNumberTable

# If you keep the line number information, uncomment this to
# hide the original source file name.
#-renamesourcefileattribute SourceFile

-dontwarn com.alcorlink.**
-dontwarn com.google.android.**
-dontwarn androidx.media.**

-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
-keep class app.app.mypackagename.utils.EnumUtils { *; }

##---------------Begin: proguard configuration for Gson  ----------
# Gson uses generic type information stored in a class file when working with fields. Proguard
# removes such information by default, so configure it to keep all of it.
-keepattributes Signature

# For using GSON @Expose annotation
-keepattributes *Annotation*

# Gson specific classes
-dontwarn sun.misc.**
#-keep class com.google.gson.stream.** { *; }

# Application classes that will be serialized/deserialized over Gson
-keep class app.mypackagename.flavors.models.User.** { <fields>; }

# Prevent proguard from stripping interface information from TypeAdapterFactory,
# JsonSerializer, JsonDeserializer instances (so they can be used in @JsonAdapter)
-keep class * implements com.google.gson.TypeAdapterFactory
-keep class * implements com.google.gson.JsonSerializer
-keep class * implements com.google.gson.JsonDeserializer

# Prevent R8 from leaving Data object members always null
-keepclassmembers,allowobfuscation class * {
  @com.google.gson.annotations.SerializedName <fields>;
}

##---------------End: proguard configuration for Gson  ----------
    --keep class app.mypackagename.utils.EnumUtils{ *; }

    -keep class app.mypackagename.flavors.models.User.** { *; }

    -keepclassmembers enum * {
         public static **[] values();
         public static ** valueOf(java.lang.String);
     }
    -keepclassmembers enum * { *; }
    -keepclassmembers enum app.mypackagename.** { *; }
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
-keep public enum app.mypackagename.utils.EnumUtils** {
    **[] $VALUES;
    public *;
}
-keepattributes AppDomain
-keepattributes UserRole
-keep class app.mypackagename.constants.* { <fields>; }.