代码混淆pro文件配置修改
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版本,以获取更好的保护和优化效果。
android databing 混淆规则

android databing 混淆规则Android 数据绑定(Android Data Binding)是一种用于将应用程序的布局文件与底层数据源相连接的技术。
通过使用数据绑定库,开发者可以将布局文件中的视图直接绑定到数据源上,从而简化了代码的编写,提高了开发效率。
然而,在打包(release)应用程序时,我们需要对代码进行混淆以保护应用程序的安全性。
因此,本文将为您详细介绍在Android 数据绑定中进行混淆的规则和步骤。
第一步:在`build.gradle` 文件中开启数据绑定功能。
要使用数据绑定,首先需要将其添加到应用的Gradle 配置文件中。
groovyandroid {...dataBinding {enabled = true}...}第二步:在`proguard-rules.pro` 文件中添加混淆规则。
混淆规则的目的是告诉混淆器哪些类和方法应该被保留,哪些可以被混淆。
首先,我们需要确保以下类不被混淆:proguard-keep class android.databinding. { *; }这会保留Android 数据绑定库的所有类和相关的方法。
接下来,我们需要保留绑定类和布局文件之间的映射关系,以确保数据绑定正常工作:proguard-keepclassmembers class * extendsandroid.databinding.ViewDataBinding {public static * inflate(youtInflater);public static * inflate(youtInflater,android.view.ViewGroup, boolean);}这些规则将保留用于创建绑定类实例的`inflate()` 方法。
此外,如果您在布局文件中使用了绑定表达式或绑定适配器,您还需要保留与之相关的类和方法:proguard-keepclassmembers class * {android.databinding.BindingAdapter public *;}-keepclassmembers interface * {android.databinding.BindingAdapter public *;}-keepclassmembers class * {android.databinding.BindingConversion public *;}这些规则将保留用于自定义绑定逻辑的`BindingAdapter` 和`BindingConversion` 注解。
【推荐下载】eclipse Android开发代码混淆

eclipse Android 开发代码混淆2017/06/22 128 代码混淆对于一个完善的app 必不可少的1、新建一个Android 项目时,会自动生成两个文件proguard-project.txt ,project.properties只需要将project.properties 文件中proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt 这行前面的#去掉,项目就可以代码混淆了需要注意几点:1、只能通过export signed Application Package 或者export Unsigned Application Package 这两种方式打包apk,才有代码混淆,直接运行的apk 没有代码混淆的。
2、proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard- project.txt,这行代码中用到了两个配置文件,一个是sdk 目录下的proguard- android.txt,一些基本的配置,比如Activity ,注解,实现接口等不被混淆一般不用修改。
另一个是proguard-project.txt,之前说的新建项目自动生成的文件,这里你需要加上一些你需要不被混淆的配置。
3、proguard-project.txt 配置,-dontwarn com.tgt.soa.Coder.** -keep class com.tgt.soa.Coder.** { *;}表示包名com.tgt.soa.Coder 下的所有类都不需要混淆混淆测试进行反编译apk,就能知道你的apk 是否进行混淆我自己的百度网盘编译工具下载路径pan.baidu/s/1hr7CJ7A反编译步骤1 解压apk 文件后,将classes.dex 文件复制到dex2jar-2.0 文件夹下2 cmd 目录切换到当前文件夹,执行d2j-dex2jar.bat d classes.dex,会生成classes-dex2jar.jar3 使用jd-gui.exe 打开classes-dex2jar.jar,查看源码混淆过的apk 反编译出来的包名都是a b c 类的包名。
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()⽅法因为我们没有调⽤也被剔除掉了。
【Android】jar包Proguard混淆方法

【Android】jar包Proguard混淆⽅法本⽂章的前提条件是,读者已经掌握了正确导出jar包的技能。
1、拷贝Android项⽬中“proguard.cfg”⽂件到你指定的位置,并改名为“proguard.pro”,此步是为proguardgui应⽤做前期的配置。
2、在android开发sdk相应的⽬录下找到proguardgui启动⼊⼝,mac os上的路径如下“/Users/jayhomzhou/IDE/Android/adt-bundle-mac/sdk/tools/proguard/bin”通过"终端"启动proguardgui3、加载“1”中的"proguard.pro"配置⽂件4、配置需要混淆的jar包,需要注意的是上部分是可以把多个jar包混淆输出成⼀个jar包,下半部分为混淆时所需的依赖jar包。
5、配置那些内容在混淆时忽略的,这⾥我选择了“Library”和“Enumeration”。
6、需要特别注意红框的选项,勾选后混淆出来的jar包有时导致在主项⽬中使⽤时报错:“”。
7、Optimization界⾯8、红框1,正确选择target下拉框对应的jdk版本,否则可能出现异常错误。
红框2,编译时如果遇到未找到定义的警告,那么在这⾥添加需要忽略的内容,详细看后⾯的步骤。
9、点击红框的按钮后,界⾯出现对上⾯⼀系列配置进⾏的汇总,此时最好进⾏保存(红框版本的按钮)。
保存后的⽂件为.pro后缀,可以使⽤编辑软件进⾏对其作修改(必须按照proguard规范进⾏),再按照上述步骤进⾏重新加载。
到这⾥⼀起⼯作已经就绪,那么点击“Process”开始混淆吧!(遇到警告或错误停⽌混淆,请使⽤“-dontwarn”进⾏屏蔽处理)。
祝你好运,⼀切顺利,哈哈。
⽂章转载,版权归原作者所有,尊重版权,⽀持原创。
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 2.2工程混淆代码并反编译查看解决方案

Android 2.2工程混淆代码解决步骤一、首先因为Android2.2是没有proguard.cfg文件的,所以我们要先创建一个Android2.3.3或者是以上版本的工程二、创建成功后查找SDk路径下tools文件夹中lib文件夹下如:E:\information\android-sdk-windows\tools\lib下就会有proguard.cfg文件该文件源码-optimizationpasses 5-dontusemixedcaseclassnames-dontskipnonpubliclibraryclasses-dontpreverify-verbose-optimizations !code/simplification/arithmetic,!field/*,!class/mergin g/*-keep public class * extends android.app.Activity-keep public class * extends android.app.Application-keep public class * extends android.app.Service-keep public class * extends android.content.BroadcastReceiver-keep public class * extends android.content.ContentProvider-keep public class * extends android.app.backup.BackupAgentHelper-keep public class * extends android.preference.Preference-keep public class com.android.vending.licensing.ILicensingService-keepclasseswithmembernames class * {native <methods>;}-keepclasseswithmembers class * {public <init>(android.content.Context, android.util.AttributeSet); }-keepclasseswithmembers class * {public <init>(android.content.Context, android.util.AttributeSet, int);}-keepclassmembers class * extends android.app.Activity {public void *(android.view.View);}-keepclassmembers enum * {public static **[] values();public static ** valueOf(ng.String);}-keep class * implements android.os.Parcelable {public static final android.os.Parcelable$Creator *;}三、把该文件拷贝到要打包的工程下(和)proguard-project.txt一个路径下四、修改proguard.cfg文件内容为:(红色标记与源代码不同)把dontpreverify改成dontwarn 并加了引入包android-support-v4.jar的路径-dontwarn-optimizationpasses 5-dontusemixedcaseclassnames-dontskipnonpubliclibraryclasses-ignorewarnings-dontwarn-verbose-optimizations !code/simplification/arithmetic,!field/*,!class/mergin g/*-keep public class * extends android.app.Activity-keep public class * extends android.app.Application-keep public class * extends android.app.Service-keep public class * extends android.content.BroadcastReceiver-keep public class * extends android.content.ContentProvider-keep public class * extends android.app.backup.BackupAgentHelper-keep public class * extends android.preference.Preference-keep public class com.android.vending.licensing.ILicensingService-keepclasseswithmembernames class * {native <methods>;}-keepclasseswithmembers class * {public <init>(android.content.Context, android.util.AttributeSet);1、}2、3、-keepclasseswithmembers class * {4、 public <init>(android.content.Context,android.util.AttributeSet, int);5、}6、7、-keepclassmembers class * extends android.app.Activity {8、 public void *(android.view.View);9、}10、11、-keepclassmembers enum * {12、 public static **[] values();13、 public static ** valueOf(ng.String);14、}15、16、-keep class * implements android.os.Parcelable {17、 public static final android.os.Parcelable$Creator *;18、}五、在project.properties中加入proguard.config=proguard.cfg以上五个步骤就可以完成代码混淆了接下来我们来反编译看下代码是否真的混淆了六、首先我们先把工程打包,看看是不是可以了不报错了,签名簿签名都ok七、用解压工具解压打包的.apk得到classes.dex文件;直接用你机器上的解压软件打开.apk 文件解压出classes.dex 文件,(这个就是.jar 的前生--- 其实应该说后世)八、还原.jar文件;这一步需要用到一个工具 dex2jar (百度搜索即可下载)看名字也不难知道他是干嘛的了吧?(没错,就是把dex 还原成 jar包)下载完了,解压,然后把第一步的产物(即那个classes.dex文件)放到dex2jar的解压目录里(解压目录里有dex2jar.bat 文件,检查一下,没有的话说明目录不对、再找找)九、cmd 命令行,目录切换到dex2jar的目录下(linux 系统的话执行那个.sh文件)“dex2jar.bat classes.dex”看到命令行的“Done” 之后,dex2jar 文件夹里就会有“classes.dex.dex2jar.jar” 文件了,这个就是传说中的jar包了十、查看.jar文件;这一步就是传统的反编译了,需要工具辅助,我这里用到的工具是jd-gui (百度搜索)下载你的系统对应的版本,解压,(我xp系统)你会看到一个.exe文件,没错就是单文件绿色版双击,选择第二步生成的.jar,好吧,你的项目是不是完全还原了呢?十一、反编译结果然后用上面的方法反编译你的项目,你会看到aa bb cc 的包、aa bb cc 的类和aa bb cc 的变量名,方法名.这个我相信你自己也搞的头昏了吧?这样就知道自己的工程是不是已经混淆成功了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
编辑pro文件,找到以下代码-dontskipnonpubliclibraryclassmembers-target 1.5-dontshrink-dontoptimize-useuniqueclassmembernames-keeppackagenames-keepattributesExceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,LocalVariable*Table ,*Annotation*,Synthetic,EnclosingMethod-keepparameternames-dontwarn-ignorewarnings在代码后添加相关配置#不混淆lib下jar包里面的class文件-keep class WebRoot.WEB-INFO.lib.*#不混淆action包里面的类名,字段名,方法名#在界面上会用到这些字段和getset方法-keepnames class **.kf.**.action.**{public private protected <fields>;public <methods>;}-keepnames class **.kf.**.dao.**{}-keepnames class **.kf.**.service.**{}-keep class * extends org.springframework.orm.hibernate3.support.HibernateDaoSupport { public <methods>;}#不混淆实体的字段和方法,jsp的表单里面会有这些属性的值,混淆之后,会出现无法提交表单情况-keep class **.entity.** {public private protected <fields>;public <methods>;}ProGuard的作用:1.创建紧凑的代码文档是为了更快的网络传输,快速装载和更小的内存占用.2.创建的程序和程序库很难使用反向工程.3.所以它能删除来自源文件中的没有调用的代码4.充分利用java6的快速加载的优点来提前检测和返回java6中存在的类文件.参数:-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} 设置源文件中给定的字符串常量Ant Example:< !-- This Ant build file illustrates how to process applications,by including ProGuard-style configuration options.Usage: ant -f applications2.xml --><project name="Applications" default="obfuscate" basedir="../..">< target name="obfuscate"><taskdef resource="proguard/ant/task.properties"classpath="lib/proguard.jar" /><proguard><!-- Specify the input jars, output jars, and library jars. -->-injars in.jar-outjars out.jar-libraryjars ${java.home}/lib/rt.jar<!-- -libraryjars junit.jar --><!-- -libraryjars servlet.jar --><!-- -libraryjars jai_core.jar --><!-- ... --><!-- Save the obfuscation mapping to a file, and preserve line numbers. -->-printmapping out.map-renamesourcefileattribute SourceFile-keepattributes SourceFile,LineNumberTable<!-- Preserve all annotations. -->-keepattributes *Annotation*<!-- Preserve all public applications. -->-keepclasseswithmembers public class * {public static void main(ng.String[]);}<!-- Preserve all native method names and the names of their classes. -->-keepclasseswithmembernames class * {native <methods>;}<!-- Preserve the methods that are required in all enumeration classes. -->-keepclassmembers class * extends ng.Enum {public static **[] values();public static ** valueOf(ng.String);}<!-- Explicitly preserve all serialization members. The Serializable interface is only a marker interface, so it wouldn't save them.You can comment this out if your library doesn't use serialization. If your code contains serializable classes that have to be backward compatible, please refer to the manual. -->-keepclassmembers class * implements java.io.Serializable {static final long serialVersionUID;static final java.io.ObjectStreamField[] serialPersistentFields;private void writeObject(java.io.ObjectOutputStream);private void readObject(java.io.ObjectInputStream);ng.Object writeReplace();ng.Object readResolve();}<!-- Your application may contain more items that need to be preserved; typically classes that are dynamically created using Class.forName --></proguard>< /target>< /project>。