新建一个项目,Android Studio默认关闭代码混淆开关,在build.gradle文件中,如下图所示的minifyEnabled 开关,因此如果需要混淆代码,需将false改为true,然后在文件proguard-rules.pro添加具体混淆规则。

android{
buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}
}

自己的build.gradle文件的buildTypes部分

 buildTypes {debug {buildConfigField "boolean", "LOG_DEBUG", "true" minifyEnabled false zipAlignEnabled true shrinkResources true }release {buildConfigField "boolean", "LOG_DEBUG", "false" minifyEnabled true zipAlignEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' }}
关键字 含义
keep 保留类和类成员,防止被混淆或移除
keepnames 保留类和类成员,防止被混淆,但没有被引用的类成员会被移除
keepclassmembers 只保留类成员,防止被混淆或移除
keepclassmembernames 只保留类成员,防止被混淆,但没有被引用的成员会被移除
keepclasseswithmembers 保留类和类成员,防止被混淆或移除,如果指定的类成员不存在还是会被混淆
keepclasseswithmembernames 保留类和类成员,防止被混淆,如果指定的类成员不存在还是会被混淆,没有被引用的类成员会被移除
通配符 含义
* 匹配任意长度字符,但不含包名分隔符.。例如一个类的全包名路径是com.othershe.test.Person,使用 com.othershe.test.* 、com.othershe.test.* 都是可以匹配的,但com.othershe.*就不能匹配
** 匹配任意长度字符,并包含包名分隔符.。例如要匹配com.othershe.test.**包下的所有内容
*** 匹配任意参数类型。例如*** getName(***)可匹配String getName(String)
匹配任意长度的任意类型参数。例如void setName(…)可匹配void setName(String firstName, String secondName)
匹配类、接口中所有字段
匹配类、接口中所有方法
匹配类中所有构造函数

相关链接:https://www.jianshu.com/p/84114b7feb38

常用混淆规则如下:

dontskipnonpubliclibraryclasses # 不忽略非公共的库类
-optimizationpasses 5            # 指定代码的压缩级别
-dontusemixedcaseclassnames      # 是否使用大小写混合
-dontpreverify                   # 混淆时是否做预校验
-verbose                         # 混淆时是否记录日志
-keepattributes *Annotation*     # 保持注解
-ignorewarning                   # 忽略警告
-dontoptimize                    # 优化不优化输入的类文件-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    #生成日志数据,gradle build时在本项目根目录输出
-dump class_files.txt            #apk包内所有class的内部结构
-printseeds seeds.txt            #未混淆的类和成员
-printusage unused.txt           #打印未被使用的代码
-printmapping mapping.txt        #混淆前后的映射-keep public class * extends android.support.** #如果有引用v4或者v7包,需添加
-libraryjars libs/xxx.jar        #混淆第三方jar包,其中xxx为jar包名
-keep class com.xxx.**{*;}       #不混淆某个包内的所有文件
-dontwarn com.xxx**              #忽略某个包的警告
-keepattributes Signature        #不混淆泛型
-keepnames class * implements java.io.Serializable #不混淆Serializable-keepclassmembers class **.R$* { #不混淆资源类public static <fields>;
}
-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 *;
}

原文地址:
https://www.cnblogs.com/ganhang-acm/p/5883185.html

Android混淆规则相关推荐

  1. Android混淆规则介绍

    Android混淆规则介绍 写在前面的话 APP上线推广,免不得是需要混淆加固的,况且劳动成果不易又会有谁希望自己的APP被破解抄袭呢.鉴于此方显本片文章的通用型和重要意义. 混淆简介 Android ...

  2. android 混淆规则作用,Android混淆规则

    简介 Java代码是非常容易反编译的.为了很好的保护Java源代码,我们往往会对编译好的class文件进行混淆处理. ProGuard是一个混淆代码的开源项目.它的主要作用就是混淆,当然它还能对字节码 ...

  3. android 混淆规则作用,Android代码混淆详解

    一.混淆的意义 混淆代码并不是让代码无法被反编译,而是将代码中的类.方法.变量等信息进行重命名,把它们改成一些毫无意义的名字,同时也可以移除未被使用的类.方法.变量等. 所以直观的看,通过混淆可以提高 ...

  4. Android中jsoup的混淆规则

    Android中jsoup的混淆规则 版权声明:转载必须注明本文转自严振杰的博客:http://blog.yanzhenjie.com 说实话这篇文章的标题和内容我觉得很水,所以读者们要是也觉得这篇文 ...

  5. Android自定义注解不被混淆,Android 混淆压缩开启以及自定义混淆规则

    1. app module下build文件开启代码混淆和资源压缩 通过minifyEnabled=true开启混淆,shrinkResources=true开启资源压缩,混淆会增加编译时间,一般rel ...

  6. Android 代码混淆规则

    1. Proguard介绍 Android SDK自带了混淆工具Proguard.它位于SDK根目录\tools\proguard下面. ProGuard是一个免费的Java类文件收缩,优化,混淆和预 ...

  7. Android代码混淆之混淆规则

    请尊重他人的劳动成果,转载请注明出处:<Android代码混淆技巧> 因为Android是使用Java开发的,所以开发者可以使用ProGuard对代码进行混淆.SDK已经集成了ProGua ...

  8. Android混淆解析

    此文章转载来源https://www.jianshu.com/p/84114b7feb38点击打开链接 Android混淆解析 一.混淆的目的 一款发布到市场的软件原则上都应该做代码混淆. 通过代码混 ...

  9. Android混淆详解

    综述 毫无疑问,混淆是打包过程中最重要的流程之一,在没有特殊原因的情况下,所有 app 都应该开启混淆. 首先,这里说的的混淆其实是包括了代码压缩.代码混淆以及资源压缩等的优化过程.依靠 ProGua ...

  10. Android 混淆详解

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/69388246 本文出自[赵彦军的博客] 文章目录 混淆的基本概念 开启混淆 混淆规 ...

最新文章

  1. 《Android开发从零开始》——11.AbsoluteLayoutFrameLayout学习
  2. virtualbox centos5 分辨率_一种高分辨率、高帧率的LCoS显示芯片设计方法
  3. Python爬虫加密
  4. 在eclipse使用git管理项目工程代码
  5. Node Sass does not yet support your current environment
  6. 日常spoken英语学习
  7. python 中的if else 和in
  8. C语言全排列递归算法理解,C#算法之全排列递归算法实例讲解
  9. Java的新项目学成在线笔记-day9(七)
  10. MVC与WebForm最大的区别
  11. 一行 Python 代码能实现什么丧心病狂的功能? | CSDN博文精选
  12. JS控制文本框内键盘上下左右键的焦点
  13. 服务器的登录日志文件,windows云服务器登录日志文件
  14. java计算机毕业设计网络课程答疑系统MyBatis+系统+LW文档+源码+调试部署
  15. 电磁学matlab仿真实验报告,利用MATLAB语言处理电磁学实验.doc
  16. 【优化求解】基于天牛须算法PID控制器优化设计matlab代码
  17. 查看oracle关闭重启,oracle 数据库关闭重启
  18. CAD数据文件格式DXF部分实体(圆弧、椭圆、凸度)解析[原理讲解+公式推导+java实现]
  19. 软件工程师——计算机组成原理
  20. [AT89C51 ]用汇编语言实现流水灯仿真(含keil与Proteus)

热门文章

  1. java 开根号函数_java程序中怎么调用平方根函数
  2. 互融云小额贷款系统开发:全流程管理的软件开发解决方案
  3. 三角函数泰勒级数推导
  4. 单片机c语言内部ram移动,2012年微型计算机原理与接口技术自考题模拟(9)
  5. fu7推挽胆机音质_fu7电子管功放电路图大全(6N8P\6P3P\胆机功放电路\耦合电容器)...
  6. BoundsChecker的使用
  7. Photoshop2021安装教程
  8. 计算机应不应该学电路,应该怎么学才能入门电子技术
  9. MPEG4写为avi文件
  10. 通过regedt查看计算机密码,教你操作电脑密码查看器 【解决办法】 的还原教程_...