| Gradle 资源压缩器只会移除未被应用引用的资源,这意味着它不会移除用于不同设备配置的备用资源。必要时,我们可以使用 Android Gradle  插件的 resConfigs 属性来移除您的应用不需要的备用资源文件(常见的有用于国际化支持的 strings.xml,适配用的 layout.xml  等): android {  defaultConfig {  ...  //保留中文和英文国际化支持  resConfigs "en", "zh"  } } 
 自定义混淆规则品尝完了以上"配菜",下面让我们来品味一下本文的"主菜":自定义混淆规则。首先,我们来了解一下常见的混淆命令。 keep 命令 这里说的 keep 命令指的是一系列以 -keep 开头的命令,它主要用来保留 Java 中不需要进行混淆的元素。以下是常见的 -keep 命令: -keep 作用:保留指定的类和成员,防止被混淆处理。例如: # 保留包:com.moos.media.entity 下面的类以及类成员 -keep public class com.moos.media.entity.** # 保留类:NumberProgressBar -keep public class com.moos.media.widget.NumberProgressBar {*;} 
 -keepclassmembers 作用:保留指定的类的成员(变量/方法),它们将不会被混淆。如: # 保留类的成员:MediaUtils类中的特定成员方法 -keepclassmembers class com.moos.media.MediaUtils {  public static *** getLocalVideos(android.content.Context);  public static *** getLocalPictures(android.content.Context); } 
 -keepclasseswithmembers 作用:保留指定的类和其成员(变量/方法),前提是它们在压缩阶段没有被删除。与-keep 使用方式类似: # 保留类:BaseMediaEntity 的子类 -keepclasseswithmembers public class * extends com.moos.media.entity.BaseMediaEntity{*;} # 保留类:OnProgressBarListener接口的实现类 -keep public class * implements com.moos.media.widget.OnProgressBarListener {*;} 
 @Keep 除了以上方式,你也可以选择使用 @Keep 注解来保留期望代码,防止它们被混淆处理。比如,我们通过 @Keep 修饰一个类来保留它不被混淆: @Keep data class CloudMusicBean(var createDate: String,  var id: Long,  var name: String,  var url: String,  val imgUrl: String) 
 同样地,我们也可以让 @Keep 来修饰方法或者字段进而保留它们。 其他命令dontwarn -dontwarn 命令一般在我们引入新的 library 时会使用到,常用于处理 library 中无法解决的警告。如: -keep class twitter4j.** { *; } -dontwarn twitter4j.** 
 其他的命令用法可参考 Android 系统提供的默认混淆规则: #混淆时不生成大小写混合的类名 -dontusemixedcaseclassnames #不跳过非公共的库的类 -dontskipnonpubliclibraryclasses #混淆过程中记录日志 -verbose #关闭预校验 -dontpreverify #关闭优化 -dontoptimize #保留注解 -keepattributes *Annotation* #保留所有拥有本地方法的类名及本地方法名 -keepclasseswithmembernames class * {  native <methods>; } #保留自定义View的get和set方法 -keepclassmembers public class * extends android.view.View {  void set*(***);  *** get*(); } #保留Activity中View及其子类入参的方法,如: onClick(android.view.View) -keepclassmembers class * extends android.app.Activity {  public void *(android.view.View); } #保留枚举 -keepclassmembers enum * {  **[] $VALUES;  public *; } #保留序列化的类 -keepclassmembers class * implements android.os.Parcelable {  public static final android.os.Parcelable$Creator CREATOR; } #保留R文件的静态成员 -keepclassmembers class **.R$* {  public static <fields>; } -dontwarn android.support.** -keep class android.support.annotation.Keep -keep @android.support.annotation.Keep class * {*;} -keepclasseswithmembers class * {  @android.support.annotation.Keep <methods>; } -keepclasseswithmembers class * {  @android.support.annotation.Keep <fields>; } -keepclasseswithmembers class * {  @android.support.annotation.Keep <init>(...); } 
 混淆"黑名单"(编辑:宣城站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |