一、问:proguard到底是什么
答:因为Java代码是非常容易反编码的,况且Android开发的应用程序是用Java代码写的,为了很好的保护Java源代码,我们需要对编译好后的class文件进行混淆。ProGuard是一个混淆代码的开源项目
二、问:proguard作用
答:
压缩(Shrink):检测并移除代码中无用的类、字段、方法和特性(Attribute)。
优化(Optimize):对字节码进行优化,移除无用的指令。
混淆(Obfuscate):使用a,b,c,d这样简短而无意义的名称,对类、字段和方法进行重命名。
预检(Preveirfy):在Java平台上对处理后的代码进行预检,确保加载的class文件是可执行的。
三、问:ProGuard技术功能
答:这里引入一个Entry Point(入口点)概念,Entry Point是在ProGuard过程中不会被处理的类或方法。在压缩的步骤中,ProGuard会从上述的Entry Point开始递归遍历,搜索哪些类和类的成员在使用,对于没有被使用的类和类的成员,就会在压缩段丢弃,在接下来的优化过程中,那些非Entry Point的类、方法都会被设置为private、static或final,不使用的参数会被移除,此外,有些方法会被标记为内联的,在混淆的步骤中,ProGuard会对非Entry Point的类和方法进行重命名。那么这个入口点怎么来呢?就是从ProGuard的配置文件来,只要这个配置了,那么就不会被移除。
四、问:为什么使用priguard
答:我们知道java是跨平台的语言,而java的源代码回编译成字节码存储在我们的.class文件中,由于跨平台的需要,java的字节码包含了很多的源代码信息,比如变量名、方法名、类名等,而且里面有很多字节信息都是无用的,但是有很容易会被反编译成源代码,为了防止这种现象我们就需要通过,proguard来对java的字节码进行混淆。也就是对即将发布出去的程序,重新的组织和处理,使得处理后的代码和处理前的代码有相同的功能,但是代码却已经不一样,同事不容易被反编译。就算被反编译也很难读懂这写代码是做什么用的。
五、问:proguard-rules.pro位置在哪里
答:位于project目录下APP包之内。我们需要的混淆规则都是写在这个类中。
六、问:android studio中如何引用。
答:需要在build.gradle中配置,需要混淆的时候,设置minifyEnabled为true即可
buildTypes {
debug {
minifyEnabled false
}
release {
signingConfig signingConfigs.release
minifyEnabled true
proguardFiles 'proguard-rules.pro'
}
}