`

android 代码混淆

阅读更多
打开混淆开关
Android.mk中经常会看到

LOCAL_PROGUARD_ENABLED := full这一句,从字面上理解,是开启混淆。如果你以为这样编译出来的apk就已经被混淆了,结果会让你很困惑。将apk里的classes.dex反编译,会看到代码仍然是混淆之前的状态,甚至连文件大小都没有变化。这行语句加不加,效果是一样的。
事实上,系统编译时,如果LOCAL_PROGUARD_ENABLED没有设置,除非环境变量中显式地定义了DISABLE_PROGUARD为true,LOCAL_PROGUARD_ENABLED默认值就是full。
参见:build/core/package_internal.mk

LOCAL_PROGUARD_ENABLED:=$(strip $(LOCAL_PROGUARD_ENABLED))
ifndef LOCAL_PROGUARD_ENABLED
ifneq ($(DISABLE_PROGUARD),true)
    LOCAL_PROGUARD_ENABLED :=full
endif
endif那为什么混淆不起作用呢?

ProGuard是一个压缩、优化和混淆Java字节码文件的免费的工具,它可以删除无用的类、字段、方法和属性。可以删除没用的注释,最大限度地优化字节码文件。它还可以使用简短的无意义的名称来重命名已经存在的类、字段、方法和属性。常常用于Android开发用于混淆最终的项目,增加项目被反编译的难度。
默认情况下,系统关闭了ProGuard的混淆功能,将其仅用于压缩。
参考build/core/java.mk

ifeq ($(filter obfuscation,$(LOCAL_PROGUARD_ENABLED)),)
# By default no obfuscation
proguard_flags += -dontobfuscate
endif  # No obfuscation
ifeq ($(filter optimization,$(LOCAL_PROGUARD_ENABLED)),)
# By default no optimization
proguard_flags += -dontoptimize
endif  # No optimization要想将混淆开关打开,需要在Android.mk中增加:

LOCAL_PROGUARD_ENABLED := full obfuscation这时候再编译,就会看到类和方法大部分变成了a,b,c之类无意义的短变量,完成了混淆的功能。同时带来的好处是,apk的体积大约有20%的减小。

解决混淆带来的问题
问题:Warning: can’t find referenced
如果应用中有引用的第三方jar库,在编译时会有可能碰到类似
“Warning: can’t find referenced class”
之类的编译警告,导致编译失败,解决方案是要通过混淆配置文件来保留某些第三方的库不要被混淆。
首先在Android.mk中增加一行来指定混淆配置文件:

LOCAL_PROGUARD_FLAG_FILES := proguard.flags混淆配置文件依惯例命名为proguard.flags,在Android.mk同目录下建立proguard.flags,将要保持不被混淆的类或成员加进来。示例:

-dontwarn com.google.zxing.**       # 消除针对com.google.zxing的所有警告
-keep class com.google.zxing.** {   # 保留com.google.zxing所有类的命名
    *;                              # 保留com.google.zxing的所有类的成员的命名
}
-verbose-dontwarn是消除警告,-keep是保留指定类和成员的命名,具体语法请参考ProGuard的语法说明,这里就不介绍了。

json序列化一个类时的要注意保留类的成员变量不被混淆
json的序列化函数会直接使用类的变量的命名,如果这个类被混淆了,会导致序列化出来的文件可读性比较差,需要在proguard.flags中将这个类的成员变量设置为保留。

From: http://blog.csdn.net/fire_up/article/details/54135167 感谢
分享到:
评论

相关推荐

    Android代码混淆配置

    本篇文章将深入探讨Android代码混淆配置的细节,帮助开发者理解如何有效地使用这一技术。 混淆是通过重命名类、方法和变量,使得原始代码变得难以理解的过程。在Android中,我们通常使用ProGuard工具进行代码混淆,...

    Android代码混淆前后分析

    本文将深入探讨Android代码混淆的前因后果、原理以及如何实施。 首先,我们来理解什么是代码混淆。代码混淆是将源代码转换成一种难以理解和阅读的形式,通常通过重命名变量、方法和类名,以及压缩和优化代码结构来...

    android 代码混淆_v2.0

    本文将详细探讨Android代码混淆的原理及其实践方法。 #### 二、代码混淆的目的 1. **保护知识产权**:通过混淆处理后的代码很难被逆向工程,这有助于保护开发者的核心算法和逻辑不被盗用。 2. **减小APK大小**:...

    Android代码混淆及签名.doc

    "Android代码混淆及签名" Android 代码混淆是指对 Android 应用程序的源代码进行混淆处理,以防止别人反编译和盗取源代码。代码混淆可以使得反编译变得困难,但是不能完全阻止反编译。 Android 代码混淆可以通过...

    Android代码混淆

    高版本Android项目下的proguard-project.txt,里边包含了常规混淆,以及防止第三方混淆的代码。

    介绍了Android代码混淆的三种方法及可能出现的问题

    Android 代码混淆三种方法详解 Android 代码混淆是指在将 Java 代码编译为.class 文件或将.apk 文件签名时,对代码进行混淆处理,以保护代码的安全性和知识产权。下面将介绍三种常见的 Android 代码混淆方法。 一...

    Android代码混淆的使用情况分析.pdf

    Android代码混淆是一种常见的安全技术手段,它通过将代码中容易理解的部分转换成难以理解的形式来隐藏程序的真实逻辑,以此来增加对程序代码的理解难度。这种技术被广泛应用于Android应用的开发过程中,目的在于保护...

    Android代码混淆的写法总结

    Android 代码混淆写法总结 Android 代码混淆是指在 Android 应用程序中对代码进行混淆处理,以保护代码的安全和 prevents 反编译。混淆可以将代码压缩,混淆文件,预检,优化等多种作用。 使用混淆的方式是通过在 ...

    Android代码混淆及签名.docx编程资料

    ### Android代码混淆详解 #### 一、代码混淆概念与意义 **代码混淆**是指通过更改原始源代码中的类名、变量名、方法名等标识符为无意义的名称(如a、b、c等),使得代码变得难以阅读和理解的过程。这种技术常用于...

    Android代码混淆的使用情况分析.docx

    ### Android代码混淆的使用情况分析 #### 一、引言 在移动互联网时代,Android作为全球最广泛使用的移动操作系统之一,其应用数量庞大且增长迅速。为了保护开发者的知识产权及提高应用的安全性,代码混淆技术成为...

    Android 实现代码混淆的实例

    本文将深入探讨Android代码混淆的原理、实现方法以及如何编写混淆规则。 首先,代码混淆(Obfuscated code)是将源代码转换为难以理解和分析的形式,其目的是增加反编译的难度,尽管不能完全防止反编译。混淆并不...

    Android代码混淆 proguard语法及常用

    新写的proguard代码混淆的文档 大家可以看看

    Android 混淆打包不混淆第三方jar包

    Android混淆打包不混淆第三方jar包Android 混淆打包不混淆第三方jar包

    Android 反编译和代码混淆

    因此,了解并掌握Android的反编译和代码混淆技术对于保护应用的知识产权和用户数据至关重要。 **一、Android反编译** 1. ** Dex2Jar 和 JD-GUI**: Dex2Jar是一个将.dex文件转换为.jar文件的工具,而JD-GUI则是一个...

    android gson 混淆代码 问题

    然而,在混淆代码时,可能会遇到一些问题,导致Gson无法正常工作。本文将深入探讨这些问题及其解决方案。 首先,我们要明白混淆的主要目的是为了减小应用的大小并增加反编译的难度。它会重命名类、方法和变量,这...

    Android 4.0及以上版本 ProGuard 代码混淆

    ### Android 4.0 及以上版本 ProGuard 代码混淆详解 #### 一、ProGuard 简介 ProGuard 是一款广泛应用于 Android 开发中的代码混淆工具,它能够通过删除未使用的类、字段、方法等,从而缩小 APK 的体积,并提高...

    iOS代码混淆工具:Uniapp代码混淆工具和react-native代码混淆

    iOS代码混淆工具,Uniapp代码混淆工具,react-native代码混淆, iOS代码混淆助手,Android代码混淆助手,Uniapp代码混淆助手,过机器审核,过4.3审核,过other审核,android、ios、uniapp、u3d、cocos2dx、flutter、...

Global site tag (gtag.js) - Google Analytics