Android Proguard代码混淆面试知识小结

时间:2022-12-03 04:38:29

今天我们来学习下 Proguard 代码混淆的知识,由于Java代码非常容易被反编码,为了很好的保护Java源代码,我们需要对编译好后的class文件进行混淆,增加项目被反编译的难度。

一、proguard是什么?

proguard 工具是用于压缩,优化,混淆我们的代码,主要作用是可以移除代码中的无用类,字段,方法和属性。缩小apk的体积,增加项目被反编译的难度。

二、proguard 技术的功能

1、压缩 :检测并移除代码中无用的类、字段、方法和属性(Attribute);

2、优化:对字节码进行优化,移除无用的指令;

3、混淆:使用a,b,c,d这样简短而无意义的名称,对类、字段和方法进行重命名;

4、预检测:在Java平台上对处理后的代码进行预检,确保加载的class文件是可执行的;

三、proguard 工作原理

  • 移除没有用到的代码,然后对代码里面的类、变量、方法重命名为人可读性很差的简短名字。

  • Entry Point :
    标识不会被处理的类和方法; 在压缩的步骤中,Proguard会从上述的Entry Point开始递归遍历,搜索哪些类和类的成员在使用,对于没有被使用的类和类的成员,就会在压缩段丢弃,在接下来的优化过程中,那些非Entry Point的类、方法都会被设置为private、static或final,不使用的参数会被移除,此外,有些方法会被标记为内联的,在混淆的步骤中,Proguard会对非Entry Point的类和方法进行重命名。

四、为什么需要混淆?

java是跨平台解释性语言,java源代码会编译成字节码.class文件,由于跨平台的需要,字节码包含很多源代码的信息,容易被反编译。

相关资料:
proguard 官网
ProGuard代码混淆技术详解