`

ProGuard

 
阅读更多
ProGuard工具通过移除不用的代码,用语义上混淆的名字来重命名类、字段和方法等手段来压缩、优化和混淆你的代码。结果是更小的.apk文件,并且更难于被反编译。由于ProGuard能够让你的程序难于被反编译,因此,当你的程序使用了一些机密的信息的时,使用它就显得更加重要。

ProGuard已经集成到Android的编译环境中,因此,用不着手动来触发它。ProGuard只在release模式下编译应用程序才会运行,所以,在debug模式下编译,你就不必处理混淆的代码。是否运行ProGuard是完全可选的,但强烈推荐使用。

启用ProGuard
当你创建Android工程时,proguard.cfg文件会在工程的根目录自动创建。这个文件定义了ProGuard如何优化和混淆代码,因此,理解如何定制它是非常重要的。默认的配置文件只是覆盖了一些通用的情况,所以,基本上你需要编辑它来满足你的需求。参考后面的“配置ProGuard”章节来了解如何定制ProGuard的相关信息。

启用ProGuard让它跟随Ant或Eclipse编译时一起运行,你需要在<project_root>/default.properties文件中设置proguard.config属性。路径可以是绝对路径或是工程根目录的相对路径。 如果你把proguard.cfg文件放在默认的位置(工程的根目录),你可以像这样来指定它的位置: proguard.config=proguard.cfg
你还可以把该文件移到任何你想放的位置,然后指定绝对路径:proguard.config=/path/to/proguard.cfg
当你在release模式下编译你的程序,不管是用ant release还是用Eclipse的导出向导,编译系统都会自动检查proguard.config属性是否设置。如果设置了,ProGuard就会在打包成.apk文件之前,自动处理应用程序的字节码。Debug模式编译,不会触发ProGuard,因为它会使得调试更加复杂累赘。

ProGuard运行结束后,输出以下文件: dump.txt
描述.apk文件中所有类文件间的内部结构

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

seeds.txt
列出了未被混淆的类和成员
usage.txt
列出了从.apk中删除的代码

这些文件放在以下文件夹中:
Ant:<project_root>/bin/proguard
Eclipse: <project_root>/proguard

注意:每当你在release模式下编译时,这些文件都会被覆盖重写,当然,是被ProGuard工具生成的最新的文件所覆盖。每次你发布你的程序时,都应该保存一份,为了将来能够解码bug报告。

配置 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”将非常有用。
分享到:
评论

相关推荐

    proguard最新版本proguard6.0.13

    ProGuard是一款广泛使用的Java代码混淆、优化和压缩工具,它能有效地减小应用程序的体积,提高安全性,并且在Android开发中扮演着至关重要的角色。在介绍ProGuard 6.0.13这个最新版本之前,我们先来了解一下ProGuard...

    proguard支持JDK 1.8

    **ProGuard支持JDK 1.8:深入理解与应用** 在Android开发中,为了提高应用程序的安全性和优化代码,我们通常会使用代码混淆工具。ProGuard是一款强大的Java字节码混淆、优化、压缩和预检查工具,它能够帮助开发者...

    proguard-7.2.2.tar.gz

    **ProGuard**是一款广泛使用的Java代码混淆、优化和压缩工具,尤其在Android开发中扮演着重要角色。它的主要目的是为了保护应用程序(APK)的源代码,减少代码大小,提高运行效率,并降低逆向工程的可能性。 **一、...

    SpringBoot + proguard+maven多模块实现代码混淆

    springboot多maven工程结构:proguard-root 是顶级父工程,proguard-modu01、proguard-mudu02是两个业务模块,proguard-server是springboot启动服务类模块,对proguard-modu01、proguard-mudu02两个模块实现proguard...

    proguard6.2.2.zip/proguard6.2.2.rar/proguard6.2.2/proguard

    在标题和描述中提到的"proguard6.2.2.zip/proguard6.2.2.rar/proguard6.2.2/proguard"指的是ProGuard的一个特定版本,即6.2.2版。这个版本包含了ProGuard的完整工具集,供开发者在项目中使用。 在`LICENSE.md`和`...

    springboot工程(单个maven工程)利用proguard实现代码混淆 java demo案例

    ProGuard的配置文件通常命名为`proguard.cfg`,在该文件中,我们可以定义混淆规则,比如保留特定包或类不被混淆,以及设置混淆策略等。 1. **ProGuard配置** 在`proguard.cfg`文件中,我们需要指定哪些类和包需要...

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

    在Android应用开发中,为了保护代码安全和优化应用性能,我们常常会使用Proguard工具进行代码混淆、优化和压缩。本文将深入探讨如何修改Proguard混淆规则,以及如何自定义字符集,以满足特定需求。 Proguard是...

    springboot工程(单个maven工程)利用proguard实现代码混淆

    基于springboot搭建一个简单案例,利用proguard插件实现代码混淆,增加源代码的阅读和理解的难度, 并不能百分百保证代码安全。常用的应用场景是项目需要部署到客户机器上,一定程度上防止代码泄露。 ProGuard 是一个...

    Eclipse+ProGuard配置

    Eclipse+ProGuard配置 Eclipse 是一个基于 Java 的集成开发环境(IDE),ProGuard 是一个 Java 类库和应用程序的保护和优化工具。通过结合使用 Eclipse 和 ProGuard,可以对 Java 应用程序进行混淆、压缩和优化,...

    实现maven管理的Javaweb项目的proguard代码混淆功能

    本文将深入探讨如何在Maven管理的Java Web项目中集成ProGuard工具来实现代码混淆功能,以及在过程中可能遇到的问题及解决方案。 首先,让我们了解什么是ProGuard。ProGuard是一个开源的Java字节码混淆器、优化器和...

    proguard-7.4.0,适合JDK21及以下,官网正版

    ProGuard 7.4.0版本: 这个ZIP文件包含了ProGuard版本7.4.0的所有必要文件和配置。 下载和使用方法: 下载ZIP文件: 点击下载按钮获取proguard-7.4.0.zip文件。确保你选择了适合你操作系统的版本。 解压文件: ...

    Proguard混淆Web项目(Spring+Struts2+Mybatis)

    "Proguard混淆Web项目(Spring+Struts2+Mybatis)"是一个针对这类需求的实践案例,它利用了Proguard这一强大的代码混淆、优化和压缩工具。下面我们将深入探讨Proguard的相关知识点及其在Web项目中的应用。 Proguard...

    Proguard最新版6.0.3

    **ProGuard**是一款广泛使用的Java代码混淆、优化和压缩工具,尤其在Android开发中被大量应用,用于保护应用程序源码安全、减小程序体积并提高运行效率。标题提及的"Proguard最新版6.0.3"是ProGuard的一个更新版本,...

    ProGuard_java_proguard_

    **ProGuard:Java代码混淆与优化工具** ProGuard 是一个强大的免费开源工具,主要用于Java程序的优化、混淆、预校验以及资源收缩。这个工具在软件发布时尤其有用,可以提高代码的安全性和难以逆向工程的程度,同时...

    proguard6.2.2.rar

    ProGuard 是一款强大的Java字节码混淆、优化和压缩工具,尤其在Android开发中被广泛使用,用于保护应用程序代码安全,防止反编译。在6.2.2这个版本中,它提供了对高版本字节码文件的支持,使得开发者能够处理最新的...

    proguard6.2.2_java_proguard6.2.2_

    ProGuard是一款广泛使用的Java代码混淆、优化和压缩工具,其版本6.2.2是它的一个重要里程碑。这款工具在Java开发领域具有重要的地位,尤其是对于Android开发者来说,它是进行应用发布前处理的标准配置,因为它可以...

    proguard6.4.rar

    ProGuard是一款广泛使用的Java字节码混淆、优化、压缩和预校验工具,适用于Android开发以及其他Java应用。在本文中,我们将深入探讨ProGuard 6.4版本的主要特性和使用方法。 首先,让我们理解ProGuard的基本功能。...

    ProGuard4.8使用proguard来保护我们的代码

    **ProGuard 4.8** 是一款强大的Java代码混淆、优化和压缩工具,它能够显著增强应用程序的安全性,防止未经授权的访问和逆向工程。在Java和Android开发中,ProGuard是一个常用的安全措施,用于保护代码不被轻易反编译...

    MavenWEB项目使用ProGuard进行混淆,最佳解决方案.docx

    Maven WEB 项目使用 ProGuard 进行混淆,最佳解决方案 本文主要介绍了如何使用 ProGuard 对 Maven WEB 项目进行混淆,解决了 WEB 项目中混淆的难题。文章首先介绍了混淆的必要性,然后详细介绍了 WEB 项目的结构和 ...

Global site tag (gtag.js) - Google Analytics