Android混淆规则
新建一个项目,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混淆规则相关推荐
- Android混淆规则介绍
Android混淆规则介绍 写在前面的话 APP上线推广,免不得是需要混淆加固的,况且劳动成果不易又会有谁希望自己的APP被破解抄袭呢.鉴于此方显本片文章的通用型和重要意义. 混淆简介 Android ...
- android 混淆规则作用,Android混淆规则
简介 Java代码是非常容易反编译的.为了很好的保护Java源代码,我们往往会对编译好的class文件进行混淆处理. ProGuard是一个混淆代码的开源项目.它的主要作用就是混淆,当然它还能对字节码 ...
- android 混淆规则作用,Android代码混淆详解
一.混淆的意义 混淆代码并不是让代码无法被反编译,而是将代码中的类.方法.变量等信息进行重命名,把它们改成一些毫无意义的名字,同时也可以移除未被使用的类.方法.变量等. 所以直观的看,通过混淆可以提高 ...
- Android中jsoup的混淆规则
Android中jsoup的混淆规则 版权声明:转载必须注明本文转自严振杰的博客:http://blog.yanzhenjie.com 说实话这篇文章的标题和内容我觉得很水,所以读者们要是也觉得这篇文 ...
- Android自定义注解不被混淆,Android 混淆压缩开启以及自定义混淆规则
1. app module下build文件开启代码混淆和资源压缩 通过minifyEnabled=true开启混淆,shrinkResources=true开启资源压缩,混淆会增加编译时间,一般rel ...
- Android 代码混淆规则
1. Proguard介绍 Android SDK自带了混淆工具Proguard.它位于SDK根目录\tools\proguard下面. ProGuard是一个免费的Java类文件收缩,优化,混淆和预 ...
- Android代码混淆之混淆规则
请尊重他人的劳动成果,转载请注明出处:<Android代码混淆技巧> 因为Android是使用Java开发的,所以开发者可以使用ProGuard对代码进行混淆.SDK已经集成了ProGua ...
- Android混淆解析
此文章转载来源https://www.jianshu.com/p/84114b7feb38点击打开链接 Android混淆解析 一.混淆的目的 一款发布到市场的软件原则上都应该做代码混淆. 通过代码混 ...
- Android混淆详解
综述 毫无疑问,混淆是打包过程中最重要的流程之一,在没有特殊原因的情况下,所有 app 都应该开启混淆. 首先,这里说的的混淆其实是包括了代码压缩.代码混淆以及资源压缩等的优化过程.依靠 ProGua ...
- Android 混淆详解
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/69388246 本文出自[赵彦军的博客] 文章目录 混淆的基本概念 开启混淆 混淆规 ...
最新文章
- 《Android开发从零开始》——11.AbsoluteLayoutFrameLayout学习
- virtualbox centos5 分辨率_一种高分辨率、高帧率的LCoS显示芯片设计方法
- Python爬虫加密
- 在eclipse使用git管理项目工程代码
- Node Sass does not yet support your current environment
- 日常spoken英语学习
- python 中的if else 和in
- C语言全排列递归算法理解,C#算法之全排列递归算法实例讲解
- Java的新项目学成在线笔记-day9(七)
- MVC与WebForm最大的区别
- 一行 Python 代码能实现什么丧心病狂的功能? | CSDN博文精选
- JS控制文本框内键盘上下左右键的焦点
- 服务器的登录日志文件,windows云服务器登录日志文件
- java计算机毕业设计网络课程答疑系统MyBatis+系统+LW文档+源码+调试部署
- 电磁学matlab仿真实验报告,利用MATLAB语言处理电磁学实验.doc
- 【优化求解】基于天牛须算法PID控制器优化设计matlab代码
- 查看oracle关闭重启,oracle 数据库关闭重启
- CAD数据文件格式DXF部分实体(圆弧、椭圆、凸度)解析[原理讲解+公式推导+java实现]
- 软件工程师——计算机组成原理
- [AT89C51 ]用汇编语言实现流水灯仿真(含keil与Proteus)
热门文章
- java 开根号函数_java程序中怎么调用平方根函数
- 互融云小额贷款系统开发:全流程管理的软件开发解决方案
- 三角函数泰勒级数推导
- 单片机c语言内部ram移动,2012年微型计算机原理与接口技术自考题模拟(9)
- fu7推挽胆机音质_fu7电子管功放电路图大全(6N8P\6P3P\胆机功放电路\耦合电容器)...
- BoundsChecker的使用
- Photoshop2021安装教程
- 计算机应不应该学电路,应该怎么学才能入门电子技术
- MPEG4写为avi文件
- 通过regedt查看计算机密码,教你操作电脑密码查看器
【解决办法】
的还原教程_...