关于proguard.flags的一些知识

一、什么是proguard?

proguard是一个免费的JAVA类文件压缩,优化,混淆器。

它探测并删除没有使用的类,字段,方法和属性,它删除没有用的说明并使用字节码得到最大优化,它使用无意义的名字重命名类,字段和方法。

二、为啥要使用proguard?

1、优化应用:创建紧凑的代码文档是为了更快的网络传输,快速装载和更小的内存占用;

2、防止反向:创建的程序和程序库很难使用反向工程;

3、预处理应用:充分利用JAVA6的快捷加载的优点来提前检测和返回JAVA6中存在的类文件。

三、有些什么参数可用?

1、-include  {filename} 从指定的文件中读取配置参数

2、-basedirectory {directoryname} 指定基础目录为以后相对的档案文件

3、-injars {class_path} 指定要处理的应用程序jar,war,ear的目录

4、-outjars {class_path} 指定处理完后要输出的jar,war,ear目录的名称

5、-libraryjars {class_path} 指定要处理的应用程序jar,war,ear和目录所需要的程序库文件

6、dontskipnonpubliclibraryclasses 指定不去忽略非公共的库类

7、dontskipnonpubliclibraryclassmebmbers 指定不去忽略可见的库类的成员

四、有哪些保留选项?

1、-keep {Modifier} {class_specification} 保护指定的类文件和类的成员

2、-keepclassmembers {Modifier} {class_specification} 保护指定类的成员,如果此类受到保护他们会保护得更好

3、-keepclasseswithmembers {class_specification} 保护指定的类和类的成员,但条件是所有指定的类和类的成员是要存在的

4、-keepnams {class_specification} 保护指定的类的成员和名称(如果他们不会在压缩的过程中被删除)

5、-keepclassmembernames {class_specification} 保护指定类的成员的名称(如果他们不会在压缩的过程中被删除)

6、-keepclasseswithmembersnams {class_specification} 保护指定的类和类成员的名称,如果所有指定的类成员出席(在压缩之后)

7、-printseeds {filename} 列出类和类成员-keep选项的清单,标准输出到给定的文件

五、压缩

1、dontshrink    不压缩输入的类文件

2、printusage {filename}

3、whyareyoukeeping {class_specification}

六、优化

1、-dontoptimize    不优化输入的类文件

2、-assumenosideeffects {class_specification}    优化时假设指定的方法,没有任何副作用

3、-allowaccessmodification    优化时允许访问并修改有修饰符的类和类的成员

七、混淆

1、-dontobfuscate    不混淆输入的类文件

2、-printmapping {filename}

3、-applymapping {filename}    重用映射增加混淆

4、-obfuscationdictionary {filename}    使用给定文件中的关键字作为要混淆方法的名称

5、-overloadaggressively    混淆时应用侵入式重载

6、-useuniqueclassmembernames    确定统一的混淆类的成员名称来增加混淆

7、-flattenpackagehierarchy {package_name}    重新包装所有重命名的包并放在给定的单一包中

8、-repackageclass {package_name}    重新包装所有重命名的类文件中放在给定的单一包中

9、-dontusemixedcaseclassnames    混淆时不会产生形形色色的类名

10、-keepattributes {attribute_name,...}    保护给定的可选属性,例如LineNumberTable, LocalVariableTable, SourceFile, Deprecated, Synthetic, Signature, and InnerClasses.

11、-renamesourcefileattribute {string}    设置源文件中给定的字符串常量

时间: 2024-10-13 01:07:55

关于proguard.flags的一些知识的相关文章

Android 代码混淆 proguard.flags

在我们编译Android系统的user版本的时候,有时候会出现proguard的错误,在解决这个错误之着,我们需要了解一些知识: 1,proguard是用来干什么的? 简单点说,他就是用来做JAVA代码混淆的一个工具. 2,这个东西在哪里实现的? 我们一般会在Android.mk文件中对其进行支持,比如: 1)指定不需要混淆的native方法和变量的proguard.flags文件 LOCAL_PROGUARD_FLAG_FILES := proguard.flags 2)对使用与不使用进行设定

Android Proguard.flags LOCAL_PROGUARD_FLAGS

在Android项目中用到JNI,当用了proguard后,发现native方法找不到很多变量,原来是被produard优化掉了.所以,在JNI应用中该慎用progurad啊. 解决办法: 1.在Android.mk中加入一行: LOCAL_PROGUARD_FLAGS := -include $(LOCAL_PATH)/proguard.flags 2.创建proguard.flag文件,里面写入不需要proguard优化的类和方法.例如: -keep class oms.miracle.mo

user模式下编译android 代码被proguard优化导致类和变量丢失

在Android项目中用到JNI,当用了proguard后,发现native方法找不到很多变量,原来是被produard优化掉了.所以,在JNI应用中该慎用progurad啊. 解决办法: 1.在Android.mk中加入一行: LOCAL_PROGUARD_FLAGS := -include $(LOCAL_PATH)/proguard.flags 2.创建proguard.flag文件,里面写入不需要proguard优化的类和方法.例如: -keep class oms.miracle.mo

Eclipse与Android源码中ProGuard工具的使用

由于工作需要,这两天和同事在研究android下面的ProGuard工具的使用,通过查看android官网对该工具的介绍以及网络上其它相关资料,再加上自己的亲手实践,算是有了一个基本了解.下面将自己的理解和认识简要的做个笔记,有异议或者不解的,可以直接留言. 什么是ProGuard工具? ProGuard是android提供的一个免费的工具,它能够移除工程中一些没用的代码,或者使用语义上隐晦的名称来重命名代码中的类.字段和函数等,达到压缩.优化和混淆代码的功能.具体来说,使用ProGuard工具

Android编译篇

Android的编译系统涉及面极广,包含编译工具.印像文件编译.SDK编译.NDK编译.目标系统配置等多个方面.尽管这些方面的内容烦琐而晦涩,能够參考的资料不多,可是系统设计尤其是系统架构人员必须熟悉它们. 1.源码编译 基于源码的方式进行开发,一般会依据目标环境的不同,对系统配置进行调整,如採用不同的引导器.特定的驱动.不同的文件系统.特定的属性配置等,这就要求开发人员必须熟练掌握源码的编译方法和配置. (1)映像文件 在编译完源码后.须要将生成的文件等打包成对应的文件系统.然后烧写到移动终端

Android - 抑制lint的Android XML的警告:tools:ignore

抑制lint的Android XML的警告:tools:ignore 本文地址:http://blog.csdn.net/caroline_wendy Android的XML经常会出现警告,对于一个良好的程序,应该认真对待所有的警告. 除非我们可以确认警告,才可以排除. 显示所有警告的方法:Analyze -> Inspect Code; 就可以检查出所有的警告: 抑制警告使用: tools:ignore. // 忽略全部 xmlns:tools="http://schemas.andro

android 如何引用@hide(隐藏)的类,方法和常量?

最近在处理SD卡的读写问题,本地Elipse能跑的程序提交到服务器上的时候,报错,找不到import的类,还有一些方法也是找不到,利用sourceInsight搜了源码发现都是用了@hide标记的类和方法. /** * Description of a storage volume and its capabilities, including the * filesystem path where it may be mounted. * * <span style="color:#ff

百度地图开发(2):签名,混淆,32位和64位相关

1. 签名相关: keystore, platform.pk8 <把Android源码中的秘钥对转换为keystore的方法> <Android签名机制之一——签名过程详解> 2. 混淆相关 因为外网限制等原因,我是在工程下mm编译的apk,安装开启应用的时候发现报了很多baidumap相关类找不到method的错误.出现这一错误的原因是因为工程编译通过mk文件开启了混淆,我们需要手动将baidumap相关类忽略掉. proguard.flags # Required for Ac

Android之安全机制

根据android四大框架来解说安全机制 代码安全 java不同于C/C++,java是解释性语言,存在代码被反编译的隐患: 默认混淆器为proguard,最新版本为4.7: proguard还可用来压缩.优化java字节码,删除无用的类.字段.方法.属性.注释等. 配置方法为在Android.mk中设置LOCAL_PROGUARD_FLAG_FILES := proguard.flags packages/apps/Launcher2/proguard.flags //特定方法 -keep c