前言

在开始之前我们先看几个概念:

混淆

概念:

混淆就是对发布出去的程序进行重新组织和处理,使得处理后的代码与处理前代码完成相同的功能,而混淆后的代码很难被反编译,即使反编译成功也很难得出程序的真正语义。

混淆的特点:

被混淆过的程序代码,仍然遵照原来的档案格式和指令集,执行结果也与混淆前一样;

只是混淆器将代码中的所有变量、函数、类的名称变为简短的英文字母代号;

在缺乏相应的函数名和程序注释的况下,即使被反编译,也将难以阅读。

混淆是不可逆的;

在混淆的过程中一些不影响正常运行的信息将永久丢失,这些信息的丢失使程序变得更加难以理解。

不混淆的危害

发布出去的商用APP一般都是经过混淆的,如果不混淆发布出去,已经反编译就可以查看到我们的源码信息,给APP的安全性带来隐患甚至难以估量的损失;这里的混淆就是Proguard技术;

混淆的作用

混淆器的作用不仅仅是保护代码,它也有精简编译后程序大小的作用。由于以上介绍的缩短变量和函数名以及丢失部分信息的原因, 编译后 jar 文件体积大约能减少25% ,这对当前费用较贵的无线网络传输是有一定意义的。

什么是ProGuard

ProGuard工具是用于压缩,优化,混淆,预检我们的代码,作用是可以移除代码中的无用类,字段,方法和属性使得打包后APP的体积缩小;同时可以对其进行混淆命名,降低代码的易读性,保障APP的安全性;

ProGuard技术的功能压缩(Shink)

用于检测和删除没有使用到的类,字段,方法和熟悉性;

优化(Optimeze)

对字节码进行优化,并且移除无用指令

混淆(Obfuscate)

使用a,b,c等无意义的名称,对类,字段和方法进行重命名。

预检测(Preveirfy)

主要是在java平台上对处理后的代码进行预检测。

ProGuard的原理

为了解ProGuard的工作原理,引入EntryPoint的概念

EntryPoint(入口点): 一种标志,在Proguard中不会被处理的类,属性和方法;

过程分析:

在ProGuard进行压缩的过程中,从EntryPoint中搜索那些类和它的成员在使用

如果搜索到在使用的则被标记为EntryPoint的类和方法,一般是那些配置混淆时不希望被混淆的类和方法

对有些是没有使用的的类和成员,会在压缩阶段被ProGuard所丢弃,这样在进一步优化过程中,那些不是EntryPoint的会被设置为private,下一步将会被移除

最后Proguard会对那些非EntryPoint的类进行重命名,以保证与检测阶段代码的稳定性;

android 混淆作用,Android开发之——Android 代码混淆(1)相关推荐

  1. android 移除泛型中元素_Android 代码混淆 混淆方案

    欢迎关注专栏:里面定期分享Android和Flutter架构技术知识点及解析,还会不断更新的BATJ面试专题,欢迎大家前来探讨交流,如有好的文章也欢迎投稿. Flutter跨平台开发终极之选​zhua ...

  2. Android笔记:防反编译、代码混淆中,解决第三方jar包不被混淆的一些心得,及gson防混淆方法...

    为了防止代码被反编译,一般在签名导出前需要对代码进行混淆.最近发现自己的一个项目工程在代码混淆后,使用中出现了异常.以下是自己这几天在解决代码混淆以及引入第三方jar包导致混淆出现的问题处理的一些心得 ...

  3. android 混淆移除log,关于安卓代码混淆和Release版本中去除Debug信息

    我也不知道今天哪门子的心思看到这方面去了,这其实也就是一些固定东西的使用.怎么说呢,因为有些坑以前忽略了,今天记起来的就干掉吧. 以前优化apk的时候,网上查下来,基本上就是去掉无用的资源buildT ...

  4. 基于Android的理财app开发,基于Android的个人理财系统的设计与实现.doc

    毕业论文(设计)题目: 基于Android的个人理财系统 ---设计与实现 学生姓名: 学 号: 专业班级: 计算机科学与技术092班 指导教师: 职称 副教授 指导教师: 职称 起止时间: 目 录 ...

  5. android ui设计与开发工具,Android用户体验与UI设计

    Android用户体验与UI设计 编辑 锁定 讨论 上传视频 本词条缺少概述图,补充相关内容使词条更完整,还能快速升级,赶紧来编辑吧! 本书是一部介绍Android用户体验.UI设计理念和方法论的作品 ...

  6. android手游sdk开发教程,Android SDK开发基本教程

    一.本文章总计460字,需要花费您5分钟时间进行阅读. A.先来理解SDK开发的基本流程.首先,在你的Project中新建一个module,指定为Android Library.再新建一个Activi ...

  7. Android 讯飞语音开发(Android Studio)

    前段时间火了一个很牛的讯飞语音,去看官方文档,瞬间蒙逼,官方是用的eclipse,我用的Android Studio.好了,能上代码尽量不BB. 先来看看gradle里面要配置的东西. module里 ...

  8. Android导航软件设计开发,基于Android平台的手机导航系统的设计与实现

    摘要: 互联网和移动智能技术的快速发展,平板电脑,智能手机,已经走进我们生活的方方面面,购物.外卖.租房.工作.旅游,医疗各个行业.我们无时无刻不在享受互联网和移动终端带来的便利.GPS全球卫星定位带 ...

  9. android 多屏互动 开发,基于Android的直播电视多屏互动应用的设计与实现_问答库...

    目前,智能移动手机已经走入了我们的身边,伴随而来的是Android和IOS两大主流操作系统占领着市场手机份额的95%以上,特别是Android操作系统的智能手机使用率已经操作了IOS操作系统智能手机, ...

  10. android智能电视APP开发教程,Android智能电视开发之明星UI---RecyclerView

    在 Android 连接世界的大潮中,智能电视也无法幸免,成为了浪潮中的一员.我们平常拿着电视遥控器,随意地上下左右切换选中的频道图标,再按确认键进入我们所选的频道. 这看似十分平常的一个习惯,殊不知 ...

最新文章

  1. lab2_selenium测试
  2. python基本使用-Python 基本用法
  3. 昼猫笔记 JavaScript -- 异步执行 | 定时器真的定时执行?
  4. datagridview当传递具有已修改行的 DataRow 集合时,更新要求有效的 UpdateCommand。
  5. 《西游记》原著的一点读后感
  6. poj1063 解题报告(poj 1063 analysis report)
  7. Linux查找含有某字符串的所有文件
  8. JAVA视频系列,学习JAVA常遇到的问题,连载【方法篇】。
  9. cjson源代码解读 (一)介绍
  10. 运行含中文的程序,打印名片
  11. 华为手机耳机sws音效是什么_耳机sws音效是什么 华为手机耳机sws音效是什么
  12. 网络安全要学python_请问入门网络安全要学什么?
  13. linux中批量替换文本中字符
  14. 网站域名有哪些不同的种类?
  15. 《白话大数据与机器学习》读书笔记第1章~第4章读书笔记
  16. MPI_Bcast与MPI_Comm_split配合,实现行广播或列广播
  17. 浏览器被360劫持解决办法
  18. word转PDF图片消失问题
  19. 禁用计算机外部设备,禁用扫描仪的多种方法
  20. 解决Oracle报错ORA-01653: 表xx无法通过 8192 (在表空间 xx_data 中) 扩展

热门文章

  1. 你要相信没有到不了的明天
  2. 修复谷歌拼音输入法已停止运行
  3. (二十一)sift 特征点检测
  4. NetKeeper校园网连接不上,出现Sorry, this application cannot run under a Virtual Machin
  5. Springboot学习笔记(四)SpringSecurity.Shiro
  6. GPS定位及通信协议解析
  7. 关于成功人士成功秘诀的乱弹琴
  8. 3.25 使用钢笔工具选择平滑形状的叶子 [原创Ps教程]
  9. 鹏孚隆冲刺创业板上市:计划募资约7亿元,部分收入来自海外
  10. jvm原理解析——不疯魔不成活 1