代码混淆

代码混淆设置
下面是一些基础的配置

-optimizationpasses 5                   #指定代码压缩级别
-dontusemixedcaseclassnames             #混淆时不会产生形形色色的类名
-dontskipnonpubliclibraryclasses        #指定不忽略非公共类库
-dontpreverify                          #不预校验,如果需要预校验,是-dontoptimize
-ignorewarnings                         #屏蔽警告
-verbose                                #混淆时记录日志
-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*   #优化
-dontshrink
-dontwarn
-dontoptimize
-keepattributes Signature
-keepattributes *Annotation*
-keepattributes EnclosingMethod

此外在基础配置上还要加上一些其他配置保证系统的库不被混淆

-dontwarn android.support.v4.**
-keep class android.support.v4.** { *; }
-keep interface android.support.v4.app.** { *; }
-keep public class * extends android.support.v4.**
-keep public class * extends android.app.Fragment
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService

之后我们要配置一些保护native方法和自定义控件的配置

-keepclasseswithmembernames class * {     # 保持 native 方法不被混淆
native <methods>;
}
-keepclasseswithmembers class * {          # 保持自定义控件类不被混淆
   public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
   public <init>(android.content.Context, android.util.AttributeSet, int);  # 保持自定义控件类不被混淆
}

-keepclassmembers class * extends android.app.Activity {  # 保持自定义控件类不被混淆
  public void *(android.view.View);
}
-keep class * implements android.os.Parcelable {  # 保持 Parcelable 不被混淆
 public static final android.os.Parcelable$Creator *;
}

此外我们涉及到的第三方混淆也要根据官方文档上的设置加上(这里以talkingdata为例)

-dontwarn com.tendcloud.tenddata.**
-keep class com.tendcloud.** {*;}
-keep public class com.tendcloud.tenddata.** { public protected *;}
-keepclassmembers class com.tendcloud.tenddata.**{
      public void *(***);
   }
-keep class com.talkingdata.sdk.TalkingDataSDK {public *;}
-keep class com.apptalkingdata.** {*;}

当然用到谷歌的GSON的也要做出相应配置

#gson混淆配置
-keep public class com.google.gson.**
-keep public class com.google.gson.** {public private protected *;}
-keep class sun.misc.Unsafe { *; }
-keep class com.google.gson.examples.android.model.** { *; }
-keep class com.google.gson.** { *;}

到这里我们的基础配置算是完成了 剩下的就是逐个测试我们的代码包了如果有影响则要在我们的代码包上面加上配置比如我们引用的自己开发团队提供的jar包名字叫 weishi

-keep class com.weishi.** { *; }

有啥问题希望各位同仁多多指教

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值