Android ProGuard实例教程
androidproguard-rules使用规则

androidproguard-rules使用规则Android ProGuard是一种代码混淆和优化工具,用于保护Android 应用程序的代码免受反编译和代码泄漏的风险,同时还可以减小应用程序的体积,提高应用程序在运行时的性能。
ProGuard支持使用配置文件来指定混淆规则,其中最常用的是proguard-rules.pro文件。
在这个文件中,可以定义一系列的规则来告诉ProGuard如何处理代码。
下面是一些常见的ProGuard规则使用规则:`````````public *;```3. 移除无用的类和类成员:可以使用`-dontwarn`和`-dontnote`关键字来禁止打印无用类和类成员的警告和提示信息。
例如,为了移除所有无用的类和类成员,可以添加如下规则:````````````5. 是否启用优化选项:可以使用`-optimizations`关键字来启用或禁用优化选项。
例如,为了禁用优化选项,可以添加如下规则:```-optimizations !optimization1,!optimization2,...```这些只是ProGuard规则的一小部分示例,根据具体的应用程序需求,可能会有其他规则需要使用。
在编写ProGuard规则时,需要注意以下几点:-尽量保留引用库的规则:如果应用程序使用了第三方库,需要保留相关库的类和类成员,以防止由于混淆导致库无法正常工作。
- 调试期间禁用ProGuard:在开发和调试期间,应禁用ProGuard,以便能够更方便地进行调试和排除代码问题。
-测试混淆后的代码:在将应用程序发布之前,应对混淆后的代码进行全面的测试,以确保混淆不会对应用程序的功能和性能产生不良影响。
- 更新ProGuard版本:随着时间的推移,可能会发布新的ProGuard版本,其中可能包含更好的混淆和优化算法。
因此,建议及时更新ProGuard版本,以获取更好的保护和优化效果。
关于ProGuard混淆工具的使用

关于ProGuard混淆工具的使用目标:jar包B包含提供给开发者的接口,jar包C包含内部实现,B调用C中的方法。
要求B中接口类被保留,B中其他方法以及C中全部内容被混淆。
需保证混淆后的jar包可以被Android 工程正确导入并且功能实现正确。
现阶段尚不考虑使用proguard的压缩和优化功能。
因为工程结构复杂,上述两个功能有可能导致混淆后的jar包不可用。
实验步骤准备:创建一个工程ProjectC。
其中的一个类ClassC包含一个方法返回一个由构造函数获取的字符串,将ProjectC打包。
创建一个工程ProjectB,并且引入ProjectC.jar作为库。
ProjectB中的类ClassB包含一个方法,该方法通过实例化ClassC并调用该实例的方法返回一个字符串。
最后建立一个Android工程,将打包后的ProjectB作为库导入。
在该工程的MainActivity中调用ProjectB中的方法获得字符串,并将字符串显示在屏幕上。
步骤1:将Android工程所生成apk混淆(IntelliJ下):1.将ProjectB.jar 和ProjectC.jar放置在libs文件夹下并且正确引用。
2.注释掉project.properties文件中的“proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt”一行。
3.生成带签名的apk并且勾选:Run ProGuard一项。
结果:发现将apk反编译后,工程中所有的类和方法已被混淆。
安装apk后功能显示正常。
步骤2:使用proguard默认配置将ProjectB混淆,并使用-libraryjars将ProjectC配置成为混淆后ProjectB_after.jar的库。
结果:发现Android工程只能使用ProjectB中被混淆后的类名及方法。
android对app代码混淆

android对app代码混淆接到新任务。
现有项⽬的代码混淆。
在此之前混淆了⼀些理解,但还不够具体和全⾯,我知道有些东西混起来相当棘⼿。
但幸运的是,现在这个项⽬是不是太复杂(对于这有些混乱)。
提前完成~~这是总结。
第⼀部分介绍下操作流程(eclipse):1、打开混淆器:找到项⽬根⽂件夹下的project.properties⽂件,将“#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt”这⾏前的“#”删除就可以;2、改动混淆配置⽂件:找到项⽬根⽂件夹下的proguard-project.txt⽂件。
改动当中代码,这部分是最关键;3、保存相关⽂件供以后出错时使⽤:主要有导出的apk⽂件、项⽬根⽂件夹下的proguard⽂件夹下的⽂件(基本的是mapping.txt)和项⽬源代码;4、项⽬执⾏过程出错处理:依据错误信息和第3步中保存的mapping定位错误位置。
知道这些之后。
我们对其进⾏展开。
打开eclipse然后新建⼀个项⽬,默认会创建proguard-project.txt和project.properties。
编写我们的代码。
然后将proguard-project.txt的“#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt”这⾏前的“#”删除,最后导出就可以实现对代码的混淆,即使我们没有去编写proguard-project.txt中的内容。
以下是我的測试代码:public class MainActivity extends Activity {private String mName;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(yout.activity_main);mName = "ttdevs";getString(mName);setName(mName);showDialog();// testError();}public String getString(String name) {return "hello " + name;}public void setName(String name) {System.out.println("I'm " + name);}private void showDialog() {new Handler().postDelayed(new Runnable() {@Overridepublic void run() {ScoreAlertDialog.showDialog(MainActivity.this);}}, 2000);}public static class ScoreAlertDialog {public static void showDialog(final Activity activity) {if (activity.isFinishing()) {return;}try {AlertDialog.Builder builder = new AlertDialog.Builder(activity);builder.setTitle("alert_title");builder.setNegativeButton("cancel", null);builder.setPositiveButton("submit", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface dialog, int which) {try {Toast.makeText(activity, "Welcome", Toast.LENGTH_LONG).show();} catch (Exception e) {e.printStackTrace();}}});builder.show();} catch (Exception e) {e.printStackTrace();}}}private void testError() {try {int error = 1 / 0;} catch (Exception e) {e.printStackTrace();}}}打包,反编译,最后我们得到例如以下的代码:分析上⾯的代码我们会发现,⾃⼰定义的⽅法名都被替换成⽆特殊意义的短字母,⽽activity的onCreate()⽅法却没变;最后⼀个testError()⽅法因为我们没有调⽤也被剔除掉了。
proguard用法

proguard用法ProGuard是一个用于Java字节码的代码优化器和混淆器,可以帮助开发者在保持应用程序功能完整的同时,减少应用程序的大小,并提高应用程序的运行效率和安全性。
在本文中,我们将探讨ProGuard的用法,并提供一些相关参考内容,帮助开发者更好地使用ProGuard来优化和保护他们的Java应用程序。
ProGuard的基本用法非常简单,只需执行以下步骤即可:1. 下载并安装ProGuard:可以从ProGuard的官方网站上下载最新的ProGuard版本,并将其解压到一个本地目录中。
2. 创建一个ProGuard配置文件:可以通过手动创建一个文本文件,并命名为`proguard.cfg`,也可以使用ProGuard自带的GUI进行配置文件的生成。
配置文件是用于定义ProGuard的处理规则的,它会告诉ProGuard哪些类、方法和字段需要被保留,哪些可以被优化和混淆。
以下是一个示例配置文件的内容:```-injars input.jar-outjars output.jar-libraryjars /path/to/android.jar-dontwarn-keep public class com.example.MyClass {public static void main(ng.String[]);}-optimizationpasses 5```3. 运行ProGuard:可以使用命令行界面或脚本来运行ProGuard。
在命令行界面中,使用以下命令运行ProGuard:```java-jar/path/to/*************************```其中`/path/to/proguard.jar`是ProGuard的路径,`proguard.cfg`是上一步所创建的配置文件的路径。
在运行ProGuard之后,它会根据配置文件中的规则对应用程序进行优化和混淆,并生成一个新的Jar文件。
proguard使用指南

proguard混淆器使用指南撰写人: 陈柏屹项目ID : 001撰写日期: 2009-06-30内容内容21.下载/安装 (3)1.1.下载地址 (3)1.2.启动proguard (3)1.3.混淆器原理功能 (5)1.下载/安装1.1.下载地址/1.2.启动proguard1.解压下载的proguard4.4beta3,解压后进入lib文件把proguard.jar拷贝到自己新建的文件夹里如图:2.把需要混淆的jar和jar所依赖的包也放到新建的文件夹,都放在一起,如下图。
3.写一个配置文件,名称自己定,举个简单配置文件例子,内容如下,其中-injars:是你需要混淆的jar,-outjars:是你混淆后输出的jar,-libraryjars:是你混淆的jar需要所依赖的jar包,后面的不在一一说明,可以参考proguard文档,配置文件可以参考文档来对自己混淆的需求来写配置文件。
-injars TheFirstDesktopApplication1.jar-outjars TheFirstDesktopApplication1_out.jar-libraryjars <java.home>/lib/rt.jar-libraryjars appframework-1.0.3.jar-libraryjars swing-worker-1.1.jar-printmapping proguard.map-overloadaggressively-defaultpackage ''-allowaccessmodification-dontoptimize-keep public class *{public protected *;}-keep public class org.**-keep public class it.**4. 把配置文件保存到你建的文件夹下,如下图。
proguard 语法

proguard 語法【原创实用版】目录1.ProGuard 简介2.ProGuard 的基本语法3.ProGuard 的配置选项4.ProGuard 的应用示例正文【ProGuard 简介】ProGuard 是一个用于 Android 应用程序的代码混淆和压缩工具,可以帮助开发者保护应用程序的知识产权,防止黑客破解和逆向工程。
通过使用 ProGuard,开发者可以混淆代码和资源文件,使得应用程序在保持功能的同时变得难以理解和修改。
【ProGuard 的基本语法】ProGuard 的基本语法包括以下几个关键元素:1.配置文件:ProGuard 的配置文件采用.pro 格式,通常位于项目的res/raw 目录下。
2.规则:ProGuard 的规则用于指定混淆和压缩的范围和方式。
规则通常以"#"开头,后跟规则描述和操作。
3.指令:ProGuard 的指令用于实现具体的混淆和压缩功能。
常见的指令包括:- keep:保留指定的类或方法,使其不被混淆。
- keepclass:保留指定的类,使其不被混淆。
- keeppackage:保留指定的包,使其不被混淆。
- donotkeep:防止指定的类或方法被混淆。
- donotkeepclass:防止指定的类被混淆。
- donotkeeppackage:防止指定的包被混淆。
- obfuscate:对指定的类或方法进行混淆。
- rename:对指定的类或方法进行重命名。
- shrink:对指定的类或方法进行压缩。
【ProGuard 的配置选项】ProGuard 提供了丰富的配置选项,可以满足不同场景的需求。
以下是一些常用的配置选项:1.输出文件:指定混淆后的输出文件路径。
2.输入文件:指定混淆前的输入文件路径。
3.混淆程度:指定混淆的强度,包括轻度混淆、中度混淆和重度混淆。
4.压缩程度:指定代码压缩的强度,包括轻度压缩、中度压缩和重度压缩。
5.保留策略:指定保留指定类、方法或包的策略。
使用ProGuard对Android应用进行代码混淆
使用ProGuard对Android应用进行代码混淆代码混淆是一种常用的安全措施,可以对Android应用程序的代码进行加密和优化,以提高应用的安全性和性能。
ProGuard是一款广泛使用的代码混淆工具,它可以对Java代码进行压缩、优化和混淆,从而减小应用的包大小,提高应用的运行效率,并增加反编译的难度。
本文将介绍如何使用ProGuard对Android应用进行代码混淆的步骤和注意事项。
一、什么是代码混淆代码混淆是指通过对代码进行重命名、去除无用代码、优化代码结构等方式,使得源代码在保持功能不变的前提下,增加阅读和理解的难度,从而达到保护应用程序代码的目的。
代码混淆可以减少应用程序的被逆向工程的风险,提高应用的安全性。
二、ProGuard的安装和配置1. 下载ProGuard首先,需要从官方网站下载ProGuard的压缩包,解压后可以得到proguard.jar文件。
2. 配置ProGuard在Android Studio项目的app目录下创建一个proguard-rules.pro文件(如果已存在,则进行修改),用于配置ProGuard的规则。
在proguard-rules.pro文件中,可以通过添加一些规则来指定哪些类、方法、字段需要被保留,哪些可以被混淆、优化或删除。
例如:```-keep public class com.example.MyClass{public *;}```上述规则指定了保持com.example.MyClass类及其所有公共成员不被混淆。
三、配置Android Gradle插件为了在构建过程中自动使用ProGuard工具进行代码混淆,需要在项目的build.gradle文件中进行配置。
在android块下添加以下代码:```buildTypes{release{minifyEnabled trueproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}}```上述代码表示在release构建类型中开启代码混淆,并指定了默认的ProGuard文件和自定义的proguard-rules.pro文件。
使用Android自带的proguard混淆源码
使⽤Android⾃带的proguard混淆源码 ⼀直以来对于android的项⽬就没有进⾏混淆,因为就算混淆了也不能混淆 Activity,Service,BroadcastReceiver 这些类,所以别⼈反编译也能分析出来。
并且⾃⼰的代码本来就没有什么⽜逼哄哄的地⽅,因此更没有混淆的理由了。
但是最近研究android越多,反编译越多,发现⼤多数应⽤都是混淆了的,在分析源码的时候,发现也有⼀定掩⼈⽿⽬的价值,故⾃⼰也尝试了⼀下混淆。
我的ADT 版本是 10,因此混淆是有的,我也不知道从 ADT 哪个版本开始有 proguard,因此你要保证你的 “sdk⽬录\tools\” 下有proguard 这个⽂件夹。
现在我们在 eclipse 中新建⼀个项⽬,⼀般都会出现 proguard.cfg 这个⽂件。
这个⽂件便是我们的混淆脚本⽂件,好在的是 ADT 提供了懒⼈解决⽅案,因此⼀般乃⾄于⼤多数情况下,我们是不需要更改这个混淆脚本⽂件。
当然如果你想要知道更多有关 proguard 以及混淆脚本的知识可以访问你安装好的SDK⽂档:你的SDK安装⽬录\docs\guide\developing\tools\proguard.html 这⾥我使⽤Samples 中的 NotePad 举例 ⼤家可能注意到了,没有 proguard.cfg 这个混淆脚本⽂件,没关系,我们从其他项⽬中复制⼀个过来。
然后我们在 default.properties 这个⽂件⾥添加⼀句代码,让编译器在 release 的时候⾃动运⾏ ProGuard 调⽤ proguard.cfg 脚本进⾏混淆 由于在 Debug 下,不可能会有⼈会混淆代码,因此这只在release中有效。
接下来我们导出此项⽬的未签名apk 然后,我们使⽤ dex2jar 把本apk中的dex转为jar,再⽤ jd-gui 进⾏反编译查看,下⾯我们就可以发现,我们的apk已经混淆了,HOHO~~~ Have fun!。
proguard使用说明手册
1.准备:为了便于混淆代码,我们把所要混淆的jar包、混淆工具proguard.jar和配置文件放
在同一文件加下(当然所需库jar也可以放在同一文件加下,也可以不放,这里我们写绝对路径):示例图如下
我们把库jar包放在了如下图所示的目录下
部分jar包示例
2.进入相应的目录下
3.键入以下命令,并按enter键
4.如下图所示,提示成功
并根据配置,生成了日志文件
配置文件部分截图如下:
以上为基本操作步骤,当然你也可以用proguard的ui界面进行相应配置后,生成混淆jar 包
不做详细解释.
异常情况:
1.库jar包引用不完全--例如,我们项目用到了spring的注解,我们不引入
包,异常信息如下。
Android proguard用法详解
一.Android ProGuard基本用法ProGuard简介ProGuard是一个SourceForge上非常知名的开源项目。
官网网址是:/。
Java的字节码一般是非常容易反编译的。
为了很好的保护Java源代码,我们往往会对编译好的class文件进行混淆处理。
ProGuard的主要作用就是混淆。
当然它还能对字节码进行缩减体积、优化等,但那些对于我们来说都算是次要的功能。
引用ProGuard官方的一段话来介绍就是:ProGuard is a free Java class file shrinker, optimizer, obfuscator, and preverifier. It detects and removes unused classes, fields, methods, and attributes. It optimizes bytecode and removes unused instructions. It renames the remaining classes, fields, and methods using short meaningless names. Finally, it preverifies the processed code for Java 6 or for Java Micro Edition.Android Eclipse开发环境与ProGuard在Android 2.3以前,混淆Android代码只能手动添加proguard来实现代码混淆,非常不方便。
而2.3以后,Google已经将这个工具加入到了SDK的工具集里。
具体路径:SDK\tools\proguard。
当创建一个新的Android工程时,在工程目录的根路径下,会出现一个proguard的配置文件proguard.cfg。
也就是说,我们可以通过简单的配置,在我们的elipse 工程中直接使用ProGuard混淆Android工程。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Android ProGuard实例教程
∙2011年7月7日10:31
∙来源:eoe
∙我有话说(0)
∙
∙
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”将非常有用。