Android 混淆

作者: 折剑游侠 | 来源:发表于2019-09-30 14:16 被阅读0次
    记录一下混淆规则
    #
    # -----------------------------基本 -----------------------------
    #
    
    # 设置混淆的压缩比率 0 ~ 7
    -optimizationpasses 5
    # 混淆时不使用大小写混合,混淆后的类名为小写
    -dontusemixedcaseclassnames
    # 指定不去忽略非公共库的类
    -dontskipnonpubliclibraryclasses
    # 指定不去忽略非公共库的成员
    -dontskipnonpubliclibraryclassmembers
    # 混淆时不做预校验
    -dontpreverify
    # 混淆时不记录日志
    -verbose
    # 忽略警告
    -ignorewarnings
    # 代码优化
    -dontshrink
    # 不优化输入的类文件
    -dontoptimize
    # 保留注解不混淆
    -keepattributes *Annotation*,InnerClasses
    # 避免混淆泛型
    -keepattributes Signature
    # 保留代码行号,方便异常信息的追踪
    -keepattributes SourceFile,LineNumberTable
    # 混淆采用的算法
    -optimizations !code/simplification/cast,!field/*,!class/merging/*
    # dump.txt文件列出apk包内所有class的内部结构
    -dump class_files.txt
    # seeds.txt文件列出未混淆的类和成员
    -printseeds seeds.txt
    # usage.txt文件列出从apk中删除的代码
    -printusage unused.txt
    # mapping.txt文件列出混淆前后的映射
    -printmapping mapping.txt
    
    #
    # ----------------------------- 默认保留 -----------------------------
    #
    
    # 继承activity,application,service,broadcastReceiver,contentprovider....
    -keep public class * extends android.app.Activity
    -keep public class * extends android.app.Application
    -keep public class * extends android.support.multidex.MultiDexApplication
    -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 * extends android.view.View
    
    # support下的所有类及其内部类
    -keep class android.support.** {*;}
    
    # Google原生服务
    -keep public class com.google.vending.licensing.ILicensingService
    -keep public class com.android.vending.licensing.ILicensingService
    
    # v4,v7
    -keep public class * extends android.support.v4.**
    -keep public class * extends android.support.v7.**
    -keep public class * extends android.support.annotation.**
    
    # AndroidX
    -keep class com.google.android.material.** {*;}
    -keep class androidx.** {*;}
    -keep public class * extends androidx.**
    -keep interface androidx.** {*;}
    -dontwarn com.google.android.material.**
    -dontnote com.google.android.material.**
    -dontwarn androidx.**
    
    # native方法
    -keepclasseswithmembernames class * {
        native <methods>;
    }
    
    # layout中onclick方法android:onclick="onClick"
    -keepclassmembers class * extends android.app.Activity{
        public void *(android.view.View);
    }
    
    # 枚举中values()和valueOf()方法
    -keepclassmembers enum * {
        public static **[] values();
        public static ** valueOf(java.lang.String);
    }
    
    # View中setXxx()、getXxx()方法
    -keep public class * extends android.view.View{
        *** get*();
        void set*(***);
        public <init>(android.content.Context);
        public <init>(android.content.Context, android.util.AttributeSet);
        public <init>(android.content.Context, android.util.AttributeSet, int);
    }
    -keepclasseswithmembers class * {
        public <init>(android.content.Context, android.util.AttributeSet);
        public <init>(android.content.Context, android.util.AttributeSet, int);
    }
    
    # Parcelable实现类中CREATOR字段
    -keep class * implements android.os.Parcelable {
      public static final android.os.Parcelable$Creator *;
    }
    
    # Serizalizable类以下成员
    -keepclassmembers class * implements java.io.Serializable {
        static final long serialVersionUID;
        private static final java.io.ObjectStreamField[] serialPersistentFields;
        private void writeObject(java.io.ObjectOutputStream);
        private void readObject(java.io.ObjectInputStream);
        java.lang.Object writeReplace();
        java.lang.Object readResolve();
    }
    
    # 保留R资源
    -keep class **.R$* {*;}
    
    # 资源类下static
    -keepclassmembers class **.R$* {
        public static <fields>;
    }
    
    # 回调函数onXXEvent、**On*Listener
    -keepclassmembers class * {
        void *(**On*Event);
        void *(**On*Listener);
    }
    
    # 自定义控件(继承自View)
    -keep public class * extends android.view.View{
        *** get*();
        void set*(***);
        public <init>(android.content.Context);
        public <init>(android.content.Context, android.util.AttributeSet);
        public <init>(android.content.Context, android.util.AttributeSet, int);
    }
    
    # webView
    -keepclassmembers class fqcn.of.javascript.interface.for.Webview {
       public *;
    }
    -keepclassmembers class * extends android.webkit.WebViewClient {
        public void *(android.webkit.WebView, java.lang.String, android.graphics.Bitmap);
        public boolean *(android.webkit.WebView, java.lang.String);
    }
    -keepclassmembers class * extends android.webkit.WebViewClient {
        public void *(android.webkit.WebView, jav.lang.String);
    }
    
    # js调用的原生方法,Android4.2以上添加以下配置
    -keepattributes *Annotation*
    -keepattributes *JavascriptInterface*
    -keep class package.** {*;}
    
    # 实体类
    -dontwarn package.**
    # 反射类
    -keep class package.** {*;}
    
    # 删除Log相关代码
    -assumenosideeffects class android.util.Log {
        public static boolean isLoggable(java.lang.String, int);
        public static int v(...);
        public static int i(...);
        public static int w(...);
        public static int d(...);
        public static int e(...);
    }
    
    # 保持测试相关代码
    -dontnote junit.framework.**
    -dontnote junit.runner.**
    -dontwarn android.test.**
    -dontwarn android.support.test.**
    -dontwarn org.junit.**
    
    #
    # ----------------------------- 第三方 -----------------------------
    #
    
    -dontwarn javax.annotation.**
    -dontwarn javax.inject.**
    # OkHttp3
    -dontwarn okhttp3.logging.**
    -keep class okhttp3.internal.**{*;}
    -dontwarn okio.**
    # Retrofit
    -dontwarn retrofit2.**
    -keep class retrofit2.** {*;}
    -keepattributes Signature
    -keepattributes Exceptions
    # RxJava RxAndroid
    -dontwarn sun.misc.**
    -keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {
        long producerIndex;
        long consumerIndex;
    }
    -keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {
        rx.internal.util.atomic.LinkedQueueNode producerNode;
    }
    -keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueConsumerNodeRef {
        rx.internal.util.atomic.LinkedQueueNode consumerNode;
    }
    # arouter
    -keep public class com.alibaba.android.arouter.routes.**{*;}
    -keep public class com.alibaba.android.arouter.facade.**{*;}
    -keep class * implements com.alibaba.android.arouter.facade.template.ISyringe{*;}
    # If you use the byType method to obtain Service, add the following rules to protect the interface:
    -keep interface * implements com.alibaba.android.arouter.facade.template.IProvider
    # If single-type injection is used, that is, no interface is defined to implement IProvider, the following rules need to be added to protect the implementation
    # -keep class * implements com.alibaba.android.arouter.facade.template.IProvider
    
    # gson
    -dontwarn com.google.gson.**
    -keep class com.google.gson.**{*;}
    -keep interface com.google.gson.**{*;}
    # 百度定位
    -keep class com.baidu.** {*;}
    -keep class vi.com.** {*;}
    -keep public class com.mobclick.** {*;}
    -dontwarn com.baidu.**
    # glide
    -keep public class * implements com.bumptech.glide.module.GlideModule
    -keep public class * extends com.bumptech.glide.module.AppGlideModule
    -keep public enum com.bumptech.glide.load.ImageHeaderParser$** {
      **[] $VALUES;
      public *;
    }
    
    #------tbs腾讯x5混淆规则-------
    #-optimizationpasses 7
    #-optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
    -dontoptimize
    -dontusemixedcaseclassnames
    -verbose
    -dontskipnonpubliclibraryclasses
    -dontskipnonpubliclibraryclassmembers
    -dontwarn dalvik.**
    -dontwarn com.tencent.smtt.**
    #-overloadaggressively
    
    # ------------------ Keep LineNumbers and properties ---------------- #
    -keepattributes Exceptions,InnerClasses,Signature,Deprecated,SourceFile,LineNumberTable,*Annotation*,EnclosingMethod
    # --------------------------------------------------------------------------
    
    # Addidional for x5.sdk classes for apps
    
    -keep class com.tencent.smtt.export.external.**{
        *;
    }
    
    -keep class com.tencent.tbs.video.interfaces.IUserStateChangedListener {
        *;
    }
    
    -keep class com.tencent.smtt.sdk.CacheManager {
        public *;
    }
    
    -keep class com.tencent.smtt.sdk.CookieManager {
        public *;
    }
    
    -keep class com.tencent.smtt.sdk.WebHistoryItem {
        public *;
    }
    
    -keep class com.tencent.smtt.sdk.WebViewDatabase {
        public *;
    }
    
    -keep class com.tencent.smtt.sdk.WebBackForwardList {
        public *;
    }
    
    -keep public class com.tencent.smtt.sdk.WebView {
        public <fields>;
        public <methods>;
    }
    
    -keep public class com.tencent.smtt.sdk.WebView$HitTestResult {
        public static final <fields>;
        public java.lang.String getExtra();
        public int getType();
    }
    
    -keep public class com.tencent.smtt.sdk.WebView$WebViewTransport {
        public <methods>;
    }
    
    -keep public class com.tencent.smtt.sdk.WebView$PictureListener {
        public <fields>;
        public <methods>;
    }
    
    
    -keepattributes InnerClasses
    
    -keep public enum com.tencent.smtt.sdk.WebSettings$** {
        *;
    }
    
    -keep public enum com.tencent.smtt.sdk.QbSdk$** {
        *;
    }
    
    -keep public class com.tencent.smtt.sdk.WebSettings {
        public *;
    }
    
    
    -keepattributes Signature
    -keep public class com.tencent.smtt.sdk.ValueCallback {
        public <fields>;
        public <methods>;
    }
    
    -keep public class com.tencent.smtt.sdk.WebViewClient {
        public <fields>;
        public <methods>;
    }
    
    -keep public class com.tencent.smtt.sdk.DownloadListener {
        public <fields>;
        public <methods>;
    }
    
    -keep public class com.tencent.smtt.sdk.WebChromeClient {
        public <fields>;
        public <methods>;
    }
    
    -keep public class com.tencent.smtt.sdk.WebChromeClient$FileChooserParams {
        public <fields>;
        public <methods>;
    }
    
    -keep class com.tencent.smtt.sdk.SystemWebChromeClient{
        public *;
    }
    # 1. extension interfaces should be apparent
    -keep public class com.tencent.smtt.export.external.extension.interfaces.* {
        public protected *;
    }
    
    # 2. interfaces should be apparent
    -keep public class com.tencent.smtt.export.external.interfaces.* {
        public protected *;
    }
    
    -keep public class com.tencent.smtt.sdk.WebViewCallbackClient {
        public protected *;
    }
    
    -keep public class com.tencent.smtt.sdk.WebStorage$QuotaUpdater {
        public <fields>;
        public <methods>;
    }
    
    -keep public class com.tencent.smtt.sdk.WebIconDatabase {
        public <fields>;
        public <methods>;
    }
    
    -keep public class com.tencent.smtt.sdk.WebStorage {
        public <fields>;
        public <methods>;
    }
    
    -keep public class com.tencent.smtt.sdk.DownloadListener {
        public <fields>;
        public <methods>;
    }
    
    -keep public class com.tencent.smtt.sdk.QbSdk {
        public <fields>;
        public <methods>;
    }
    
    -keep public class com.tencent.smtt.sdk.QbSdk$PreInitCallback {
        public <fields>;
        public <methods>;
    }
    -keep public class com.tencent.smtt.sdk.CookieSyncManager {
        public <fields>;
        public <methods>;
    }
    
    -keep public class com.tencent.smtt.sdk.Tbs* {
        public <fields>;
        public <methods>;
    }
    
    -keep public class com.tencent.smtt.utils.LogFileUtils {
        public <fields>;
        public <methods>;
    }
    
    -keep public class com.tencent.smtt.utils.TbsLog {
        public <fields>;
        public <methods>;
    }
    
    -keep public class com.tencent.smtt.utils.TbsLogClient {
        public <fields>;
        public <methods>;
    }
    
    -keep public class com.tencent.smtt.sdk.CookieSyncManager {
        public <fields>;
        public <methods>;
    }
    
    # Added for game demos
    -keep public class com.tencent.smtt.sdk.TBSGamePlayer {
        public <fields>;
        public <methods>;
    }
    
    -keep public class com.tencent.smtt.sdk.TBSGamePlayerClient* {
        public <fields>;
        public <methods>;
    }
    
    -keep public class com.tencent.smtt.sdk.TBSGamePlayerClientExtension {
        public <fields>;
        public <methods>;
    }
    
    -keep public class com.tencent.smtt.sdk.TBSGamePlayerService* {
        public <fields>;
        public <methods>;
    }
    
    -keep public class com.tencent.smtt.utils.Apn {
        public <fields>;
        public <methods>;
    }
    -keep class com.tencent.smtt.** {
        *;
    }
    # end
    
    
    -keep public class com.tencent.smtt.export.external.extension.proxy.ProxyWebViewClientExtension {
        public <fields>;
        public <methods>;
    }
    
    -keep class MTT.ThirdAppInfoNew {
        *;
    }
    
    -keep class com.tencent.mtt.MttTraceEvent {
        *;
    }
    
    # Game related
    -keep public class com.tencent.smtt.gamesdk.* {
        public protected *;
    }
    
    -keep public class com.tencent.smtt.sdk.TBSGameBooter {
            public <fields>;
            public <methods>;
    }
    
    -keep public class com.tencent.smtt.sdk.TBSGameBaseActivity {
        public protected *;
    }
    
    -keep public class com.tencent.smtt.sdk.TBSGameBaseActivityProxy {
        public protected *;
    }
    
    -keep public class com.tencent.smtt.gamesdk.internal.TBSGameServiceClient {
        public *;
    }
    

    相关文章

      网友评论

        本文标题:Android 混淆

        本文链接:https://www.haomeiwen.com/subject/hwxnectx.html