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”将非常有用。
分享到:
相关推荐
本实例教程将探讨如何使用Android API实现人脸检测功能,并提供了完整的源码供学习参考。源码包含以下几个关键文件: 1. `proguard.cfg`:这是Android项目的ProGuard配置文件,用于在构建Release版本时进行代码混淆...
本教程将围绕“Android开发API人脸检测实例”展开,详细介绍如何在Android应用中实现这一功能。 首先,人脸检测是利用计算机视觉技术来分析图像或视频流,找到并识别出人脸的位置和方向。在Android中,我们可以使用...
这个压缩包“安卓Android源码——开发API人脸检测实例教程.zip”包含了创建一个基于Android的人脸检测应用的所有必要文件和配置,旨在帮助开发者实现这一功能。下面我们将深入探讨其中涉及的关键知识点。 1. **...
本教程专注于使用API进行人脸检测的实例,通过这份压缩包,我们可以深入理解Android中的人脸检测技术及其应用。以下是该教程可能涉及的关键知识点: 1. **Android SDK**: Android软件开发工具包(SDK)是开发安卓...
通过学习这个实例,开发者可以深入理解如何在Android应用中集成和使用计算机视觉技术。下面将详细探讨相关知识点。 1. **Android SDK和API使用**:人脸检测功能依赖于Android SDK中的Vision API,这是一个强大的...
这个文档通常会包含实例教程,介绍如何设置基本的混淆规则,以及如何处理可能出现的问题,如依赖库的处理、泛型和注解的处理等。 在实际项目中,ProGuard常与构建工具如Maven或Gradle集成,通过在构建脚本中添加...
**基于Android Studio的项目实例详解** Android Studio是Google推出的一款集成开发环境(IDE),专为Android应用开发设计,它提供了高效、便捷的开发工具,帮助开发者快速构建高质量的应用。本项目实例将深入探讨...
以上只是《Android开发教程笔记完全版》的部分核心内容,实际教程中还包括更详细的技术点、实例演示和最佳实践。这份教程对于任何想要投身Android开发的程序员来说,都是一份宝贵的参考资料。通过系统学习,开发者...
本教程将详细介绍如何在Android Studio中手动创建并生成Dex文件源码,这对于理解Android应用的编译过程以及进行动态加载优化具有重要意义。 首先,了解Dex文件的生成过程。当我们在Android Studio中构建一个项目时...
除了Android Studio自带的ProGuard和R8,还有第三方工具如腾讯的AndResGuard和阿里巴巴的Alluxio,它们提供了更丰富的加固策略,如资源加密、动态加载等。 5. 自动化流程: `ItemDecorationDemo-master`可能不仅...
《Android System Programming》是关于深入理解并开发Android系统的关键教程,尤其适合那些希望从底层机制探索Android系统的开发者和研究人员。本书英文版提供了丰富的技术细节,帮助读者掌握Android系统的内部工作...
总的来说,《Android Studio实战快速高效地构建Android应用》是一本全面而深入的教程,无论你是初学者还是有一定经验的开发者,都能从中受益匪浅。通过阅读和实践,你将能够快速上手Android Studio,高效地构建出高...
通过详细讲解和实例演示,让学习者能够理论结合实践,提升Android开发能力。 首先,环境搭建是Android应用开发的第一步,书中会介绍如何安装和配置Android Studio,这是Google官方提供的集成开发环境(IDE),包括...
这个“实战Android应用”很可能包含了从基础到高级的Android开发实例,帮助开发者提升技能,理解如何构建实际的Android应用程序。 描述中提到的是代码,这意味着压缩包可能包含了一系列的源代码文件,这些文件可能...
这个压缩包很可能会包含一系列教程、代码示例、项目模板,甚至是完整的Android项目实例,帮助开发者从理论到实践全面掌握Android开发。通过学习和实践这些内容,开发者可以建立起坚实的Android开发基础,并逐步提升...
综上所述,"健身助手"的源码是一个全面的Android开发实例,涵盖了从基础架构到高级功能的多个技术层面,对于学习和研究Android应用开发具有很高的价值。开发者可以从中学习到如何构建一个完整的Android应用,以及...
《Android应用开发详解》是一本全面且深入的教程,旨在帮助开发者掌握Android应用程序的设计与实现。这本书涵盖了Android开发的各个方面,从基础知识到高级技术,包括环境搭建、UI设计、数据存储、网络通信、多线程...
本教程将详细介绍如何在ListView中实现带标题栏的效果。标题栏通常用于显示分类信息或者操作按钮,为用户提供更好的交互体验。以下是对实现这一功能的详细步骤的阐述: 1. **创建布局文件** 首先,我们需要为每个...
总之,《Google+Android开发入门与实战》是一本全面而实用的教程,它不仅覆盖了Android开发的基础知识,还提供了丰富的实践案例,让初学者能够在短时间内掌握Android应用开发的基本技能,为今后的深入学习打下坚实的...
《宅男的Android开发指南》是一部面向初学者和进阶开发者的技术书籍,旨在帮助读者深入...《宅男的Android开发指南》中的内容应该会详细讲解这些方面,并提供实例指导,帮助读者从理论到实践全面掌握Android开发技术。