android studio代码怎么混淆 Android开发之混淆高级教程02
大家好,我是云百科的客服小柏,我来为大家解答以上问题。android,studio代码怎么混淆,Android开发之混淆高级教程02很多人还不知道,现在让我们一起来看看吧!
解答:
1、 学习了Android开发中混淆的基础课程,知道了如何保留指定的包名、类名、方法名、字段,但是大部分的混淆我都掌握了。为了更好地使用和记忆混淆的内容,混淆规则分为以下几类:
2、 1.1混淆第三方类库
3、 如何混淆第三方类库是很多同学可能会问的问题,因为我们不是类库的开发者,不熟悉类库的代码和结构,自然不知道要添加什么样的混淆规则,很头疼。我个人可以添加混淆规则的第三方类库。尽量多加。混淆的好处之一就是压缩apk的大小,减少内存消耗。
4、 对于一个优秀的开源项目,开发者可能会提供相应的混淆规则。所以第一种添加第三方类库混淆规则的方法是登录GitHub或者官网,找出开源库的混淆规则,直接复制到当前的Android项目中。检查当前项目中添加的第三方类库,如下图所示:
5、 以com.squareup.okhttp:OKhttp:3.8.1的类库为例,在GitHub中搜索开源库OKhttp,查看混淆规则的描述,如下图:
6、 把上面的规则直接复制到我们现在的Android项目中就可以了。
7、 第三方类库的开发者不提供相应的混淆规则怎么办?带上通讯器。Nineolandroids3360库33602.4.0为例。你看GitHub的开源库,找不到混淆规则的代码。如果你熟悉开源库的源代码,你可以自己定义开源库令人困惑的规则。但如果你还没看过源代码,不知道混淆规则怎么写,建议你可以保留开源库,不要混淆包名下的所有文件(二级、三级及以下)。
8、 在当前Android项目中,添加以下规则:
9、 混淆第三方类库,第一种方法是将开源库的混淆规则复制到项目中,第二种方法是保留开源库的包名以及后面所有的类和方法,第三种方法是自己定义开源库的混淆规则,前提是熟悉开源库的源代码。
10、 1.2与易混淆注释相关的代码
11、 这里说的标注不包括第三方类库使用的标注。对于使用注释的第三方类库,可以参考混淆第三方类库的方法。
12、 要注释相关代码,需要使用keyword-keepattributes[attribute_filter]。该关键字的作用是指定任何需要保留的可选属性。可以指定一个或多个属性。可选属性attribute_filter包括以下类型:
13、 1、例外
14、 2、签名
15、 3、已弃用
16、 4、源文件
17、 5、来源目录
18、 6、行号表
19、 7、局部变量表
20、 8、局部变量类型表
21、 9、合成的
22、 11、包围法
23、 12、运行时间可视注释
24、 13、RuntimeInvisibleAnnotations符号
25、 14、RuntimeVisibleParameterAnnotations
26、 15、runtimeinvisibleparameternations
27、 16、注释默认值
28、 对于易混淆的相关代码,需要在Android项目中添加以下规则:
29、 1.3混淆序列化对象(Serializable,Parcelable)
30、 由继承自可序列化或可打包接口的类创建的对象称为序列化对象。为什么需要保留序列化对象的一些字段和方法?我们需要深入了解序列化的特点。
31、 序列化后的对象以字节的形式保存在本地或在网络中传输,然后将获取的字节通过反序列化重新组装成对象,以保证组装成功。
32、 1.3.1混淆实现可序列化接口的类
33、 1.要保留的字段包括:非静态、瞬态或私有的字段。
34、 2.需要保留的方法有:非私有的修改方法、writeObject()方法、readObject()方法、writeReplace()方法和readResolve()方法。
35、 混淆实现可序列化接口的类。在当前的Android项目中,添加以下规则
36、
36、1.3.2混淆实现Parcelable接口的类
37、混淆实现Parcelable接口的类,在当前Android项目中,添加如下规则:
38、
38、1.4混淆实体类
39、
39、
40、我刚开始学习Android的时候,容易把实体对象、序列化对象弄错,实体类和序列化类的一个重要区别是:前者没有实现Serializable接口,无法持久化对象。
41、实体对象和序列化对象的相同特点:
42、1、使用private定义属性字段
43、2、提供set和get方法设置、访问属性字段
44、3、提供空的构造方法
45、
45、1.4.2序列化类
46、
46、1.4.2序列化类
47、混淆实体类,在当前Android项目中添加如下规则:
48、PS:在你的Android项目中,需要将cn.teachcourse.bean目录改为你存放实体的路径。
49、
49、1.5混淆自定义View
50、
50、
51、重写继承自View或ViewGroup的方法,实现需要的效果,为了保证自定义的View可以布局文件中正常引用,不运行混淆自定义View:构造方法、set方法、get方法等
52、混淆自定义View,在当前Android项目中添加如下规则:
53、
53、1.6混淆枚举类
54、
54、
55、什么是枚举?什么怎样在实际项目中应用?如果你不是很熟悉,可以先花两分钟大略阅读《Android开发之枚举(Enum)在实际项目中的应用》
56、混淆枚举类,在当前Android项目中添加如下规则:
57、
57、1.7混淆native方法
58、
58、
59、一个native关键字修饰的方法,称为native方法,一个native方法长得很像abstract方法:只有方法签名,没有方法体,与抽象方法不同的是:native方法是由非Java语言实现的,比如C/C++语言实现;abstract方法是由Java语言实现的,下面是一个包含native方法的例子:
60、
60、1.7.1native方法实现的过程:
61、
61、
62、1、编写Java程序,javac编译生成.class文件;
63、2、用javah编译生成的class文件,生成.h文件;
64、3、编写.cpp文件实现native方法,其中需要包含上述生成.h文件(.h文件包含了JDK自带的jni.h文件);
65、4、将.cpp文件变异成动态链接库.dll文件;
66、5、在Java中调用System.loadLibrary()方法或Runtime.loafLibrary()方法加载动态链接库文件,实现在Java中调用这个native方法;
67、6、运行Java文件:javaDjava.library.path=[dll存放的路径]。
68、混淆native方法,在当前Android项目中添加如下规则:
69、
69、1.8混淆callback方法
70、
70、
71、什么是callback方法呢?简单地说小明想要计算1024+1024等于多少的填空题,但因为小明还没学过四位数的加法,于是借助计算器的帮助,最终,小明得出1024+1024的答案,完成填空题,代码如下:
72、1.8.1callback方法
73、类Student持有SuperCalculator的引用,在A类中调用B类的方法;同时SuperCalculator也持有Student的引用,B类将计算结果通过A类的方法,回调给A类,在上面的例子中,fillBlank()就是一个callback方法。
74、
74、1.8.2不陌生的callback方法
75、有接口的地方,就用到callback方法,这样的例子有很多,比如:列表选择、手势拖拽、焦点改变、按钮点击,这里看一下按钮点击的回调方法,代码如下:
76、在上面点击按钮的例子中,我们想要保留callback方法setTextSieze(),在当前Android项目中添加如下规则:
77、
77、1.9混淆JS交互方法
78、为什么需要JS交互方法?在需要与H5进行JS交互的界面,前端根据Android客户端传递的对象,调用相关的方法,比如:页面开始加载方法onPageStarted()、页面加载结束方法onPageFinished()以及页面重载方法shouldOverrideUrlLoading(),上述方法来自android.webkit.WebViewClient类,也就是说为了保证WebView加载H5界面可以正确WebViewClient的方法,在proguard-rules.pro添加如下规则:
79、除此之外,我们会自定义JS可以调用的方法,如下图:
80、我们在当前加载H5网页的activity中,定义isLogin()方法,在点击H5按钮,兑换积分礼品,这时通过JS代码,在H5界面调用Java代码中的isLogin(),判断用户是否登录,我们需要保留所有JS会调用的Java代码,在proguard-rules.pro添加如下规则:
81、PS:LoginInterface是定义的一个接口,声明了H5界面会调用的方法,在你的Android项目中,需要修改成你自己的类。
本文到此讲解完毕了,希望对大家有帮助。
免责声明:本文由用户上传,与本网站立场无关。财经信息仅供读者参考,并不构成投资建议。投资者据此操作,风险自担。 如有侵权请联系删除!
-
最近收到一位患者的留言,说自己这几天总感觉肛门有下坠胀感,特别难受,上网一查,好多信息都指向癌症,这可...浏览全文>>
-
腹痛、腹泻总反复!可能是小肠、大肠在抗议。基于症状特征区分小肠疾病与大肠疾病的具体差异分析:一、核心症状...浏览全文>>
-
近日,中国中医药信息学会肛肠分会·肿瘤分会·治未病分会·河北名医学会肛肠分会·盆底与便秘分会·河北省中...浏览全文>>
-
安徽蚌埠的长安启源E07作为一款备受关注的新能源车型,其价格和配置一直是消费者热议的话题。如果你正考虑入手...浏览全文>>
-
近年来,随着新能源汽车市场的快速发展,插电式混合动力车型逐渐成为消费者关注的焦点。生活家PHEV作为一款备...浏览全文>>
-
在2025款生活家PHEV车型正式上市之前,提前了解相关费用明细对于购车者来说至关重要。这款插电式混合动力车型...浏览全文>>
-
大众途昂作为一款中大型SUV,凭借其宽敞的空间和强劲的动力配置,在市场上一直拥有不错的口碑。对于计划购买20...浏览全文>>
-
阜阳地区的长安启源Q05 2025款车型凭借其时尚的外观设计和丰富的配置,吸引了众多消费者的关注。这款车型作为...浏览全文>>
-
阜阳揽巡作为一款备受关注的中型SUV,凭借其豪华的配置和超值的价格吸引了众多消费者的目光。这款车不仅在外观...浏览全文>>
-
淮南长安启源A07自上市以来便凭借其卓越的性能和亲民的价格赢得了众多消费者的青睐。作为2025款的新车型,它在...浏览全文>>