【Android 安全】DEX 加密 ( Proguard 简介 | 默认 ProGuard 分析 )

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: 【Android 安全】DEX 加密 ( Proguard 简介 | 默认 ProGuard 分析 )

文章目录

一、Proguard 配置简介

二、Proguard 完整注释





一、Proguard 配置简介


更多 ProGuard 混淆配置参考 : https://www.guardsquare.com/en/products/proguard/manual/usage



1 . 不进行优化 :


# 不要进行优化 
-dontoptimize



2 . 混淆大小写 : 不要使用混合大小写类名进行混淆 , 混淆后的名称全部都是小写 , 增加阅读难度


# 不要使用混合大小写类名进行混淆 , 混淆后的名称全部都是小写 , 增加阅读难度 
-dontusemixedcaseclassnames


3 . 保留反射属性 : 保留一些反射中可能用到的属性


# 保留一些反射中可能用到的属性 
-keepattributes *Annotation*,Signature,InnerClasses,EnclosingMethod



4 . 保留这些类和类成员 :


# 保留这些类和类成员 
-keep public class com.google.vending.licensing.ILicensingService



5 . 控制日志输出 : -dontnote , 控制编译时不在 Build 对话框输出一些日志信息 ;


# 控制编译时不在 Build 对话框输出一些日志信息 
-dontnote com.android.vending.licensing.ILicensingService


6 . Native 函数混淆设置 :


# 不混淆 Native 函数
# http://proguard.sourceforge.net/manual/examples.html#native
-keepclasseswithmembernames class * {
    native <methods>;
}



7 . 保留类成员 , 包括成员函数 和 成员变量 :

# 不要混淆 Activity 及 子类的 成员 , 以防在 XML 的 onCLick 属性中用到 .
-keepclassmembers class * extends android.app.Activity {
    public void *(android.view.View);
}


8 . 保留注解 : 保留 android.support.annotation.Keep 注解类 , 不被混淆 ;


# 保留注解 
-keep class android.support.annotation.Keep



9 . 保留被注解声明的类 : 被 @android.support.annotation.Keep 注解修饰的类不被混淆 ;


# 保留被 @android.support.annotation 注解声明的类 
-keep @android.support.annotation.Keep class * {*;}


10 . 保留被注解声明的函数 : 被 @android.support.annotation.Keep 注解修饰的函数不被混淆 ;


# 保留被 @android.support.annotation 注解声明的函数 
-keepclasseswithmembers class * {
    @android.support.annotation.Keep <methods>;
}



11 . 保留被注解声明的成员 : 被 @android.support.annotation.Keep 注解修改的成员 , 不会被混淆 ;


# 保留被 @android.support.annotation 注解声明的成员
-keepclasseswithmembers class * {
    @android.support.annotation.Keep <fields>;
}


12 . 保留被注解声明的构造函数 : 被 @android.support.annotation.Keep 修饰的构造函数不会被混淆 ;


# 保留被 @android.support.annotation 注解声明的构造函数 
-keepclasseswithmembers class * {
    @android.support.annotation.Keep <init>(...);
}





二、Proguard 完整注释


# This is a configuration file for ProGuard.
# http://proguard.sourceforge.net/index.html#manual/usage.html
#
# 从 Gradle 插件 2.2 版本开始 , 该文件与插件一同发布, 在编译构建时取出 .
# 不再维护 $ANDROID_HOME 中的文件 , 新的 Gradle 插件版本将会忽略这些文件 .
# 
# 默认情况下 , 优化会被关闭 . 
# Dex 自己会执行优化 , 不建议在 ProGuard 步骤中进行优化 . 
# 如果想要启用优化 , 不能只在 ProGuard 项目配置中将优化标志设为 true ;
# 相反还要在 build.gradle 中指向 "proguard-android-optimize.txt" 文件 .
# 不要进行优化 
-dontoptimize
# 不要使用混合大小写类名进行混淆 , 混淆后的名称全部都是小写 , 增加阅读难度 
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-verbose
# 保留一些反射中可能用到的属性 
-keepattributes *Annotation*,Signature,InnerClasses,EnclosingMethod
# 保留这些类和类成员 
-keep public class com.google.vending.licensing.ILicensingService
-keep public class com.android.vending.licensing.ILicensingService
-keep public class com.google.android.vending.licensing.ILicensingService
# 控制编译时不在 Build 对话框输出一些日志信息 
-dontnote com.android.vending.licensing.ILicensingService
-dontnote com.google.vending.licensing.ILicensingService
-dontnote com.google.android.vending.licensing.ILicensingService
# 不混淆 Native 函数
# http://proguard.sourceforge.net/manual/examples.html#native
-keepclasseswithmembernames class * {
    native <methods>;
}
# 不要混淆继承自 View 的 get set 函数 , 以便让动画可以继续工作
# 指定类成员 ( 成员方法 / 成员变量 ) 不被混淆 
-keepclassmembers public class * extends android.view.View {
    void set*(***);
    *** get*();
}
# 不要混淆 Activity 及 子类的 成员 , 以防在 XML 的 onCLick 属性中用到 .
-keepclassmembers class * extends android.app.Activity {
    public void *(android.view.View);
}
# 枚举成员不要混淆 
# http://proguard.sourceforge.net/manual/examples.html#enumerations
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}
-keepclassmembers class * implements android.os.Parcelable {
    public static final ** CREATOR;
}
-keepclassmembers class **.R$* {
    public static <fields>;
}
# Preserve annotated Javascript interface methods.
-keepclassmembers class * {
    @android.webkit.JavascriptInterface <methods>;
}
# The support libraries contains references to newer platform versions.
# Don't warn about those in case this app is linking against an older
# platform version. We know about them, and they are safe.
-dontnote android.support.**
-dontnote androidx.**
-dontwarn android.support.**
-dontwarn androidx.**
# This class is deprecated, but remains for backward compatibility.
-dontwarn android.util.FloatMath
# Understand the @Keep support annotation.
# 保留注解 
-keep class android.support.annotation.Keep
-keep class androidx.annotation.Keep
# 保留被 @android.support.annotation 注解声明的类 
-keep @android.support.annotation.Keep class * {*;}
# 保留被 @androidx.annotation 注解声明的类 
-keep @androidx.annotation.Keep class * {*;}
# 保留被 @android.support.annotation 注解声明的函数 
-keepclasseswithmembers class * {
    @android.support.annotation.Keep <methods>;
}
# 保留被 @androidx.annotation 注解声明的函数 
-keepclasseswithmembers class * {
    @androidx.annotation.Keep <methods>;
}
# 保留被 @android.support.annotation 注解声明的成员
-keepclasseswithmembers class * {
    @android.support.annotation.Keep <fields>;
}
# 保留被 @androidx.annotation 注解声明的成员 
-keepclasseswithmembers class * {
    @androidx.annotation.Keep <fields>;
}
# 保留被 @android.support.annotation 注解声明的构造函数 
-keepclasseswithmembers class * {
    @android.support.annotation.Keep <init>(...);
}
# 保留被 @androidx.annotation 注解声明的构造方法 
-keepclasseswithmembers class * {
    @androidx.annotation.Keep <init>(...);
}
# These classes are duplicated between android.jar and org.apache.http.legacy.jar.
-dontnote org.apache.http.**
-dontnote android.net.http.**
# These classes are duplicated between android.jar and core-lambda-stubs.jar.
-dontnote java.lang.invoke.**


目录
相关文章
|
2月前
|
存储 安全 API
如何对 API 进行安全加密?
对API进行安全加密是保障数据安全和系统稳定的重要措施
184 56
|
2月前
|
安全 网络协议 网络安全
【Azure 环境】从网络包中分析出TLS加密套件信息
An TLS 1.2 connection request was received from a remote client application, but non of the cipher suites supported by the client application are supported by the server. The connection request has failed. 从远程客户端应用程序收到 TLS 1.2 连接请求,但服务器不支持客户端应用程序支持的任何密码套件。连接请求失败。
|
3月前
|
存储 安全 前端开发
端到端加密:确保数据传输安全的最佳实践
【10月更文挑战第12天】端到端加密(E2EE)是确保数据传输安全的重要手段,通过加密技术保障数据在传输过程中的隐私与完整性,防止第三方窃听和篡改。本文介绍E2EE的工作原理、核心优势及实施步骤,并探讨其在即时通讯、文件共享和金融服务等领域的应用,强调了选择加密协议、密钥管理、数据加密及安全接口设计的重要性,旨在帮助企业和开发者有效保护用户数据,满足数据保护法规要求。
|
3月前
|
安全 数据安全/隐私保护 CDN
阿里云国际站:海外视频安全的DRM
阿里云国际站:海外视频安全的DRM加密
|
3月前
|
安全 数据安全/隐私保护 CDN
阿里云海外视频安全的DRM
阿里云海外视频安全的DRM加密
|
13天前
|
安全 算法 网络协议
【网络原理】——图解HTTPS如何加密(通俗简单易懂)
HTTPS加密过程,明文,密文,密钥,对称加密,非对称加密,公钥和私钥,证书加密
|
1月前
|
存储 SQL 安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将介绍网络安全的重要性,分析常见的网络安全漏洞及其危害,探讨加密技术在保障网络安全中的作用,并强调提高安全意识的必要性。通过本文的学习,读者将了解网络安全的基本概念和应对策略,提升个人和组织的网络安全防护能力。
|
1月前
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
随着互联网的普及,网络安全问题日益突出。本文将从网络安全漏洞、加密技术和安全意识三个方面进行探讨,旨在提高读者对网络安全的认识和防范能力。通过分析常见的网络安全漏洞,介绍加密技术的基本原理和应用,以及强调安全意识的重要性,帮助读者更好地保护自己的网络信息安全。
49 10
|
1月前
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
在数字化时代,网络安全和信息安全已成为我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术和安全意识等方面的内容,并提供一些实用的代码示例。通过阅读本文,您将了解到如何保护自己的网络安全,以及如何提高自己的信息安全意识。
61 10
|
1月前
|
SQL 安全 网络安全
网络安全漏洞、加密技术与安全意识的知识分享
随着互联网的普及,网络安全问题日益严重。本文将介绍网络安全漏洞的概念、类型和防范措施,以及加密技术的原理和应用。同时,强调提高个人和企业的安全意识对于防范网络攻击的重要性。