`
lhq1013
  • 浏览: 87962 次
  • 性别: Icon_minigender_2
  • 来自: 丽水
社区版块
存档分类
最新评论

Android之ProGuard混淆器

阅读更多

参考自:

http://android.tgbus.com/Android/tutorial/201107/358743.shtml

http://hi.baidu.com/benbearlove/blog/item/aaa36de671f3153db93820e2.html

 

ProGuard是一个压缩、优化和混淆Java字节码文件的免费的工具,它可以删除无用的类、字段、方法和属性。可以删除没用的注释,最大限度地优化字节码文件。它还可以使用简短的无意义的名称来重命名已经存在的类、字段、方法和属性。这样做的结果是更小的jarapk……,并且更难被反编译。

Android的编译环境中已默认集成了Proguard,但只有在release模式下编译才会运行。此状态下,它会在用到ant release或是Eclipse的导出向导时,自动检查proguard.config属性是否已设置,如果设置了,ProGuard就会在打成包之前,自动处理程序的字节码。Debug模式下,之所以不触发,是因为混淆后的代码会使得调试变得更加累赘。

 

准备工作:

1、切换到release模式

Eclipse默认的Java Compile环境是Debug模式,切换到release模式只需右击工程,选择属性,在“Properties for ProjectName”窗口中将“Java Compile”——>”Classfile Generation”中的debug选项去除,点击【Apply】,点【OK】关闭窗口即可生效。

2、  准备keystore

Android规定所有程序必须签名,否则就不会安装。所以在混淆打包过程中会有签名这一选项,此过程需要用到keystore。如果keystore已存在,或是在过程中ADT已经自动用keytool生成了,就不需要重新再生成了;如果没有的话,可用jdk/bin目录下的keytool自己生成一个,示例如下:

D:\Program Files\Java\jdk1.6.0_17\bin>keytool -genkey -alias android.keystore -keyalg RSA -validity 20000 -keystore android.keystore

 

 

其中参数-validity为证书有效天数,这里我们写的大些10000天。还有在输入密码时没有回显(尽管输就是啦) 并且 退格,tab等都属于密码内容,这个密码在给.apk文件签名的时候需要.

 

 

设置proguard.config属性:

         在创建Android工程时,proguard.cfg文件会在根目录自动被创建,该文件定义了ProGuard如何优化和混淆代码。其默认的配置只覆盖了一些通用的情况,但也满足了基本的需求;如需深入定制,还需参考相关的配置文档。

         默认情况下,proguard.config属性是未被设置的,如需启用,则在工程根目录下的default.properties文件中设置,其路径可以是相对路径或是绝对路径。

书写形式如可以是这样的:

proguard.config=proguard.cfg

 

 

 

也可以将proguard.cfg文件放到别处,然后指定路径:

proguard.config=/path/to/proguard.cfg

  

 

 

 

混淆打包:

release模式下,有如下几种导出方式:

1、右击工程->android tools->export signed android package生成签名的包,

2、右击工程——>Export选择导出类型

3ant release

 

混淆成功后,除生成了指定类型的混淆包外,还会在工程的根目录下或是根目录下得bin文件夹中生成proguard文件夹,里面包含dump.txtmapping.txtseeds.txtusage.txt四个文件。

dump.txt

描述.apk文件中所有类文件间的内部结构

 

mapping.txt

列出了原始的类,方法和字段名与混淆后代码间的映射。这个文件很重要,当你从release版本中收到一个bug报告时,可以用它来翻译被混淆的代码。

 

seeds.txt

列出了未被混淆的类和成员

 

usage.txt

列出了从.apk中删除的代码

 

 

配置 ProGuard

一些情况下,proguard.cfg文件中的默认配置就足够了。然而,有些情况ProGuard也很难正确分析,它可能会删除它认为不用的代码,但实际上正是你的程序所需要的。

例如:

只在AndroidManifest.xml文件中引用的类

JNI调用的方法

动态引用的字段和方法

 

默认的proguard.cfg文件努力去覆盖通用的情况,但有可能你会遇到如ClassNotFoundException这样的异常,而这正好是由于ProGuard移除了整个类造成的。

你可以修正由于ProGuard移除代码造成的错误,只需要在proguard.cfg文件中添加一行“-keep”。例如:

 -keep public class <MyClass>

 

 

使用-keep选项时,有一些选项和建议,因此,强烈建议你阅读ProGuard手册来了解更多关于定制配置文件的信息。“Overview of Keep options”“Examples section”将非常有用

分享到:
评论
1 楼 luoxiangyu001 2011-11-13  
在使用proguard混淆代码的时候出现了错误:Android Release Export has encountered a problem.   Conversion to Dalvik format failed with error 1.请问该怎么解决呀

相关推荐

    android-proguard-snippets, 通用Android库的混淆器配置.zip

    android-proguard-snippets, 通用Android库的混淆器配置 android-proguard-snippets通用Android库的混淆器配置。这个项目假设你的混淆器配置是基于最新的官方 proguard-android.txt 配置,如下所示。 每个库配置应该...

    android proguard5.3.3混淆包

    android proguard5.3.3混淆包 替换Jar包以后使 混淆的类名方法名变成空白 使用方法 直接 替换 5.3.3版本的 混淆jar包 Mac 路径为 Contents/gradle/m2repository/net/sf/proguard/proguard-base Win gradle/m2...

    修改Proguard混淆规则,自定义字符集

    总的来说,修改Proguard混淆规则和自定义字符集是Android开发中的重要技巧。正确设置混淆规则可以保证代码的安全性,同时避免混淆导致的运行时错误。对于处理非ASCII字符,我们可以通过编写辅助类并保持其不被混淆来...

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

    Java防编译技术是开发过程中保护源代码安全性和技术保密性的重要手段,而ProGuard混淆器正是其中的关键工具。ProGuard是一款开源的Java字节码混淆、优化、压缩和预校验工具,它能帮助开发者有效地减少应用的体积,...

    Android添加Proguard混淆支持完整实例

    以下是一个基于Android SDK 1.5和Eclipse 3.5的Proguard混淆支持完整实例的详细说明。 首先,我们需要理解Proguard的基本配置。Proguard的配置文件通常命名为`proguard-project.txt`或`proguard.cfg`,位于项目的根...

    proguard混淆器

    ProGuard是一款强大的Java类文件混淆、优化、压缩和预校验工具,广泛应用于Android应用开发中,用于保护代码安全、减小程序体积并提高运行效率。它通过对类名、方法名和变量名进行重命名,使得代码变得难以阅读,...

    proguard程序混淆器

    **ProGuard程序混淆器详解** ProGuard是一款强大的Java字节码处理工具,主要功能包括代码混淆、优化、压缩和预校验。它被广泛应用于Android应用开发中,用于保护源代码的安全性和减小程序体积,提高运行效率。在...

    proguard混淆步骤操作流程

    ProGuard是一款强大的Java字节码处理...总之,ProGuard混淆是Android开发中的重要环节,它能提高应用的安全性,但同时也需要谨慎处理,避免因混淆导致的问题。熟悉混淆规则和错误排查方法,是每个开发者必备的技能。

    proguard4.4混淆器

    对于Android开发,ProGuard与R8混淆器一起使用,R8是Google推出的新一代代码混淆工具,速度更快,但ProGuard 4.4在某些特定场景下仍然有其价值。 在实际使用ProGuard 4.4时,需要注意以下几点: - **保留关键类和...

    ant proguard 混淆编译 之Eclipse-Idea

    5. 运行Ant构建,使用`ant release`命令,它将执行ProGuard混淆过程并生成release版本的APK。 在IntelliJ IDEA中配置ProGuard: 1. IDEA虽然主要使用Gradle作为默认的构建系统,但仍然可以通过引入Ant支持来使用...

    Android 4.0及以上版本 ProGuard 代码混淆

    ### Android 4.0 及以上版本 ProGuard 代码混淆详解 #### 一、ProGuard 简介 ProGuard 是一款广泛应用于 Android 开发中的代码混淆工具,它能够通过删除未使用的类、字段、方法等,从而缩小 APK 的体积,并提高...

    Java Jar包混淆器proguard.v3.8

    Java的Jar包混淆器ProGuard v3.8是一款强大的代码优化和保护工具,主要用于Java和Android应用程序。在软件开发过程中,源代码的安全性和保密性至关重要,而ProGuard提供了一种有效的解决方案,它能够对编译后的字节...

    利用混淆器ProGuard混淆java类,防止反编译

    通过以上步骤,你可以有效地使用ProGuard混淆你的Java类,提升代码安全性。不过,混淆并不是绝对的安全保障,配合其他安全措施,如代码签名、加密和服务器端验证,才能构建一个更为坚固的防线。记得持续关注ProGuard...

    idfc-proguard混淆优化demo1

    【标题】"idfc-proguard混淆优化demo1"是一个示例项目,主要展示了如何使用Proguard工具对Android或Java应用进行代码混淆和性能优化。在Android开发中,Proguard是常用的代码混淆工具,它能够缩小APK大小,保护源...

    Android混淆 各个版本proguard文件

    在Android应用开发中,安全性和性能优化是至关重要的环节,其中混淆(Proguard)就是一种常用的工具,用于保护代码安全并减小程序体积。本篇将详细介绍Android混淆以及各个版本的Proguard文件,帮助开发者理解其工作...

    ant proguard 混淆编译 之Netbeans

    在Android应用开发中,为了保护代码安全和优化应用程序,我们经常使用ProGuard工具进行混淆、压缩和优化。本文主要探讨如何在NetBeans环境下配置Ant构建系统来实现ProGuard的混淆编译过程。 首先,理解ProGuard是...

    java代码混淆器proGuard

    Java代码混淆器ProGuard是Java开发中用于保护和优化应用程序的重要工具。它的主要功能是对Java字节码进行混淆,使得代码难以被逆向工程解析,从而提高代码的安全性。混淆过程中,函数变量、类和方法名会被重命名为...

    Proguard混淆Android/Java源代码

    ProGuard是一个广泛使用的Java类文件压缩、优化和混淆工具,能够减少生成的类文件大小,并对字节码进行混淆,提高应用的安全性。它通过移除无用的类、字段、方法和属性,优化字节码,将类名、方法名和变量名等转换为...

    【android开发】混淆打包proguard模板

    ProGuard是一款强大的Java字节码混淆、优化、预校验和分析工具,它可以为我们的Android项目提供必要的保护,防止恶意逆向工程分析。本文将深入探讨"【android开发】混淆打包proguard模板"的相关知识点。 一、...

    idfc-proguard混淆优化注解形式demo3

    在这个“idfc-proguard混淆优化注解形式demo3”项目中,我们将探讨如何利用Proguard与SSH(Struts2、Spring4、Hibernate4)框架集成,通过注解方式实现优化和混淆。 首先,SSH是一个常见的企业级Java Web开发框架...

Global site tag (gtag.js) - Google Analytics