加入收藏 | 设为首页 | 会员中心 | 我要投稿 西安站长网 (https://www.029zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

请你吃一顿史上最全的Android混淆大餐

发布时间:2019-08-20 21:12:23 所属栏目:业界 来源:hardwork
导读:副标题#e# 在 Android 日常开发过程中,混淆是我们开发 App 的一项必不可少的技能。只要是我们亲身经历过 App 打包上线的过程,或多或少都需要了解一些代码混淆的基本操作。那么,混淆到底是什么?它的好处有哪些?具体效果如何?别急,下面我们来一一探索它的

Gradle 资源压缩器只会移除未被应用引用的资源,这意味着它不会移除用于不同设备配置的备用资源。必要时,我们可以使用 Android Gradle 插件的 resConfigs 属性来移除您的应用不需要的备用资源文件(常见的有用于国际化支持的 strings.xml,适配用的 layout.xml 等):

  1. android { 
  2.  defaultConfig { 
  3.  ... 
  4.  //保留中文和英文国际化支持 
  5.  resConfigs "en", "zh" 
  6.  } 

自定义混淆规则

品尝完了以上"配菜",下面让我们来品味一下本文的"主菜":自定义混淆规则。首先,我们来了解一下常见的混淆命令。

keep 命令

这里说的 keep 命令指的是一系列以 -keep 开头的命令,它主要用来保留 Java 中不需要进行混淆的元素。以下是常见的 -keep 命令:

-keep

作用:保留指定的类和成员,防止被混淆处理。例如:

  1. # 保留包:com.moos.media.entity 下面的类以及类成员 
  2. -keep public class com.moos.media.entity.** 
  3. # 保留类:NumberProgressBar 
  4. -keep public class com.moos.media.widget.NumberProgressBar {*;} 

-keepclassmembers

作用:保留指定的类的成员(变量/方法),它们将不会被混淆。如:

  1. # 保留类的成员:MediaUtils类中的特定成员方法 
  2. -keepclassmembers class com.moos.media.MediaUtils { 
  3.  public static *** getLocalVideos(android.content.Context); 
  4.  public static *** getLocalPictures(android.content.Context); 

-keepclasseswithmembers

作用:保留指定的类和其成员(变量/方法),前提是它们在压缩阶段没有被删除。与-keep 使用方式类似:

  1. # 保留类:BaseMediaEntity 的子类 
  2. -keepclasseswithmembers public class * extends com.moos.media.entity.BaseMediaEntity{*;} 
  3. # 保留类:OnProgressBarListener接口的实现类 
  4. -keep public class * implements com.moos.media.widget.OnProgressBarListener {*;} 

@Keep

除了以上方式,你也可以选择使用 @Keep 注解来保留期望代码,防止它们被混淆处理。比如,我们通过 @Keep 修饰一个类来保留它不被混淆:

  1. @Keep 
  2. data class CloudMusicBean(var createDate: String, 
  3.  var id: Long, 
  4.  var name: String, 
  5.  var url: String, 
  6.  val imgUrl: String) 

同样地,我们也可以让 @Keep 来修饰方法或者字段进而保留它们。

其他命令

dontwarn

(编辑:西安站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读