Android-proguard理解

混淆

什么是混淆

  • 我们都知道Java代码最终被执行是要被Javac编译成JVM上的可执行码(class)才可以被JVM运行,但是字节码的复杂度不高,网上一些可以反编译字节码的工具,比如jd(java decompiler),可以把jar包反编译成java源码,如果想要反编译apk,只需要用dex2-jar就可以把apk转换成jar包,然后就可以使用jd来反编译了,这样我们的代码逻辑不都一览无遗了吗,所以才有了混淆这种东西
  • 混淆简单理解一下其实就是在编译前把能换的包名、类名全都变成a b c这样的名字,让代码阅读起来极其困难,但是只简单的理解是这样,其实混淆并不只有这一个作用,也并不一定是在编译之前做的这些操作
  • 混淆有四个步骤
    • 压缩:去除无用的资源,没有用到的方法、字段,还去除了一些调试信息,比如行号,从而减小字节码文件的体积;所以在这里就要发现,如果你对某些类用了反射,就要配置混淆规则,对这些类不进行混淆
    • 优化:可能会把一些方法变成内联的,或者优化for语句等,你甚至可以配置混淆规则,在字节码中去除一些方法,比如你可以去除Log方法,当然这种配置很危险;官方也提到过,这种优化其实是有风险的,我也遇到过在debug包下是正常的,但是启用混淆生成release包时,就出现了一些错误
    • 混淆:就是我们最常用的功能,防止反编译以后你的包裸奔,所以混淆器根据定义好的混淆规则把能替换的类和变量都替换成了a b c等无意义的名字,同时我们知道在class文件中,引用的类的名字都是存储在class文件里一个叫做常量池的区域中的,混淆之后也可以在很大程度上减小包的体积
    • 预检验:会在Java6以上检验代码是不是符合Java的规范

Android

  • 因为我对Android的混淆还有所了解,所以只能稍微写一下Android的东西了;网上有很多将proguard命令的blog,在这里我只讲一些比较简单基础的吧,不然内容实在太多了
  • Android中默认使用proguard-android.txt来进行配置混淆规则,可以在build.gradle里面配置默认的混淆规则,也可以是使用自定义的proguard文件
#配置默认的混淆规则
proguardFile getDefaultProguardFile('proguard-android.txt')
#使用自己的proguard文件
proguardFile 'proguard-project.txt'

默认的proguard-android.txt里面规定了Activity名字和生命周期方法不会混淆,View的getter和setter也不会混淆,其实是因为Manifest里面要注册Activity,如果你混淆Activity成了其他名字,那Manifest里面不就找不到了吗,还有就是在View的属性动画里我们在动画结束时会改变View的属性,具体实现就是在animation结束的时候通过反射,寻找相应的prefix为set的方法,通过setter方法进行属性设置,所以也保留了而没有混淆,其实本质上这也是因为反射而导致的不可混淆。保留不混淆的语法是

-keepclass xxx
-keepclassmembers xxx
#...
  • 另外就是因为压缩的时候会删除没有显示调用过的方法,但是如果你是使用反射调用的,就必须在proguard里面配置keep,否则就会出错
  • 优化的相关的我也稍微讲一些
#代表指定这个类某些方法被删除了也没什么影响,可以用到这个的地方比如说Log
-assumenosideeffects class xxx {xxx}
#进行n次优化过程,n可以自己指定,如果某次优化之后体积和上次比较没有变化那么无论如何都会停止优化
-optimizationpasses n
#禁止优化
-dontoptimize
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,839评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,543评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,116评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,371评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,384评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,111评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,416评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,053评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,558评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,007评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,117评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,756评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,324评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,315评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,539评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,578评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,877评论 2 345

推荐阅读更多精彩内容