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/
- android实用工具之ProGuard
- Android 实用工具之HierarchyViewer
- Android 实用工具之emulator
- Android混淆之ProGuard
- Android之Proguard语法
- Android之ProGuard混淆器
- Android之ProGuard混淆器
- android 代码混淆之proguard
- Android 之 打包混淆ProGuard
- Android实用工具之二—APK工具
- Android开发实用工具类之Log类
- Android实用工具
- Android 实用工具
- Android实用工具
- Android进阶之ProGuard代码混淆
- Android中代码混淆之proguard
- Android & proguard
- android proguard
- 【安卓开发】Layout Inflation不能这么用
- php(1)——基本语法
- C#小数保留N位
- ubuntu下安装boost库
- ORACLE中关于CONNECT,RESOURCE,DBA的授权
- android实用工具之ProGuard
- Android中如何处理未捕获的异常
- 一个项目中用到的50个SQL语句
- 在CentOS上搭建C开发环境
- Android Touch事件传递机制
- Ubuntu crontab讲解
- 札记 2 (15.3.23 )
- 自定义的Viewpager的CustomViewPager
- c++中, 构造函数和析构函数的执行顺序