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/
相关推荐
如何混淆Android项目代码(ProGuard)防止反编译.rar
解决android中混淆代码签名导出报错的proguard.cfg 第三方jar包,可类似 -libraryjars libs/android-support-v4.jar 添加在文件中
ProGuard是一个SourceForge上非常知名的开源项目。官网网址是:http://proguard.sourceforge.net/。 Java的字节码一般是非常容易反编译的。为了很好的保护Java源代码,我们往往会对编译好的class文件进行混淆处理...
它可以混淆Android项目里面的java代码,对的,你没看错,仅仅是java代码。它是无法混淆Native代码,资源文件drawable、xml等。 ProGuard作用 压缩: 移除无效的类、属性、方法等 优化: 优化字节码,并删除未使用的...
高版本Android项目下的proguard-project.txt,里边包含了常规混淆,以及防止第三方混淆的代码。
ProGuard是一个混淆代码的开源项目,它的主要作用是混淆代码,殊不知ProGuard还包括以下4个功能。 压缩(Shrink):检测并移除代码中无用的类、字段、方法和特性(Attribute)。 优化(Optimize):对字节码进行优化,...
介绍了Android代码混淆的三种方法及可能出现的问题.通过jocky或proguard实现jar包混淆;通过proguard实现Android项目整体导出混淆。并总结了一些容易出现的问题
压缩包根目录下有我修改的安卓JAVA项目混淆配置文件,proguard自带的混淆配置文件在SAMPLE目录下,但混淆后运行经常报错,因此根据查阅网上资料做了修改,测试通过。可以作为个性化混淆配置的基础版
studio 使用Proguard进行混淆,其是一个压缩、优化和混淆java字节码文件的一个工具。 功能:Shrinking(压缩)、Optimization(优化)、Obfuscattion(混淆)、Preverification(预校验)四个操作。 优点: 1.删除项目无用的...
1、打开混淆器:找到项目根目录下的project.properties文件,将“#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt”这行前的“#”删除即可; 2、修改混淆配置文件:找到项目...
Android 实现代码混淆的实例 1、简介 代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读和理解的形式的行为。 混淆的目的是为了加大反编译的成本,但是并不能彻底...
2,如果您有使用proguard来混淆Java代码,需要添加以下规则: -dontwarn com.unity3d.** -keep class com.android.client.** { ; } -keep class android.support.** { *; } -keep class com.android.async.** { ...
1. 大家也许都注意到新建一个工程会看到项目下边有这样proguard-project.txt一个文件,这个对混淆代码很重要,如果你不小心删掉了,没关系,从其他地方拷贝一个过来 2. 最重要的就是在proguard-project.txt添加混淆...
android {buildTypes {release {//仅对项目的release构建类型启用代码收缩,混淆和优化。 minifyEnabled true //启用资源缩减,这由// Android Gradle插件执行。 rinkResources true //包含与Android Gradle插件一起...
对于这种情况,我们可以对项目代码进行混淆,随机生成难理解的类名,方法名,让代码难以阅读,加大功能被盗取的难度。混淆可以起到压缩Apk,混淆文件,预检,优化的作用。 1. 使用方式,在gradle文件中设置...
在eclipse自动生成的default.properties文件中加上一句“proguard.config=proguard.cfg”可以对代码进行混淆,反编译后是很难看懂的。把上面的proguard.cfg文件复制一份放到项目中,然后进行相同的操作即可。只是把...
第一步:代码混淆(注意引入的第三方jar) 在新版本的ADT创建项目时,混码的文件不再是proguard.cfg,而是project.properties和proguard-project.txt。 新建一个项目的时候,会自动生成project.properties和proguard-...
单挑Android项目,最近即时通讯用到环信,集成sdk的时候 官方有一句 在 ProGuard 文件中加入以下 keep。 -keep class com.hyphenate.** {*;} -dontwarn com.hyphenate.** 即:混淆规则。 自己没写过关于混淆打包的...
在 Android 项目中设置 Proguard 这是responsiveandroid.com上教程的代码
ProGuard在Android开发中非常流行,但通常也可用于Java代码。 :red_question_mark: 获得帮助如果您有用法或一般性问题,请在中 请使用报告实际错误 :bug: ,崩溃等。 :rocket: 快速开始ProGuard集成在Google的...