`
407827531
  • 浏览: 1073916 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

混淆编译及参数说明

阅读更多

推荐安卓开发神器(里面有各种UI特效和android代码库实例)

之前我曾经写过一篇如何为用ADT创建的Android项目添加Proguard混淆支持的文章(
为Eclipse ADT创建的android项目通过ant添加proguard混淆支持
),当时我就说过,相信随着Google Android的不断更新发展以及Eclipse ADT插件的不断改进,总有一天,做Android项目时能够和J2ME项目一样方便的一键打包混淆。现在新版的SDK和ADT就已经添加了这样的功能(SDK Tools中已经整合了Proguard的发行包,连这步配置都省了!),虽然还不是一键,但也就是小改一个配置文件的事,相对以前的手改ant xml build file的做法来说已经是极大的简化了添加混淆支持的难度了。

先说说我写这篇文章时用的开发环境:Eclipse 3.5.2+ADT 9.0.0+SDK Tools R9+SDK Platform-tools R2。

声明我不保证在其他版本的IDE ADT和SDK Tools下我的方法是否可行且不会产生问题!


有一个问题需要先注意一下,就是现在版本的SDK和ADT的整合Proguard混淆对有空格的SDK路径和项目路径支持不好,所以混淆之前先把空格路径的问题解决一下,虽然我记得之前的手改xml方法好像不太会有空格路径问题,不过这次还是不要在SDK和项目路径中出现空格为好,免得自找没趣。

其实在用比较新版的SDK和ADT创建Android项目时,你会发现生成的项目结构里多了一个以前没有的文件:proguard.cfg,这就是SDK整合了Proguard的一个重要标志(具体从哪版开始变成这样我还真没注意),有兴趣你可以打开看一下,做过原来ant xml方式混淆的朋友可以看出来这里面写的就是当初Proguard混淆target里的混淆设置参数,什么keep啊之类的,当时是要自己写,这次是SDK直接生成好了!

虽然有proguard.cfg,但是默认情况下,混淆是没有启用的,想打开混淆支持,只需要在default.properties中加入这样一段参数:proguard.config=proguard.cfg就可以了(注意:这个文件里的注释写着类似这个文件是自动生成的,所作修改可能会被覆盖等等,让把自定义的东西加到额外的build.properties里,其实也无所谓,盖了也就是一句话的事!),简单明了。

然后在执行项目打包apk时sdk就会自动添加Proguard混淆支持了,可以右键项目->Android Tools->Export Signed (或Unsigned)  Application Package…,生成的apk包可以用如apktool解包看看混淆效果。

PS:其实以前懒得弄Android混淆的一个原因是改xml太麻烦,加点外部lib就得更麻烦的加一些参数,同时还有另一个原因就是混淆的apk发布到market上,如果有用户的机器在程序出错时支持上传trace信息的话,那么你在market上看到的记录都是不可读的混淆后的名字,也是一件麻烦事。后来发现market上提了一句如果用proguard混淆后的apk可以有方法将trace信息反映射回去,成为可读信息的方法,查了一下,发现官方开发网站中就有提到,有兴趣的朋友可以研究一下:http://developer.android.com/guide/developing/tools/proguard.html (有墙,你懂),这样Proguard在Android上的实用性就更好了!


参数:

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

-basedirectory {directoryname}    指定基础目录为以后相对的档案名称

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

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

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

-dontskipnonpubliclibraryclasses    指定不去忽略非公共的库类。

-dontskipnonpubliclibraryclassmembers    指定不去忽略包可见的库类的成员。


保留选项
-keep {Modifier} {class_specification}    保护指定的类文件和类的成员

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

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

-keepnames {class_specification}    保护指定的类和类的成员的名称(如果他们不会压缩步骤中删除)

-keepclassmembernames {class_specification}    保护指定的类的成员的名称(如果他们不会压缩步骤中删除)

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

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

压缩
-dontshrink    不压缩输入的类文件

-printusage {filename}

-whyareyoukeeping {class_specification}    

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

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

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

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

-printmapping {filename}

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

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

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

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

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

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

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

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

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

 

分享到:
评论
1 楼 kobe学java 2012-08-02  
proguard:
     [echo] Execute proguard class flies D:/java/android4.0.3/android-sdk-windows/proguard4.5.1/lib/proguard.jar
      [jar] Building jar: D:\java\project_book\HelloWorld\temp.jar
     [java] Error: Expecting class member name before '}' in argument number 9
D:\java\build\build-book.xml:140: Java returned: 1

我是ant打包的 出现了这个错
140行是<java jar="${proguard-home}/proguard.jar" fork="true" failonerror="true">

知道是什么原因吗?

相关推荐

    Java防编译技术---proguard混淆器

    在使用ProGuard时,我们需要配置一个名为`proguard.cfg`的配置文件,用于指定混淆规则、保留哪些类或方法不混淆,以及优化和压缩的参数。例如,我们可能需要保留一些关键的公共API或者错误处理代码,以避免混淆后...

    Spring Boot + Allatori 代码混淆demo

    4. **执行混淆**:运行Allatori,指定输入(未混淆的JAR文件)和输出(混淆后的JAR文件)路径,以及其他混淆参数。 5. **测试混淆后的应用**:混淆可能会影响程序的正常运行,因此混淆后必须进行全面的功能测试,...

    反编译工具DeZender

    PHP程序在运行时首先会被编译成字节码,然后由PHP解释器执行。DeZender正是利用这一特性,通过读取并分析这些字节码,实现反编译的过程。这个过程涉及到以下几个关键步骤: 1. 字节码解析:DeZender读取.php文件中...

    .Net 脱壳 反混淆神器De4dot-3.1.41592最新版

    Net 脱壳 反混淆神器De4dot-3.1.41592最新版,De4Dot是一个开源的脱壳/反混淆工具,这款工具可以奉为神器级工具。因为它的脱壳能力的确很强,使用它可以成功地脱掉了Dotfuscator、...还原类型的方法的参数和字段

    混淆工具ConfuserEx_bin

    3. **易于使用**:ConfuserEx提供了一个直观的图形用户界面(GUI)和命令行接口,使得设置混淆参数和运行混淆过程变得简单易行。 4. **兼容性好**:ConfuserEx能够处理各种.NET格式的文件,包括.exe、.dll等,同时...

    MyEclipse的jad反编译工具及教程

    虽然JAD能有效地反编译大部分Java字节码,但需要注意的是,反编译的结果可能不会完全匹配原始的源代码,特别是当原始代码进行了混淆或者使用了特定的优化技术时。此外,由于Java的字节码是面向虚拟机的,有些特性如...

    Android资源文件混淆工具

    本文将深入探讨"Android资源文件混淆工具"这一主题,解释混淆的目的、工作原理以及如何使用`resguard-tools`这个工具进行资源文件混淆。 首先,我们要明白混淆的概念。混淆是一种软件保护技术,其目的是使恶意用户...

    IOS混淆完美运行版

    - `disunity.bat` 和 `disunity.sh` 是命令行版本,适用于熟悉命令行操作的开发者,他们可以通过命令行参数来定制混淆过程。 - `disunity.jar` 是核心的混淆库,包含了实际执行混淆任务的Java代码。 - `README.md...

    反编译工具exe2c

    然而,值得注意的是,反编译并不总是能完全恢复原始的源代码,尤其是当原始代码经过混淆、优化或者使用了特定的编译器特性时。但即便如此,反编译仍然是理解软件行为的有效手段。 在获取exe2c的过程中,我们发现这...

    fas2lsp反编译工具包new.zip

    fas2lsp反编译工具包包含一个名为“fas2lsp反编译工具包.txt”的文档,可能提供了关于如何使用该工具的详细说明,包括安装步骤、命令行参数、操作示例等。用户应当首先阅读此文档,以便了解如何正确地运行和利用这个...

    Web项目借助Proguard混淆说明.docx

    Web项目混淆说明 一、概述 ---------------- 本文档旨在介绍基于Proguard软件基础上对Web项目xml、jsp、js文件的混淆过程。该项目的目的是为了防范他人在未经本公司授权允许的情况下,使用发编译软件来编译部署在...

    模块反编译 易语言分析

    通常,我们需要使用专门针对易语言的反编译工具,如“易语言文件分析.exe”,这个工具可能是用来分析和解释易语言编写的程序模块的。 在进行易语言的模块分析时,我们首先需要获取到模块文件,这可能是一个.exe或....

    jad.exe反编译工具及使用说明

    其中,`&lt;class_file_path&gt;`是你想要反编译的.class文件的路径,`options`是可选的参数,如控制输出格式、指定输出目录等。例如,要反编译名为`MyClass.class`的文件,命令可能是: ``` jad MyClass.class ``` 三、...

    asp解密 asp反编译

    2. **反编译工具的使用**:掌握`DecodeScripting_Pro.exe`和`DecodeScripting.exe`的界面操作,如何导入目标文件,设置参数,以及如何解释和理解反编译结果。 3. **代码分析**:反编译出的代码可能不完全等同于原始...

    myeclipse10反编译工具

    然而,需要注意的是,反编译的结果可能不完全等同于原始源代码,尤其是在代码优化或者使用了混淆技术的情况下。 【文件名称列表】"jad"是Java反编译器JAD的简称。JAD是一个流行且功能强大的Java反编译工具,由...

    jad反编译工具 及使用方法

    ** Jad 反编译工具详解及使用指南** Jad 是一款经典的Java字节码反编译工具,它能够将已编译的.class文件转换回可读的Java源代码。这对于软件开发者、逆向工程人员以及那些需要查看或理解已加密或混淆的Java代码的...

    APK反编译工具【java版】

    可能还需要配置一些特定的参数,例如是否保留原始文件结构,或者是否进行混淆代码的逆混淆等。 总之,APK反编译工具对于Android开发者来说是一个宝贵的资源,它可以帮助我们了解已有的应用程序是如何工作的,学习新...

    反编译class文件必备

    在实践中,反编译可能会遇到一些挑战,比如混淆过的代码、内联方法、以及无法完全还原的局部变量信息。但是,通过结合使用不同的反编译工具,配合其他调试辅助工具,如Java的jdb或IDE中的调试功能,开发者依然可以...

    反编译工具jdgui.zip

    Java反编译是将已编译的Java字节码(.class文件)转换回源代码的过程,这在软件逆向工程、调试或分析已加密或混淆的代码时非常有用。"jdgui.zip"是一个包含jd-gui工具的压缩包,它是一款流行且易于使用的Java反...

    jad.exe(java反编译工具)

    1. **易用性**:jad.exe是一个命令行工具,用户可以通过简单的命令行参数来控制反编译过程。 2. **源代码恢复**:jad.exe能够尽可能地恢复原始的Java源代码结构,包括类名、方法名、变量名等,虽然可能无法完全还原...

Global site tag (gtag.js) - Google Analytics