ProGuard简介
ProGuard是一个SourceForge上非常知名的开源项目。官网网址是:http://proguard.sourceforge.net/。
Java的字节码一般是非常容易反编译的。为了很好的保护Java源代码,我们往往会对编译好的class文件进行混淆处理。ProGuard的主要作用就是混淆。当然它还能对字节码进行缩减体积、优化等,但那些对于我们来说都算是次要的功能。
Android Eclipse开发环境与ProGuard
在Android 2.3以前,混淆Android代码只能手动添加proguard来实现代码混淆,非常不方便。而2.3以后,Google已经将这个工具加入到了SDK的工具集里。具体路径:SDK\tools\proguard。当创建一个新的Android工程时,在工程目录的根路径下,会出现一个proguard的配置文件proguard.cfg。也就是说,我们可以通过简单的配置,在我们的elipse工程中直接使用ProGuard混淆Android工程。
具体混淆的步骤非常简单。首先,我们需要在工程描述文件default.properties中,添加一句话,启用ProGuard。如下所示:
- # This file is automatically generated by Android Tools.
- # Do not modify this file -- YOUR CHANGES WILL BE ERASED!
- #
- # This file must be checked in Version Control Systems.
- #
- # To customize properties used by the Ant build system use,
- # "build.properties", and override values to adapt the script to your
- # project structure.
- # Indicates whether an apk should be generated for each density.
- split.density=false
- # Project target.
- target=android-10
- proguard.config=proguard.cfg
这样,Proguard就可以使用了。当我们正常通过Android Tools导出Application Package时,Proguard就会自动启用,优化混淆你的代码。
导出成功后,你可以反编译看看混淆的效果。一些类名、方法名和变量名等,都变成了一些无意义的字母或者数字。证明混淆成功!
proguard.cfg配置
稍微深入想一下混淆后的结果,你就会发现,如果一些提供给外部的类、方法、变量等名字被改变了,那么程序本身的功能就无法正常实现。那么Proguard如何知道哪些东西是可以改名,而哪些是不能改变的呢?
这个是靠proguard.cfg文件来进行配置的。Android工程中默认自动生成的proguard.cfg已经针对Android的一般情况进行了配置,我们打开这个配置文件。内容大概如下:
- 1 -optimizationpasses 5
- 2 -dontusemixedcaseclassnames
- 3 -dontskipnonpubliclibraryclasses
- 4 -dontpreverify
- 5 -verbose
- 6 -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
- 7 -keep public class * extends android.app.Activity
- 8 -keep public class * extends android.app.Application
- 9 -keep public class * extends android.app.Service
- 10 -keep public class * extends android.content.BroadcastReceiver
- 11 -keep public class * extends android.content.ContentProvider
- 12 -keep public class * extends android.app.backup.BackupAgentHelper
- 13 -keep public class * extends android.preference.Preference
- 14 -keep public class com.android.vending.licensing.ILicensingService
- 15
- 16 -keepclasseswithmembernames class * {
- 17 native <methods>;
- 18 }
- 19
- 20 -keepclasseswithmembernames class * {
- 21 public <init>(android.content.Context, android.util.AttributeSet);
- 22 }
- 23
- 24 -keepclasseswithmembernames class * {
- 25 public <init>(android.content.Context, android.util.AttributeSet, int);
- 26 }
- 27
- 28 -keepclassmembers enum * {
- 29 public static **[] values();
- 30 public static ** valueOf(java.lang.String);
- 31 }
- 32
- 33 -keep class * implements android.os.Parcelable {
- 34 public static final android.os.Parcelable$Creator *;
- 35 }
- 36
它主要保留了继承自Activity、Application、Service、BroadcastReceiver、ContentProvider、BackupAgentHelper、Preference和ILicensingService的子类。因为这些子类,都是可能被外部调用的。
另外,它还保留了含有native方法的类、构造函数从xml构造的类(一般为View的子类)、枚举类型中的values和valueOf静态方法、继承Parcelable的跨进程数据类。
在实际的一个工程项目中,可能Google自动生成的配置不能胜任我们的混淆工作。所以,我们往往需要自己编写一些ProGuard配置。这方面的资料在官网的Manual -> Usage里有详细说明,大家可以研究一下。http://proguard.sourceforge.net/
相关推荐
本教程将深入探讨如何使用ProGuard来混淆Android项目代码,以防止反编译。 一、ProGuard介绍 ProGuard是一款免费的Java类文件 shrinker、optimizer、obfuscator 和 preverifier。它能够减小APK大小,优化字节码,...
### Android 4.0 及以上版本 ...通过上述步骤,可以有效地解决在 Android 4.0 及以上版本中遇到的 ProGuard 代码混淆问题,无论是对于简单的项目还是那些使用了复杂第三方库的应用程序,都能提供有效的指导和支持。
- `proguard-rules.pro`:这是Android项目中的主要混淆规则文件,开发者可以在此定义自定义的混淆规则,比如保留某些类或方法不被混淆,防止混淆导致的问题。 - `default.pro`:这是Android SDK自带的默认混淆规则...
- 对于Android应用,ProGuard是默认的代码混淆工具,防止恶意用户分析和篡改代码。 - 对于服务器端的Java应用,混淆可以增强代码的保密性,减少知识产权泄露的风险。 - 对于开源项目,混淆可以保护作者的劳动成果...
### Android Java代码混淆工具:ProGuard的深度解析与实践 #### 概述 在软件开发领域,代码混淆是一项重要的安全措施,特别是在移动应用开发中,它能够保护源代码不被轻易逆向工程,从而增强应用的安全性。在...
ProGuard是Android和Java平台上的一个强大的开源工具,它能实现代码混淆、优化、压缩以及预校验等功能。本文将深入探讨ProGuard的工作原理、配置与应用。 ### 1. ProGuard概述 ProGuard是一款免费的Java字节码混淆...
对于非Android项目,ProGuard也可以通过命令行独立使用。 **七、注意事项** 虽然ProGuard可以提高代码的安全性和性能,但如果不正确配置,可能会导致运行时问题。例如,混淆可能导致第三方库的类和方法无法正常...
在Android应用开发中,为了保护代码安全和优化应用性能,我们常常会使用Proguard工具进行代码混淆、优化和压缩。本文将深入探讨如何修改Proguard混淆规则,以及如何自定义字符集,以满足特定需求。 Proguard是...
总的来说,`Android proguard.cfg`是Android项目中不可或缺的一部分,它确保了代码的安全性和效率,同时也增加了应用的反编译难度。理解并正确配置`proguard.cfg`是每个专业Android开发者必须掌握的技能之一。
在Android Studio中,ProGuard的配置通常位于项目的`proguard-rules.pro`文件中,开发者可以根据项目需求自定义混淆规则。 除了基本功能外,ProGuard还提供了一些高级特性,例如类和方法的映射文件,可以用来追踪...
**预校验**:对于Android应用,ProGuard会执行Dalvik字节码的预校验过程,确保混淆后的代码符合Dalvik虚拟机的规范,防止运行时错误。 使用ProGuard时,我们需要配置ProGuard的规则文件(proguard.cfg或proguard-...
ProGuard 是 Android 和 Java 开发中最广泛使用的混淆工具之一,它能对代码进行优化、混淆、shrinking 和预校验。ProGuard 5.3.3 版本是官方在2017-04-02通过sourceforge发布的最新版,旨在提供更稳定和高效的服务。...
ProGuard 是一款强大的开源代码混淆、优化和预校验工具,适用于Java和Android开发。在标题中提到的"proguard4.4混淆器"指的是ProGuard的一个特定版本,即4.4版。这个版本主要针对J2ME(Java 2 Micro Edition)和...
ProGuard是一款强大的Java字节码混淆、优化、预校验和分析工具,它可以为我们的Android项目提供必要的保护,防止恶意逆向工程分析。本文将深入探讨"【android开发】混淆打包proguard模板"的相关知识点。 一、...
ProGuard是一款强大的Java字节码处理工具,常用于Android应用的代码混淆、优化、压缩和预校验。在开发过程中,为了保护代码安全,避免反编译,开发者通常会使用ProGuard进行混淆,使得源代码变得难以理解。下面将...
不过,对于J2ME项目,ProGuard仍然是首选的混淆工具。 总之,ProGuard作为一款强大的Java代码处理工具,对于保护J2ME应用的源代码安全、提升运行效率起到了关键作用。掌握其使用和配置技巧,对于任何J2ME开发者来说...
解决android中混淆代码签名导出报错的proguard.cfg 第三方jar包,可类似 -libraryjars libs/android-support-v4.jar 添加在文件中
Android Studio是一款广泛使用的Android应用程序开发集成环境,而代码混淆是其中的一个重要环节,尤其是在发布应用时,为了提高代码的安全性和减少体积,通常会使用到Proguard工具。AndroidProguard插件则是为...
在Android开发中,ProGuard还可以进行预校验,检查混淆后的代码是否符合Dalvik虚拟机的要求,避免因混淆导致的运行时错误。 **6. 使用流程:** 在Android Studio中,ProGuard的集成使得混淆变得简单。只需在build....
Java混淆工具ProGuard是Java开发中的一个重要组件,主要用于保护应用程序的源代码,防止逆向工程分析,同时也可优化代码,减小程序体积。在Android开发中,它被广泛应用于APK的发布过程,确保代码安全并提高运行效率...