当前位置:首页 > 体育

代码混淆 Android Studio 代码混淆

著作者

这篇文章是由两点水提交的,博客地址:http://www.apkbus.com/myspaceblog-911082.html

前言

今天包装新产品的时候,突然忘了混淆的参数怎么写了。虽然之前很迷茫,但是具体的配置参数代码不记得了,所以决定花点时间写个博客记录下来,方便以后搜索和自己记忆。

Android Studio代码混淆了基本配置

在项目目录中,找到proguard-rules.pro文件,也就是你要写混淆配置的文件,在这个文件中写混淆规则

当然,在此之前,您还需要参考模块的build.gradle文件中的混淆文件:

上面的文件proguard-android.txt是系统默认的混淆文件,具体在目录中../sdk/tools/proguard/,里面包含了安卓最基本的混淆,一般不需要改动。我们需要配置的是项目中app下的proguard-rules.pro文件。

混淆规则

1.基本规则

两个常用的混淆命令,注意一颗星只保留了包下的类名,但是子包下的类名还是会混淆;两颗星表示将类名保存在这个包和包含的子包下

-keepclasscn.hadcn.test.**

-keepclasscn.hadcn.test.*

使用以上方法保持类后,你会发现虽然类名没有混淆,但是里面具体的方法和变量名都变了。此时,如果您想同时保留类名和内容,我们需要以下方法

-keep class com . example . bean . * * { *;}

在此基础上,我们还可以利用Java的基本规则来保护特定的类不被混淆,比如我们可以利用这些Java规则进行扩展和实现等。以下示例防止所有继承活动的类被混淆

#保留我们使用的四个组件、自定义应用程序等。这些类并没有混淆#因为这些子类可能在外部被称为-keep public class * extends Android . app . activity。

-保留public class * extendsandroid . app . application action

-保留公共类*extendsandroid.app.Service

-keep public class * extendsandroid . content . BroadcastReceiver

-keep public class * extendsandroid . content . ContentProvider

-keep public class * extendsandroid . app . backup . backup AgentHelper

-保留公共类* extendsandroid . preference . preference

-保留公共类*extendsandroid.view.View

-keep public class com . Android . venking . licensing . ilickensingServiCe

2.什么时候才不会迷茫

一般以下情况不会混淆:

1.如果您使用自定义控件,请确保它们不会混淆

2.枚举用于确保枚举不被混淆

3.不要混淆第三方库中的类

4.使用反射的类不会混淆

5.Gson之类的工具用来做JavaBean类,也就是实体类,不要混淆

6.引用第三方库时,一般会标注库的混淆规则。建议在使用时加入混淆规则,以免最后发现

7.使用WebView的JS调用也需要确保编写的接口方法不会混淆,原因与第一个相同

8.8的子类。Parcelable不要和Creator的静态成员变量混淆,否则会生成Android . OS . baddparcelableexception

基本混淆模板

最后,提供一个基本的混淆模板,当然是第三方库,或者上面提到的地方,根据自己的实际需要进行混淆

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #添加一些基本说明。

#代码混淆压缩率,在0~7之间,默认为5,一般不变

-优化通过5次

#混合时不要使用大小写混合,混合类名为小写

-dontusemixedcaseclassnames

#指定不忽略非公共库的类

-dontskippnonpubliclibraryclass

#这句话可能会混淆我们的项目,并产生一个映射文件

#包含类名->;混淆类名的映射关系

-冗长

#指定不忽略非公共库的类成员

-dontskippnonpubliclibraryclassmembers

#不要进行预验证。预验证是编程的四个步骤之一。安卓不需要预验证。消除这一步会加快混乱。

-dontpreverify

#不混淆地留下注释

-keepattributes *Annotation*,InnerClasses

#避免混淆泛型

-保留属性签名

#抛出异常时保留代码行号

-保留属性源文件,行号表

#指定用于模糊处理的算法,以下参数是过滤器

#这个过滤器是Google推荐的算法,一般不变

优化!代码/简化/cast,!field/*,!分类/合并/*

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #

#保留我们使用的四个组件、自定义应用程序等。这些类并不混乱

#因为这些子类可能被外部调用

-保留公共类* extendsandroid.app.Activity

-保留public class * extendsandroid . app . application action

-保留公共类* extendsandroid.app.Service

-keep public class * extendsandroid . content . BroadcastReceiver

-keep public class * extendsandroid . content . ContentProvider

-keep public class * extendsandroid . app . backup . backup AgentHelper

-保留公共类* extendsandroid . preference . preference

-保留公共类* extendsandroid.view.View

-keep public class com . Android . venking . licensing . ilickensingServiCe

#保留所有支持的类及其内部类

-keep class Android . support . * * { *;} #保留继承的

-keep public class * extendsandroid . support . v4 . * *

-keep public class * extendsandroid . support . V7 . * *

-keep public class * extendsandroid . support . annotation . * *

#保留r下的资源。

——保持阶级**。R $ * { *}

#避免混淆本地本地方法

-keepclasseswithmembernames类* { native & lt方法>。;}

#活动中保留的方法参数是视图的方法。

#这样我们在布局中写的onClick就不会受到影响

-keepclassmembers class * extendsandroid . app . activity { public void *(Android . view . view);}

#防止枚举类混淆-keepclassmembersenum * { public static * *[]values();public static * * value of(Java . lang . string);}

#防止我们的自定义控件(从视图继承)混淆

-keep public class *扩展了Android . view . view { * * * get *(1);void set *(* * *);公共<。init>。(Android . content . context);公共<。init>。(android.content.Context,Android . util . AttributeSet);公共<。init>。(android.content.Context,android.util.AttributeSet,int);}

#避免混淆可打包的序列化类

-keep class *实现Android . OS . Parcelable { public static final Android . OS . Parcelable $ Creator *;}

#防止可序列化的序列化类被混淆

-keepclassmembers类*实现Java . io . serializable { static final long SerVices version id;私有静态最终Java . io . ObjectStreamField[]SerVices persistentFields;!静止!瞬态<。字段>。;!私人<。字段>。;!私人<。方法>。;private void WriteObject(Java . io . ObjectOutputStream);private void ReadObject(Java . io . ObjectInputStream);Java . lang . object WriteReplace();Java . lang . object read resolve();}

#对于带回调函数的onXXEvent和* * On *监听器,不能混淆

-keep class members class * { void *(On * *)Event;void *(开*监听器);}

# webView处理,webView不在项目中使用,可以忽略

-keepclassmembers class fqcn . of . Java . interface . for . web view { public *;}-keepclassmembers class * extendsandroid . web kit . WebView client { public void *(Android . web kit . WebView,java.lang.String,Android . graphics . Bitmap);public boolean *(Android . web kit . WebView,Java . lang . string);}-keepclassmembers class * extendsandroid . web kit . WebView client { public void *(Android . web kit . WebView,jav . lang . string);}

所有人都在看

欢迎来到安卓公交论坛的博文

1.《代码混淆 Android Studio 代码混淆》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《代码混淆 Android Studio 代码混淆》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/tiyu/1236525.html

上一篇

经期多少天算正常 女人月经一般来几天算正常,看完就会明白

下一篇

克丽缇娜招聘 克丽缇娜宁国大道店招聘美容师、美体师、学员

假虾饵的使用方法

假虾饵的使用方法

使用假虾饵时,将主线、副线、假虾、胶水、钓鱼线、鱼钩、八字环、别针、剪刀直接固定在一起,然后假虾饵通过抽动鱼竿吸引鱼上钩来模拟虾的形状。使用假虾饵时,要先固定副线和主线,然后用副线绑鱼钩,用胶水固定假虾,再绑线钩。最后,将八字环和旋转销系在绳钩...

四阶魔方拼装方法

四阶魔方拼装方法

组装四阶魔方时,首先要知道魔方的角块,区分不同面的颜色,根据颜色和角块中心块的颜色组装在一起。四阶魔方的颜色基本都是黄白色,前蓝后绿,左边橙,右边红。无论是组装还是修复,都可以根据魔方的颜色进行修复。四阶魔方根据颜色和角块位置拼接最合适,包括根...

吹膜机模头 吹膜机模头提高使用率的调整方法

  • 吹膜机模头 吹膜机模头提高使用率的调整方法
  • 吹膜机模头 吹膜机模头提高使用率的调整方法
  • 吹膜机模头 吹膜机模头提高使用率的调整方法
4面魔方还原方法

4面魔方还原方法

四面魔方是金字塔魔方。恢复时,先将小角度与大角度对齐,然后返回角块,再恢复底层,最后调整魔方。金字塔魔方有四个小角,四个大角,四个角块,六个棱柱块。首先,在得到一个打乱的金字塔魔方后,你要观察大角的颜色是否对齐。如果没有,转动小角,使大角的颜色...

鱼沟绑钩方法

鱼沟绑钩方法

绑鱼钩的时候,如果没有接头,就把鱼钩放在鱼线上,然后把鱼线缠绕几圈,再通过缠绕部分打结。另一种方法是将鱼钩水平折叠,折叠后固定在鱼钩上,然后缠绕几次,穿过折叠好的小圆圈,拧紧后再将多余的部分剪掉。绑不上的时候可以买卷线器修。将钓鱼组上的一个结连...

鱼镖主线连接方法

鱼镖主线连接方法

浮子和主线的连接方式有很多。一般将尼龙短线折叠成双层钓鱼线,形成一个结,然后穿过浮子尾部的圆孔或金属环。将线套中间拉出一个活结,然后系上浮子,在线套位置系上死结。然后调整浮子在钓鱼线上的位置,用钓鱼线缠绕一个双环活结,将浮子上的结插入钓鱼线的双...

游易网 【案例概要】网络游戏画面侵权纠纷案例裁判规则汇总(八则)

第30组的参赛作品由华东政法大学知识产权学院2017届本科生傅天义和周一围共同完成,总结了8起涉及网络游戏图片侵权纠纷的案例。 网络游戏图片侵权纠纷案 1.判断游戏地图的实质性相似性,要着眼于整体构成和组合布局 2.游戏视频可以作为类似电影的作...

公司档案管理流程图 企业流程梳理方法

流程梳理是针对企业现状,规划企业未来的流程框架。流程梳理也是流程分析,是流程优化和流程管理的基础和前提。 流程分析从战略、企业目标、组织结构、岗位优化、流程结构分析、流程活动分析开始,然后是流程优化设计。 作者在企业咨询实践中总结的企业管理流程...