美文网首页Android知识
APK混淆通用框架(Studio)

APK混淆通用框架(Studio)

作者: 码字农民工 | 来源:发表于2017-02-24 18:59 被阅读1929次

    废话不多说直接上代码

    • 打开项目中的proguard-rules.pro,将下面的代码复制进去
    #-------------------------------------------定制化区域----------------------------------------------
    #---------------------------------1.实体类---------------------------------
    -keep class Bean的全路径(com.xxx.xxx.bean).** { *; }
    
    
    #--------------------------------------自定义控件-----------------------------------
    
    #---------------------------------2.第三方包-------------------------------
    
    
    #-------------------------------------------------------------------------
    
    #---------------------------------3.与js互相调用的类------------------------
    
    
    
    #-------------------------------------------------------------------------
    
    #---------------------------------4.反射相关的类和方法-----------------------
    
    
    
    #----------------------------------------------------------------------------
    #---------------------------------------------------------------------------------------------------
    
    #-------------------------------------------基本不用动区域--------------------------------------------
    #---------------------------------基本指令区----------------------------------
    #指定压缩级别
    -optimizationpasses 5
    -dontusemixedcaseclassnames
    -dontskipnonpubliclibraryclasses
    #不跳过非公共的库的类成员
    -dontskipnonpubliclibraryclassmembers
    -dontpreverify
    -verbose
    -printmapping proguardMapping.txt
    #混淆时采用的算法
    -optimizations !code/simplification/cast,!field/*,!class/merging/*
    -keepattributes *Annotation*,InnerClasses
    -keepattributes Signature
    -keepattributes SourceFile,LineNumberTable
    #----------------------------------------------------------------------------
    
    #---------------------------------默认保留区---------------------------------
    -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 * extends android.view.View
    -keep public class com.android.vending.licensing.ILicensingService
    -keep class android.support.** { *; }
    -keep interface android.support.** { *; }
    -dontwarn android.support.**
    
    -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);
    }
    -keep class * implements android.os.Parcelable {
      public static final android.os.Parcelable$Creator *;
    }
    -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();
    }
    -keep class **.R$* {
     *;
    }
    -keepclassmembers class * {
        void *(**On*Event);
    }
    -keepclassmembers enum * {  # 使用enum类型时需要注意避免以下两个方法混淆,因为enum类的特殊性,以下两个方法会被反射调用,
        public static **[] values();
        public static ** valueOf(java.lang.String);
    }
    #----------------------------------------------------------------------------
    
    #---------------------------------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);
    }
    #----------------------------------------------------------------------------
    #---------------------------------------------------------------------------------------------------
    
    • 第三方混淆代码
    ################alipay###############
    
    -keep class com.alipay.android.app.IAlixPay{*;}
    -keep class com.alipay.android.app.IAlixPay$Stub{*;}
    -keep class com.alipay.android.app.IRemoteServiceCallback{*;}
    -keep class com.alipay.android.app.IRemoteServiceCallback$Stub{*;}
    -keep class com.alipay.sdk.app.PayTask{ public *;}
    -keep class com.alipay.sdk.app.AuthTask{ public *;}
    
    ################retrofit###############
    -dontwarn retrofit2.**
    -keep class retrofit2.** { *; }
    -keepattributes Signature
    -keepattributes Exceptions
    
    ################butterknife###############
    -keep class butterknife.** { *; }
    -dontwarn butterknife.internal.**
    -keep class **$$ViewBinder { *; }
    -keepclasseswithmembernames class * {
       @butterknife.* <fields>;
    }
    -keepclasseswithmembernames class * {
     @butterknife.* <methods>;
    }
    
    
    ################gson###############
    -keepattributes Signature
    -keepattributes *Annotation*
    -keep class sun.misc.Unsafe { *; }
    -keep class com.google.gson.stream.** { *; }
    # Application classes that will be serialized/deserialized over Gson
    -keep class com.sunloto.shandong.bean.** { *; }
    
    ################umeng###############
    -keep class com.umeng.** { *; }
    -keep public class * extends com.umeng.**
    
    ################glide###############
    -keep public class * implements com.bumptech.glide.module.GlideModule
    -keep class com.bumptech.glide.** { *; }
    -keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
        **[] $VALUES;
        public *;
    }
    
    ################okhttp###############
    -keepattributes Signature
    -keepattributes *Annotation*
    -keep class com.squareup.okhttp.** { *; }
    -keep interface com.squareup.okhttp.** { *; }
    -keep class okhttp3.** { *; }
    -keep interface okhttp3.** { *; }
    -dontwarn com.squareup.okhttp.**
    
    
    ################androidEventBus###############
    -keep class org.simple.** { *; }
    -keep interface org.simple.** { *; }
    -keepclassmembers class * {
        @org.simple.eventbus.Subscriber <methods>;
    }
    -keepattributes *Annotation*
    
    ################autolayout###############
    -keep class com.zhy.autolayout.** { *; }
    -keep interface com.zhy.autolayout.** { *; }
    
    
    
    
    ################Rxjava and RxAndroid###############
    -dontwarn org.mockito.**
    -dontwarn org.junit.**
    -dontwarn org.robolectric.**
    
    -keep class rx.** { *; }
    -keep interface rx.** { *; }
    
    -keepattributes Signature
    -keepattributes *Annotation*
    -keep class com.squareup.okhttp.** { *; }
    -dontwarn okio.**
    -keep interface com.squareup.okhttp.** { *; }
    -dontwarn com.squareup.okhttp.**
    
    -dontwarn rx.**
    -dontwarn retrofit.**
    -keep class retrofit.** { *; }
    -keepclasseswithmembers class * {
        @retrofit.http.* <methods>;
    }
    
    -keep class sun.misc.Unsafe { *; }
    
    -dontwarn java.lang.invoke.*
    
    -keep class rx.schedulers.Schedulers {
        public static <methods>;
    }
    -keep class rx.schedulers.ImmediateScheduler {
        public <methods>;
    }
    -keep class rx.schedulers.TestScheduler {
        public <methods>;
    }
    -keep class rx.schedulers.Schedulers {
        public static ** test();
    }
    -keepclassmembers class rx.internal.util.unsafe.*ArrayQueue*Field* {
        long producerIndex;
        long consumerIndex;
    }
    -keepclassmembers class rx.internal.util.unsafe.BaseLinkedQueueProducerNodeRef {
        long producerNode;
        long consumerNode;
    }
    
    -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;
    }
    
    -dontwarn rx.internal.util.unsafe.**
    
    
    
    ################nineoldandroids###############
    -keep class com.nineoldandroids.animation.** { *; }
    -keep interface com.nineoldandroids.animation.** { *; }
    -keep class com.nineoldandroids.view.** { *; }
    -keep interface com.nineoldandroids.view.** { *; }
    
    
    
    ################epresso###############
    -keep class android.support.test.espresso.** { *; }
    -keep interface android.support.test.espresso.** { *; }
    
    
    
    ################autobahn###############
    -keep class de.tavendo.autobahn.** { *; }
    -keep interface de.tavendo.autobahn.** { *; }
    
    
    ################shareSdk###############
    -keep class cn.sharesdk.** { *; }
    -keep interface cn.sharesdk.** { *; }
    
    ################crop###############
    -keep class com.soundcloud.android.** { *; }
    -keep interface com.soundcloud.android.** { *; }
    
    ################annotation###############
    -keep class android.support.annotation.** { *; }
    -keep interface android.support.annotation.** { *; }
    
    ################pickerview###############
    -keep class com.bigkoo.pickerview.** { *; }
    -keep interface com.bigkoo.pickerview.** { *; }
    
    
    ################carousellayoutmanager###############
    -keep class com.azoft.carousellayoutmanager.** { *; }
    -keep interface com.azoft.carousellayoutmanager.** { *; }
    
    ################messagepack###############
    -keep class org.** { *; }
    -keep interface org.** { *; }
    
    ################javassist###############
    -keep class javassist.** { *; }
    -keep interface javassist.** { *; }
    
    ################RxLifeCycle#################
    -keep class com.trello.rxlifecycle.** { *; }
    -keep interface com.trello.rxlifecycle.** { *; }
    
    ################RxCache#################
    -dontwarn io.rx_cache.internal.**
    -keep class io.rx_cache.internal.Record { *; }
    -keep class io.rx_cache.Source { *; }
    
    -keep class io.victoralbertos.jolyglot.** { *; }
    -keep interface io.victoralbertos.jolyglot.** { *; }
    
    ################Timber#################
    -dontwarn org.jetbrains.annotations.**
    
    
    ################Canary#################
    -dontwarn com.squareup.haha.guava.**
    -dontwarn com.squareup.haha.perflib.**
    -dontwarn com.squareup.haha.trove.**
    -dontwarn com.squareup.leakcanary.**
    -keep class com.squareup.haha.** { *; }
    -keep class com.squareup.leakcanary.** { *; }
    
    ###############greendao###################
    -dontwarn greendao.**
    -keep class org.greenrobot.greendao.**{*;}
    -keepclassmembers class * extends org.greenrobot.greendao.AbstractDao {
    public static java.lang.String TABLENAME;
    }
    -keep class **$Properties
    -dontwarn org.greenrobot.greendao.database.**
    

    这里我顺便提一下

    因为我使用了rxbus,其中有注解的方法:

     @Subscribe(code = 0, threadMode = ThreadMode.MAIN)
        public void setChangeText(EventChangeText<List<String>> changeText) {
            //你的逻辑代码
        }
    

    后面发现混淆之后这个方法不能被执行- -!可以在混淆规则中加入

    ###############rxbus###################
    # keep annotated by Subscribe
    -keep @com.wzgiceman.rxbuslibrary.rxbus.Subscribe class * {*;}
    -keep class * {
        @com.wzgiceman.rxbuslibrary.rxbus.Subscribe <fields>;
    }
    -keepclassmembers class * {
        @com.wzgiceman.rxbuslibrary.rxbus.Subscribe <methods>;
    }
    

    相关文章

      网友评论

        本文标题:APK混淆通用框架(Studio)

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