一、混淆的意义

混淆代码并不是让代码无法被反编译,而是将代码中的类、方法、变量等信息进行重命名,把它们改成一些毫无意义的名字,同时也可以移除未被使用的类、方法、变量等。 所以直观的看,通过混淆可以提高程序的安全性,增加逆向工程的难度,同时也有效缩减了apk的体积。总结如下:

1、将项目中的类、方法、变量等信息进行重命名,变成一些无意义的简短名字。

2、移除未被使用的类、方法、变量等。

二、混淆的规则和配置

凡是需要在AndroidManifest.xml中去注册的所有类的类名以及从父类重写的方法名都自动不会被混淆。 因此,除了Activity之外,这份规则同样也适用于Service、BroadcastReceiver和ContentProvider。

(1)minifyEnabled

minifyEnabled为true的作用:启用代码混淆、压缩APK;

minifyEnabled会对资源进行压缩,多余的代码在打包的时候就给移除掉了。不仅仅是代码,没有被调用的资源同样也会被移除掉,因此minifyEnabled除了混淆代码之外,还可以起到压缩APK包的作用。

开启混淆后也可添加shrinkResources,表示开启删除无用资源。

(2)shrinkResources

shrinkResources为true用来开启删除无用资源。

shrinkResources会对就是没有被引用的文件(经过实测是drawable,layout,实际并不是彻底删除,而是保留文件名,但是没有内容),但是因为需要知道是否被引用所以需要配合mififyEnable使用,只有当两者都为true的时候才会起到真正的删除无效代码和无引用资源的目的。

(3)避免被误删除

若配置minifyEnable true && shrinkResources true,防止避免误删除的文件,可以配置如下: 在res/raw/keep.xml(避免被误删除)写了配置的

对于没有被引用的文件&没有在配置文件keep.xml中声明保存的文件,打包后是没有内容的,声明保存的文件有内容(资源文件和layout文件)。 注意:string.xml中没有被引用的怎么设置都不会被删除。

(4)proguard-android.txt和proguard-rules.pro

proguard-android.txt:代表系统默认的混淆规则配置文件,该文件在/tools/proguard下,一般不要更改该配置文件,因为也会作用于其它项目。

proguard-rules.pro:代码表当前Project的混淆配置文件,在app module下,可以通过修改该文件来添加适用当前项目的混淆规则。

(5)proguard文件夹

代码混淆生成apk之后,项目下面会多出来一个proguard文件夹,proguard文件夹中四个文件的作用。

dump.txt : 描述了apk中所有类文件中内部的结构体。

mapping.txt : 列出了原始的类、方法和名称与混淆代码间的映射。

seeds.txt : 列出了没有混淆的类和方法。

usage.txt : 列出congapk中删除的代码。

三、编写自己的混淆代码

android 混淆规则作用,Android代码混淆详解相关推荐

  1. android 自定义xmlns,Android xmlns 的作用及其自定义实例详解

    Android xmlns 的作用及其自定义实例详解 xmlns:Android="http://schemas.android.com/apk/res/android的作用是: 这个是xm ...

  2. android 混淆规则作用,Android混淆规则

    简介 Java代码是非常容易反编译的.为了很好的保护Java源代码,我们往往会对编译好的class文件进行混淆处理. ProGuard是一个混淆代码的开源项目.它的主要作用就是混淆,当然它还能对字节码 ...

  3. 【转】Android APK反编译就这么简单 详解(附图)

     转自:http://blog.csdn.net/vipzjyno1/article/details/21039349/ [置顶] Android APK反编译就这么简单 详解(附图) 分类: and ...

  4. Android 各大厂面试题汇总与详解(持续更新)

    介绍 目前网络中出现了好多各种面试题的汇总,有真实的也有虚假的,所以今年我将会汇总各大公司面试比较常见的问题,逐一进行解答.会一直集成,也会收集大家提供的面试题,如有错误,请大家指出,经过排查存在,会 ...

  5. Android消息传递之EventBus 3.0使用详解

    前言: 前面两篇不仅学习了子线程与UI主线程之间的通信方式,也学习了如何实现组件之间通信,基于前面的知识我们今天来分析一下EventBus是如何管理事件总线的,EventBus到底是不是最佳方案?学习 ...

  6. Android JNI使用方法,JNI机制详解

    Android JNI使用方法,JNI机制详解 JNI的出现使得开发者既可以利用Java语言跨平台.类库丰 富.开发便捷等特点,又可以利用Native语言的高效. JNI是JVM实现中的一部分,因此N ...

  7. Android性能优化之APK瘦身详解(瘦身73%)

    image 公司项目在不断的改版迭代中,代码在不断的累加,终于apk包不负重负了,已经到了八十多M了.可能要换种方式表达,到目前为止没有正真的往外推过,一直在内部执行7天讨论需求,5天代码实现的阶段. ...

  8. Android 8.0学习(32)---Android 8.0源码目录结构详解

    Android 8.0源码目录结构详解 android的移植按如下流程:     (1)android linux 内核的普通驱动移植,让内核可以在目标平台上运行起来.     (2)正确挂载文件系统 ...

  9. Android NDK开发之旅(3): 详解JNI数据类型与C/C++、Java之间的互调

    Android NDK开发之旅(3):详解JNI数据类型与C/C++.Java之间的互调 (码字不易,转载请声明出处:http://blog.csdn.net/andrexpert/article/d ...

最新文章

  1. php 顶踩,php和jQuery实现文章页【顶】和【踩】的功能
  2. 用身体给可穿戴设备充电,网友:离人类被当作电池更近一步!
  3. Web模板引擎—Mustache
  4. 将外部准备好的sqlite导入到项目当中
  5. java私有属性和私有方法_Java私有,受保护,公共和默认
  6. c 最大子序列和_最大连续子序列
  7. 机器学习——LightGBM
  8. DMA映射 dma_addr_t
  9. Atitit 数据库抽象层jdbc pdo ado.net等比较与异常点 目录 1. 应该具有的功能 1 1.1. 元数据 API 1 1.2. 分布式事务 vs事务中使用 Savepoint 1
  10. 联想万全服务器告警信息在哪里看,华为网络设备查看告警信息
  11. async/await实现同步
  12. MSN蠕虫Myalbum2007.zip专杀工具
  13. pdf转word工具内含注册码【pdf转word】
  14. git报错:index.lock File exists
  15. sql内外连接的区别
  16. 超级计算机计算峰值,世界运算最快计算机,中国神威·太湖之光(其峰值计算速度达每秒1...
  17. 【RocketMQ】从零搭建一套RocketMQ监控(rocketmq-exporter + Prometheus + Grafana)
  18. 钉钉用不同的手机签到后台怎么显示的代签到有用吗
  19. 多模态(RGB-D)——深度融合网络
  20. python中pygame背景颜色为啥没生效_如何更改pygame中的背景图像?

热门文章

  1. 微信红包的随机算法是怎样实现的
  2. 如何将GB7714-2015格式的参考文献表转换为bib文件
  3. JPG格式图片怎么弄?分享两种转换图片格式方法
  4. 智能电视学习软件哪家强?这三款超实用,值得推荐
  5. 基于springboot的景区旅游信息管理系统(源代码+数据库)
  6. JSON-初识+解析
  7. 为配合疫苗接种,亚洲各国政府应制定更为灵活的隔离方案
  8. 山东大学现代软件技术期末考试试题
  9. dr计算机操作,【dr操作规程】_DR操作规程
  10. 关于正点原子USMART的一些理解