美文网首页
Android性能优化:混淆

Android性能优化:混淆

作者: tianyl | 来源:发表于2019-02-11 19:14 被阅读0次

    索引

    在网络世界中,加密和破解也算是一个老生常谈的话题了,Android中也不例外,对于Android应用的加密,最首先也是最基础的就是代码混淆了

    1 Proguard

    1.1 Proguard介绍

    对于,Google官方有一段话的解释
    ProGuard 会检测和移除封装应用中未使用的类、字段、方法和属性,包括自带代码库中的未使用项。ProGuard 还可优化字节码,移除未使用的代码指令,以及用短名称混淆其余的类、字段和方法。混淆过的代码可令您的 APK 难以被逆向工程
    简单来说,ProGuard对Java代码有压缩、优化、混淆,和预校验这四个方面的作用

    • 压缩:用于检测和删除没有使用的类,字段,方法和属性。
    • 优化:对字节码进行优化,并且移除无用指令
    • 混淆:使用a,b,c等无意义的名称,对类,字段和方法进行重命名
    • 预校验:主要是在Java平台上对处理后的代码进行预校验

    1.2 Proguard常用配置

    • -keep 指定类和类成员(变量和方法)不被混淆
      例如:
    //保护类名不被混淆
    -keep class com.tianyl.DemoActivity
    
    //保护public static void无参的函数不被混淆
    -keep class com.tianyl.DemoActivity{
        public static void *(); 
    }
    
    //保护所有
    -keep class com.tianyl.DemoActivity{    *;
    }
    
    
    • -keepclassmembers 指定类成员不被混淆
      例如:
    -keepclassmembers class com.tianyl.DemoActivity
    
    • -keepclasseswithmembers 指定类和类成员不被混淆
    //保护类名,但是没指定成员,所以函数名被混淆
    -keepclasseswithmembers class com.tianyl.DemoActivity
    
    //全被混淆了,如果不存在native函数,则这条语句等于无效
    -keepclasseswithmembers class com.tianyl.DemoActivity{      native <methods>;}
    

    当然Proguard常用的配置还有很多,具体的可以根据官方文档(https://www.guardsquare.com/en/products/proguard/manual/usage#keepoptions)或者在需要时使用搜索引擎查找

    1.3 Proguard使用时的一些注意事项

    因为Proguard会混淆类名,所以如果我们在使用三方库的时候,需要特别注意是否能够被混淆,而且由于Proguard还会移除没有用到的类(如果开启了此功能),所以对于那些没有直接使用到的类,例如通过反射使用时,特别要注意不要在编译时被Proguard删除,不然的话在应用运行时就会发生异常甚至崩溃

    相关文章

      网友评论

          本文标题:Android性能优化:混淆

          本文链接:https://www.haomeiwen.com/subject/nxtceqtx.html