【问题标题】:why proguard is only obfuscating the class which is not extending anything为什么proguard只是混淆了没有扩展任何东西的类
【发布时间】:2017-12-22 12:06:24
【问题描述】:

我正在尝试使用 proguard 混淆我的 android 应用程序。但问题是,当我反编译 apk 时,它只显示更改的变量名,但类名与源代码中的相同。只有一个类的名称发生了变化,没有扩展任何其他类。我搜索了很多选项,但没有任何效果我在这里发布我的问题。

这是我的 gradle 文件代码:-

 buildTypes {
    release {

        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'),
                'proguard-rules.pro'
    }
}

在我的 proguard rules.pro 文件中

-ignorewarnings

请帮我解决这个问题 谢谢:)

【问题讨论】:

  • 试试我的规则.....

标签: android security android-proguard


【解决方案1】:

我不知道您的情况到底是什么问题,但我已经通过 proguard rules 解决了我的问题,它们是帮助您保护应用程序的各种规则

-dontskipnonpubliclibraryclassmembers
-dontshrink
-dontoptimize
-printmapping build/libs/output/obfuscation.map
-keepattributes
-adaptclassstrings
-dontnote
-dontwarn

# Keep Android classes
-keep class ** extends android.** {
    <fields>;
    <methods>;
}

# Keep serializable classes & fields
-keep class ** extends java.io.Serializable {
    <fields>;
}

# Keep - Applications. Keep all application classes, along with their 'main'
# methods.
-keepclasseswithmembers public class * {
    public static void main(java.lang.String[]);
}

# Also keep - Enumerations. Keep the special static methods that are required in
# enumeration classes.
-keepclassmembers enum  * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}


-assumenosideeffects class android.util.Log {
    public static *** d(...);
    public static *** e(...);
    public static *** w(...);
}

欲了解更多信息,您可以访问Proguard official site

【讨论】:

  • 使用了这个但类名仍然存在
【解决方案2】:

使用此规则

它将改变混淆 class 以及您的 instance

-ignorewarnings

-keep class * {
    public private default *;
}

注意:proguard-ruls.pro 文件中应用更改后,不要忘记检查您的所有功能

proguard-ruls.pro 文件中应用更改后,可能有一些class 将不起作用,在这种情况下,您必须使用-keep 来避免此问题

-keep 指定要作为代码入口点保留的类和类成员(字段和方法)。例如,为了保留应用程序,您可以指定主类及其主方法。

您也可以应用此规则

ignorewarnings

-dontpreverify
-repackageclasses ''
-allowaccessmodification
-optimizations !code/simplification/arithmetic
-keepattributes *Annotation*


-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}

-keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

-keepclassmembers class * implements android.os.Parcelable {
    static android.os.Parcelable$Creator CREATOR;
}

-keepclassmembers class **.R$* {
    public static <fields>;
}

-keep class android.support.v7.widget.SearchView { *; }

-assumenosideeffects class android.util.Log {
    public static *** d(...);
    public static *** e(...);
    public static *** w(...);
}

更多关于proguard-rules可以参考官方proguard DOC

【讨论】:

    猜你喜欢
    • 2020-11-21
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 2019-08-17
    • 2020-09-07
    • 2019-05-26
    • 1970-01-01
    相关资源
    最近更新 更多