why proguard is only obfuscating the class which is not extending anything

别说谁变了你拦得住时间么 提交于 2019-12-04 02:56:17

问题


i am trying to obfuscate my android application with proguard. But the problem is when i decompiled the apk it only shows the changed variable names but class names are same as in the source.Only one class's name is changed which is not extending the any other class.I have searched many options but nothing worked so i am posting my problem here.

Here is my gradle file code:-

 buildTypes {
    release {

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

and in my proguard rules.pro file

-ignorewarnings

please help me with this Thanks:)


回答1:


I don't know what exactly problem in your case but i had solved my problem by below proguard rules and their are various rules which help you to protect your application

-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(...);
}

For More Information you can visit Proguard official site




回答2:


Use this RULES

It will change obfuscating the class as well as your instance

-ignorewarnings

-keep class * {
    public private default *;
}

Note: Don't forget to check your all functionalities after applying changes in proguard-ruls.pro file

There are may be some class will not work after applied changes in proguard-ruls.pro file in this case you have to use -keep to avoid this issue

-keep Specifies classes and class members (fields and methods) to be preserved as entry points to your code. For example, in order to keep an application, you can specify the main class along with its main method.

and you can apply this rules also

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(...);
}

for more about proguard-rules you can refer official proguard DOC



来源:https://stackoverflow.com/questions/47941251/why-proguard-is-only-obfuscating-the-class-which-is-not-extending-anything

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!