`
gjhappyyy
  • 浏览: 259564 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

如何混淆Android项目代码(ProGuard)

 
阅读更多

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。如下所示:

[java] view plaincopy
  1. # This file is automatically generated by Android Tools.  
  2. # Do not modify this file -- YOUR CHANGES WILL BE ERASED!  
  3. #   
  4. # This file must be checked in Version Control Systems.  
  5. #   
  6. # To customize properties used by the Ant build system use,  
  7. "build.properties", and override values to adapt the script to your  
  8. # project structure.  
  9. # Indicates whether an apk should be generated for each density.  
  10. split.density=false  
  11. # Project target.  
  12. target=android-10  
  13. proguard.config=proguard.cfg  

 

这样,Proguard就可以使用了。当我们正常通过Android Tools导出Application Package时,Proguard就会自动启用,优化混淆你的代码。


导出成功后,你可以反编译看看混淆的效果。一些类名、方法名和变量名等,都变成了一些无意义的字母或者数字。证明混淆成功!

 

proguard.cfg配置

 

       稍微深入想一下混淆后的结果,你就会发现,如果一些提供给外部的类、方法、变量等名字被改变了,那么程序本身的功能就无法正常实现。那么Proguard如何知道哪些东西是可以改名,而哪些是不能改变的呢?

       这个是靠proguard.cfg文件来进行配置的。Android工程中默认自动生成的proguard.cfg已经针对Android的一般情况进行了配置,我们打开这个配置文件。内容大概如下:

[java] view plaincopy
  1. 1 -optimizationpasses 5  
  2.  2 -dontusemixedcaseclassnames  
  3.  3 -dontskipnonpubliclibraryclasses  
  4.  4 -dontpreverify  
  5.  5 -verbose  
  6.  6 -optimizations !code/simplification/arithmetic,!field/*,!class/merging/*  
  7.  7 -keep public class * extends android.app.Activity  
  8.  8 -keep public class * extends android.app.Application  
  9.  9 -keep public class * extends android.app.Service  
  10. 10 -keep public class * extends android.content.BroadcastReceiver  
  11. 11 -keep public class * extends android.content.ContentProvider  
  12. 12 -keep public class * extends android.app.backup.BackupAgentHelper  
  13. 13 -keep public class * extends android.preference.Preference  
  14. 14 -keep public class com.android.vending.licensing.ILicensingService  
  15. 15   
  16. 16 -keepclasseswithmembernames class * {  
  17. 17     native <methods>;  
  18. 18 }  
  19. 19   
  20. 20 -keepclasseswithmembernames class * {  
  21. 21     public <init>(android.content.Context, android.util.AttributeSet);  
  22. 22 }  
  23. 23   
  24. 24 -keepclasseswithmembernames class * {  
  25. 25     public <init>(android.content.Context, android.util.AttributeSet, int);  
  26. 26 }  
  27. 27   
  28. 28 -keepclassmembers enum * {  
  29. 29     public static **[] values();  
  30. 30     public static ** valueOf(java.lang.String);  
  31. 31 }  
  32. 32   
  33. 33 -keep class * implements android.os.Parcelable {  
  34. 34   public static final android.os.Parcelable$Creator *;  
  35. 35 }  
  36. 36   

 

 它主要保留了继承自ActivityApplicationServiceBroadcastReceiverContentProviderBackupAgentHelperPreferenceILicensingService的子类。因为这些子类,都是可能被外部调用的。

另外,它还保留了含有native方法的类、构造函数从xml构造的类(一般为View的子类)、枚举类型中的valuesvalueOf静态方法、继承Parcelable的跨进程数据类。

       在实际的一个工程项目中,可能Google自动生成的配置不能胜任我们的混淆工作。所以,我们往往需要自己编写一些ProGuard配置。这方面的资料在官网的Manual -> Usage里有详细说明,大家可以研究一下。http://proguard.sourceforge.net/

【转】http://blog.csdn.net/hustpzb/article/details/6837785

分享到:
评论

相关推荐

    如何混淆Android项目代码(ProGuard)防止反编译.rar

    本教程将深入探讨如何使用ProGuard来混淆Android项目代码,以防止反编译。 一、ProGuard介绍 ProGuard是一款免费的Java类文件 shrinker、optimizer、obfuscator 和 preverifier。它能够减小APK大小,优化字节码,...

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

    ### Android 4.0 及以上版本 ...通过上述步骤,可以有效地解决在 Android 4.0 及以上版本中遇到的 ProGuard 代码混淆问题,无论是对于简单的项目还是那些使用了复杂第三方库的应用程序,都能提供有效的指导和支持。

    Android混淆 各个版本proguard文件

    - `proguard-rules.pro`:这是Android项目中的主要混淆规则文件,开发者可以在此定义自定义的混淆规则,比如保留某些类或方法不被混淆,防止混淆导致的问题。 - `default.pro`:这是Android SDK自带的默认混淆规则...

    java代码混淆器proGuard

    - 对于Android应用,ProGuard是默认的代码混淆工具,防止恶意用户分析和篡改代码。 - 对于服务器端的Java应用,混淆可以增强代码的保密性,减少知识产权泄露的风险。 - 对于开源项目,混淆可以保护作者的劳动成果...

    Android Java代码混淆工具:ProGuard简介及使用.docx

    ### Android Java代码混淆工具:ProGuard的深度解析与实践 #### 概述 在软件开发领域,代码混淆是一项重要的安全措施,特别是在移动应用开发中,它能够保护源代码不被轻易逆向工程,从而增强应用的安全性。在...

    ProGuard工具包,Java代码混淆

    ProGuard是Android和Java平台上的一个强大的开源工具,它能实现代码混淆、优化、压缩以及预校验等功能。本文将深入探讨ProGuard的工作原理、配置与应用。 ### 1. ProGuard概述 ProGuard是一款免费的Java字节码混淆...

    代码混淆工具-proguard7.2.2

    对于非Android项目,ProGuard也可以通过命令行独立使用。 **七、注意事项** 虽然ProGuard可以提高代码的安全性和性能,但如果不正确配置,可能会导致运行时问题。例如,混淆可能导致第三方库的类和方法无法正常...

    修改Proguard混淆规则,自定义字符集

    在Android应用开发中,为了保护代码安全和优化应用性能,我们常常会使用Proguard工具进行代码混淆、优化和压缩。本文将深入探讨如何修改Proguard混淆规则,以及如何自定义字符集,以满足特定需求。 Proguard是...

    Android proguard.cfg

    总的来说,`Android proguard.cfg`是Android项目中不可或缺的一部分,它确保了代码的安全性和效率,同时也增加了应用的反编译难度。理解并正确配置`proguard.cfg`是每个专业Android开发者必须掌握的技能之一。

    最好用的JAVA代码混淆工具proguard-7.0.0.zip

    在Android Studio中,ProGuard的配置通常位于项目的`proguard-rules.pro`文件中,开发者可以根据项目需求自定义混淆规则。 除了基本功能外,ProGuard还提供了一些高级特性,例如类和方法的映射文件,可以用来追踪...

    Java代码混淆工具(proguard4.5.1)

    **预校验**:对于Android应用,ProGuard会执行Dalvik字节码的预校验过程,确保混淆后的代码符合Dalvik虚拟机的规范,防止运行时错误。 使用ProGuard时,我们需要配置ProGuard的规则文件(proguard.cfg或proguard-...

    混淆加密 proguard 5.3.3

    ProGuard 是 Android 和 Java 开发中最广泛使用的混淆工具之一,它能对代码进行优化、混淆、shrinking 和预校验。ProGuard 5.3.3 版本是官方在2017-04-02通过sourceforge发布的最新版,旨在提供更稳定和高效的服务。...

    proguard4.4混淆器

    ProGuard 是一款强大的开源代码混淆、优化和预校验工具,适用于Java和Android开发。在标题中提到的"proguard4.4混淆器"指的是ProGuard的一个特定版本,即4.4版。这个版本主要针对J2ME(Java 2 Micro Edition)和...

    【android开发】混淆打包proguard模板

    ProGuard是一款强大的Java字节码混淆、优化、预校验和分析工具,它可以为我们的Android项目提供必要的保护,防止恶意逆向工程分析。本文将深入探讨"【android开发】混淆打包proguard模板"的相关知识点。 一、...

    proguard混淆步骤操作流程

    ProGuard是一款强大的Java字节码处理工具,常用于Android应用的代码混淆、优化、压缩和预校验。在开发过程中,为了保护代码安全,避免反编译,开发者通常会使用ProGuard进行混淆,使得源代码变得难以理解。下面将...

    proguard程序混淆器

    不过,对于J2ME项目,ProGuard仍然是首选的混淆工具。 总之,ProGuard作为一款强大的Java代码处理工具,对于保护J2ME应用的源代码安全、提升运行效率起到了关键作用。掌握其使用和配置技巧,对于任何J2ME开发者来说...

    解决android中混淆代码签名导出报错的proguard.cfg

    解决android中混淆代码签名导出报错的proguard.cfg 第三方jar包,可类似 -libraryjars libs/android-support-v4.jar 添加在文件中

    androidStudio代码混淆插件AndroidProguard

    Android Studio是一款广泛使用的Android应用程序开发集成环境,而代码混淆是其中的一个重要环节,尤其是在发布应用时,为了提高代码的安全性和减少体积,通常会使用到Proguard工具。AndroidProguard插件则是为...

    proguard,代码混淆

    在Android开发中,ProGuard还可以进行预校验,检查混淆后的代码是否符合Dalvik虚拟机的要求,避免因混淆导致的运行时错误。 **6. 使用流程:** 在Android Studio中,ProGuard的集成使得混淆变得简单。只需在build....

    java 混淆工具proguard5.3.3

    Java混淆工具ProGuard是Java开发中的一个重要组件,主要用于保护应用程序的源代码,防止逆向工程分析,同时也可优化代码,减小程序体积。在Android开发中,它被广泛应用于APK的发布过程,确保代码安全并提高运行效率...

Global site tag (gtag.js) - Google Analytics