zoukankan      html  css  js  c++  java
  • Android 混淆之proguard

    proguard 基本语法

    // 保留native方法的方法的方法名和包含native方法的类的类名不变

    -keepclasseswithmembernames class {
      native<methods>;
    }

    // 保留继承与View的类中的set*和get*方法
    -keepclassmembers public class * extends android.view.View {
      void set*(***);
      *** get*();
    }

    // 保留继承与Activity的类中以View为参数的方法
    -keepclassmembers class * extends android.app.Activity {
      public void *(android.view.View);
    }

    // 保留实现了Parcelable 接口的类的类名以及实现了 Parcelanle$Creator 的内部类
    -keep class * implemenets android.os.Parcelable {
      public static final android.os.Parcelanle$Creator *;
    }

    // 保留 R$*类中静态字段的字段名
    -keep class **.R$* {
      public static <fields>;
    }

    也就是
    类名不混淆 用keep
    方法名不混淆 用keepclassmembers 或者 keepclasseswithmembernames(后者用于native不混淆)


    不混淆的情况:

    1 jni 调用java方法

    2 四大组件

    3 R文件

    4 某些通过反射调用的类或方法

    5 第三jar包(一般情况下不要混淆)

    混淆去掉log

      -assumenosideeffects class android.util.Log {

          public static boolean isLoggable(java.lang.String,int);

          public static int v(...);

          public static int i(...);

          public static int w(...);

          public static int d(...);

         public static int e(...);

      }

        assumenosideeffects,proguard 配置文件里的参数。assume no side effects;假定无效;该属性也就是标识无效代码。我们就是通过这个参数来让proguard删除日志代码。

  • 相关阅读:
    Volatile关键字的解读
    JVM内存模型
    Redis为何是单线程的
    乐观锁&CAS问题
    String为什么要设置成Final类型
    后端开发之光!Django应用的容器化部署实践~
    一小时完成后台开发:DjangoRestFramework开发实践
    Django快速开发实践:Drf框架和xadmin配置指北
    Django应用部署:nginx+uwsgi方式
    Python踩坑:类与类对象类型参数传递与使用
  • 原文地址:https://www.cnblogs.com/622698abc/p/7894815.html
Copyright © 2011-2022 走看看