首页 >> 数码 >

android studio代码怎么混淆 Android开发之混淆高级教程02

2022-06-18 15:10:14 来源: 用户: 

大家好,我是云百科的客服小柏,我来为大家解答以上问题。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项目中,需要修改成你自己的类。

本文到此讲解完毕了,希望对大家有帮助。

  免责声明:本文由用户上传,与本网站立场无关。财经信息仅供读者参考,并不构成投资建议。投资者据此操作,风险自担。 如有侵权请联系删除!

 
分享:
最新文章
站长推荐