zoukankan      html  css  js  c++  java
  • 安卓混淆

    eclipse混淆

    在工程目录proguard-project.txt编写那些需要混淆

    #第三方引入的包
    -optimizationpasses 5
    -dontusemixedcaseclassnames
    -dontskipnonpubliclibraryclasses
    -dontpreverify
    -verbose
    -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
    #忽略警告 也可以用-ignorewarnings
    -dontwarn
    #声明第三方jar包,不用管第三方jar包中的.so文件(如果有)
    -libraryjars libs/baidumapapi.jar
    -libraryjars libs/tencent_openapi.jar
    -libraryjars libs/httpmime-4.1.3.jar
    -libraryjars libs/weibo.sdk.android.sso.jar
    -libraryjars libs/android-support-v4.jar
    -keep public class * extends android.app.Activity
    -keep public class * extends android.app.Application
    -keep public class * extends android.app.Service
    -keep public class * extends android.content.BroadcastReceiver
    -keep public class * extends android.content.ContentProvider
    -keep public class * extends android.app.backup.BackupAgentHelper
    -keep public class * extends android.preference.Preference
    -keep public class com.android.vending.licensing.ILicensingService
    -keepclasseswithmembernames class * {
    native <methods>;
    }
    -keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet);
    }
    -keepclasseswithmembers class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
    }
    -keepclassmembers class * extends android.app.Activity {
    public void *(android.view.View);
    }
    -keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
    }
    -keep class * implements android.os.Parcelable {
    public static final android.os.Parcelable$Creator *;
    }
    #不混淆第三方jar包中的类
    -keep class com.baidu.mapapi.** {*;}
    -keep class com.tencent.tauth.** {*;}
    -keep class org.apache.http.entity.mime.** {*;}
    -keep class android.support.v4.** {*;}
    -keep class android.net.http.** {*;}
    -keep class com.weibo.sdk.android.** {*;}
    -keep class com.sina.sso.** {*;}
    #说明一下,第三方jar包中如果有.so文件,不用去理会,引入的第三方jar文件不要混淆,否则可能会报异常

    project.properties文件中

    #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

    把上面的#去掉


    Studio

    1. 在build.grandle添加,其中规则写在proguard-rules.pro中,也可以自定义一个文件,将其代替,比如eclipse常用的 proguard-project.txt

      buildTypes {
        release {
          signingConfig signingConfigs.release
          minifyEnabled true
          proguardFiles getDefaultProguardFile(‘proguard-android.txt‘), ‘proguard-rules.pro‘
        }
      }
    2. 在proguard-rules.pro中加入以下代码,基本可以涵盖所有

      -optimizationpasses 5          # 指定代码的压缩级别
      -dontusemixedcaseclassnames   # 是否使用大小写混合
      -dontpreverify           # 混淆时是否做预校验
      -verbose                # 混淆时是否记录日志
      
      -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*  # 混淆时所采用的算法
      
      -keep public class * extends android.app.Activity      # 保持哪些类不被混淆
      -keep public class * extends android.app.Application   # 保持哪些类不被混淆
      -keep public class * extends android.app.Service       # 保持哪些类不被混淆
      -keep public class * extends android.content.BroadcastReceiver  # 保持哪些类不被混淆
      -keep public class * extends android.content.ContentProvider    # 保持哪些类不被混淆
      -keep public class * extends android.app.backup.BackupAgentHelper # 保持哪些类不被混淆
      -keep public class * extends android.preference.Preference        # 保持哪些类不被混淆
      -keep public class com.android.vending.licensing.ILicensingService    # 保持哪些类不被混淆
      
      -keepclasseswithmembernames class * {  # 保持 native 方法不被混淆
          native <methods>;
      }
      -keepclasseswithmembers class * {   # 保持自定义控件类不被混淆
          public <init>(android.content.Context, android.util.AttributeSet);
      }
      -keepclasseswithmembers class * {# 保持自定义控件类不被混淆
          public <init>(android.content.Context, android.util.AttributeSet, int);
      }
      -keepclassmembers class * extends android.app.Activity { # 保持自定义控件类不被混淆   
          public void *(android.view.View);
      }
      -keepclassmembers enum * {     # 保持枚举 enum 类不被混淆    
          public static **[] values();    
          public static ** valueOf(java.lang.String);
      }
      -keep class * implements android.os.Parcelable { # 保持 Parcelable 不被混淆  
          public static final android.os.Parcelable$Creator *;
      }
    3. 通过 Android Studio进行 混淆代码时,默认已经将 lib目录中的 jar 都已经添加到打包脚本中,所以不需要再次手动添加,否则会出现“ java.io.IOException: The same input jar is specified twice” 错误。

    原文:http://blog.csdn.net/bjstyle/article/details/47001277

  • 相关阅读:
    PAT 1007 Maximum Subsequence Sum 最大连续子序列和
    数据库系统原理课程设计——图书借阅管理系统
    计算机组成原理——数据的表示与运用
    win7系统下安装Ubuntu18.04组成双系统
    C++中set用法详解
    C++ getline函数用法详解
    数据库——关系演算
    计算机组成原理——计算机系统概述考研题
    PAT 1002 A+B for Polynomials(map模拟)
    PAT 1001 A+B Format
  • 原文地址:https://www.cnblogs.com/muyuge/p/6152159.html
Copyright © 2011-2022 走看看