• 安卓混淆


    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

  • 相关阅读:
    一网友推荐的书:框架设计(第2版):CLR Via C#
    线程与WinForm设计,防冻结,卡住窗体
    通用数据库操作辅助类DbHelper
    高级着色器语言(High Level Shader Language,简称HLSL)
    无法将 匿名方法 转换为类型“System.Delegate”,因为它不是委托类型
    根据RGB,计算灰度值
    温故而知新:WinForm/Silverlight多线程编程中如何更新UI控件的值
    [原创视频]PHP在netbeans中的简单使用
    自己封装的ASP.NET的SQLITE数据库的操作类
    《JavaScript征途》读后感
  • 原文地址:https://www.cnblogs.com/muyuge/p/6152159.html
Copyright © 2020-2023  润新知