安卓代码混淆 proguard配置

    xiaoxiao2025-01-13  15

     proguard主要是个代码优化和混淆工具;

     

    使用可以项目的build里面配置release正式版 和debug版 ,minifyEnabled是否开启混淆

    buildTypes {         release {             minifyEnabled false             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'         }         debug {             minifyEnabled true             proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'         }     }

     

    //在项目中,有些类或者方法可能  希望不混淆(比如这类需被要反射,混淆就不能反射了)

    在proguard-rules.pro文件配置

     

    》1类和类里面都不被混淆 有两种方法1  在proguard-rules.pro文件配置

    -keep class com.example.administrator.lsn_8_demo.User{ *; }

    注释-keep+类包名+类名 其他固定写法

     

    2:在需要不被混淆的类使用@keep 注解

     

     

     

    》2类名不被混淆,类里面可以混淆

    -keep class com.dongnao.proxy.guard.test.Bug

     

    》3类名不被混淆,类里面指定类型方法不混淆 ; *表示所有public static void类型的方法都不混淆,如果*改成指定方法名,就指定这个方法不混淆,其他类型方法还是混淆。

    -keep class com.dongnao.proxy.guard.test.Bug{            public static void *();     }

     

    》4指定类里面的变量不混淆,类名不混淆(*表示所有String类型的变量都不混淆。也可以指定某个变量)

    -keep class com.example.administrator.lsn_8_demo.User{

                                                java.lang.String * ;

                                             }

    》5 保留所有的本地native方法不被混淆  ;如果想指定某个类的navtive方法就把*替换成类包名+类名

    -keepclasseswithmembernames class * {

                                                 native <methods>;

                                                 }

     

    》6类名混淆和类里面都混淆

    -keepclassmembers class com.example.administrator.lsn_8_demo.User

    》7类名混淆,指定类里面变量不混淆

    -keepclassmembers class com.example.administrator.lsn_8_demo.User{ java.lang.String name ; }

     

    //注意如果你类里面的方法没有使用 proguard是不会打包到dex文件里面的,

    变量在构造方法没有初始化,或者使用也不会打包dex文件里面。

    判断是否混淆 一般以这个类或者方法变量 混淆了后 对使用是否有影响,如果有就不混淆,没有就混淆

     

     

    最新回复(0)