博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android Java混淆(ProGuard)
阅读量:5834 次
发布时间:2019-06-18

本文共 2499 字,大约阅读时间需要 8 分钟。

本文转载别人博客,转载请注明出处:

ProGuard简介

       ProGuard是一个SourceForge上非常知名的开源项目。官网网址是:。

       Java的字节码一般是非常容易反编译的。为了很好的保护Java源代码,我们往往会对编译好的class文件进行混淆处理。ProGuard的主要作用就是混淆。当然它还能对字节码进行缩减体积、优化等,但那些对于我们来说都算是次要的功能。

       引用ProGuard官方的一段话来介绍就是:

       ProGuard is a free Java class file shrinker, optimizer, obfuscator, and preverifier. It detects and removes unused classes, fields, methods, and attributes. It optimizes bytecode and removes unused instructions. It renames the remaining classes, fields, and methods using short meaningless names. Finally, it preverifies the processed code for Java 6 or for Java Micro Edition.

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

 

 

 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里有详细说明。大家可以研究一下。

参考资料

《》

 

 转载请注明出处:

你可能感兴趣的文章
Chromium Embedded Framework 中文文档(简介)
查看>>
寄生构造函数——扩展原生数组
查看>>
BaseAdapter 注意的关键点!
查看>>
FusionChart实现金字塔分布图
查看>>
斗地主算法的设计与实现–对牌进行排序
查看>>
【转】C++中继承中的同名成员问题
查看>>
FineUI(专业版)公测版发布(这速度,真TM快!)
查看>>
Jade报错:Invalid indentation,you can use tabs or spaces but not both问题
查看>>
poj1458
查看>>
CYQ.Data V5 文本数据库支持SQL语句操作(实现原理解说)
查看>>
下一个十年计划3-选择
查看>>
Linux 查看内核版本命令的相关说明
查看>>
《转》谈谈自媒体
查看>>
SharePoint 2013 Designer系列之数据视图
查看>>
JavaScript------入门
查看>>
ZeroMQ(java)中组件间数据传输(Pipe的实现)
查看>>
新浪微博客户端(50)-解决输入Emotion表情逐渐变小的问题
查看>>
一个很不错的jQuery弹出窗口插件Facebox
查看>>
沪金融紧缺人才目录今发布 上海将加大力度引进金融人
查看>>
一起谈.NET技术,Silverlight 游戏开发小技巧:动感小菜单2
查看>>