android实用工具之ProGuard

来源:互联网 发布:mac如何添加网页收藏 编辑:程序博客网 时间:2024/04/28 07:54

一ProGuard是什么,用来干什么用的?

     ProGuard的是一个免费的Java类文件压缩,优化,混淆,以及预校验器,可以移除无用代码或者使用语意模糊的名称来重命名类、变量和方法。这样生成的apk体积更小,并且不易被逆向工程,就是通常我们所说的反编译。

二、android中的ProGuard配置

 1、android中启用porguard:

  

当新建一个android项目时,在工程目录的根路径下,会出现一个proguard的配置文件proguard-project.txt。(另外有的生成混淆的工程文件是proguard.cfg ,这个没关系文件名不一样而已)在我们的elipse工程中通过简单配置可直接使用ProGuard混淆Android工程:我们需要在工程描述文件上图中project.properties中,添加一句话,启用ProGuard:

proguard.config=proguard-project.txt
2、proguard-project.txt文件说明

android,Proguard的配置位于proguard-project.txt文件中,默认的配置如下:

-optimizationpasses 5  //优化选项配置,优化和压缩的比率
-dontusemixedcaseclassnames //混淆选项,表明不要混合使用大小写类名,其他混合选项还有:-dontobfuscate,-printmapping [filename]等十几种混合配置方式

-dontskipnonpubliclibraryclasses  //输入输出配置项,表明不忽略非公共库类,即说明及时是jar包也给混淆
-dontpreverify
-verbose// 通用的配置项,表示在进行混淆时,打印出详细的信息。
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*

//keep 保持选项,告诉proguard某些类、方法等不能被混淆
-keep public class * extends android.app.Activity  //表示Activity类及子类不被混淆。
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService

//指定包含某些成员变量的类不混淆,这里是指所有类中包含native方法不被混淆
-keepclasseswithmembernames class * {
    native <methods>;
}
//指定包含某些构造方法的类不混淆

-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet);
}


-keepclasseswithmembernames class * {
    public <init>(android.content.Context, android.util.AttributeSet, int);
}

//枚举类不混淆
-keepclassmembers enum * {
    public static **[] values();
    public static ** valueOf(java.lang.String);
}


-keep class * implements android.os.Parcelable {
  public static final android.os.Parcelable$Creator *;
}

这是配置文件中的一些默认配置,规定了压缩、混淆、去除的一些类,还规定了哪些类不能被混淆。

3、配置android,发布正式版本时,移除日志记录:这里主要是配置优化选项中的-assumenosideeffects 参数,指定某些类或者函数不起作用。

配制方法为:

-assumenosideeffects class android.util.Log {
    public static boolean isLoggable(java.lang.String, int);
    public static int v(...);
    public static int i(...);
    public static int w(...);
    public static int d(...);
    public static int e(...);
}

这样告诉proguard移除android.util.Log中一下方法。因此相关调试日志都会被移除。这只是一个简单的优化方法,还有许多其他可以使用,在用的过程中很可能会出现错误,再进行优化改进时,还需要耐心调试,也需要认真阅读一下proguard用户手册。

参考文档:http://proguard.sourceforge.net/

0 0
原创粉丝点击