안 드 로 이 드 코드 혼동 실전

11236 단어 Android코드 혼동
코드 혼동 이란 무엇 입 니까?
Android SDK 는 혼동 도구 인 Proguard 를 자체 가 져 왔 습 니 다.SDK 루트 디 렉 터 리\tools\proguard 아래 에 있 습 니 다.혼동 이 열 리 면 Proguard 는 기본적으로 제3자 패 키 지 를 포함 한 모든 코드 를 혼동 합 니 다.그러나 일부 코드 나 제3자 패 키 지 는 혼동 할 수 없습니다.헷 갈 리 지 않 는 부분 을 유지 하기 위해 서 는 혼동 규칙 을 수 동 으로 작성 해 야 합 니 다.
왜 헷 갈 려?
  • 자바 의 바이트 코드 최적화
  • apk 파일 의 크기 를 줄 이 고 헷 갈 리 는 과정 에서 사용 하지 않 은 클래스 와 구성원 을 삭제 합 니 다
  • 코드 가 안전 하고 클래스,함수,변수 이름 을 무 작위 로 무의미 한 코드 형 으로 만 듭 니 다.예 를 들 어 a,b,c...등 입 니 다.app 이 역 컴 파일 된 후에 코드 를 쉽게 이해 할 수 있 도록 방지 합 니 다
  • 혼동
    app 아래 build.gradle 에 혼동 을 추가 합 니 다.
    
    buildTypes {
        release {
          //    ,      
          minifyEnabled true
          //        
          shrinkResources true
          proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
          // debug       ,    
          signingConfig signingConfigs.debug
          minifyEnabled false
          proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
          manifestPlaceholders = [
              // UAT     
              GETUI_APP_ID  : "FZi793fjp9654LfeDPcR29",
              GETUI_APP_KEY  : "YrVmZT4KTp65hqAtZbCj79",
              GETUI_APP_SECRET: "aLf186Rb617uj7jeNnUB89"
          ]
        }
      }
    }
    debug 환경 에서 서명 파일 을 사용 하여 debug 환경 에서 헷 갈 린 코드 를 디 버 깅 하 는 데 편리 합 니 다.
     
    혼동 파일 proguard-rules.pro
    공통 혼동 설정(APP 공통)
    
    ##################################      #################################
    #        , 0~7  ,   5,      
    -optimizationpasses 5
    
    #            ,         
    -dontusemixedcaseclassnames
    
    #             
    -dontskipnonpubliclibraryclasses
    
    #                     
    #      ->          
    -verbose
    
    #               
    -dontskipnonpubliclibraryclassmembers
    
    #      ,preverify proguard       ,Android   preverify,             。
    -dontpreverify
    -dontoptimize
    
    #          
    -verbose
    -ignorewarnings
    
    #   Annotation   
    -keepattributes *Annotation*
    
    #       
    -keepattributes Signature
    -keepattributes Exceptions,InnerClasses
    
    -dontnote com.google.vending.licensing.ILicensingService
    -dontnote com.android.vending.licensing.ILicensingService
    
    #            
    -keepattributes SourceFile,LineNumberTable
    -keepattributes Deprecated,Synthetic,EnclosingMethod
    
    #              
    -renamesourcefileattribute SourceFile
    
    #           ,           
    #              ,      
    -optimizations !code/simplification/cast,!field/*,!class/merging/*
    앱 이 보관 해 야 할 공공 부분(통용)
  • 4 대 구성 요소 와 하위 클래스;
  • 사용자 정의 응용 프로그램;
  • support 아래 의 상속 하위 클래스
  • R 아래 자원
  • native 방법
  • Activity 에서 매개 변 수 는 view 의 방법
  • 매 거 진
  • 사용자 정의 뷰
  • 직렬 화(Parcelable,Serializable)
  • 리 셋 함수(On*Listener,On Event)
  • WebView
  • 
    #############################################
    #
    # Android              
    #
    #############################################
    
    #            ,    Application         
    #                
    -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
    
    #   support          
    -keep class android.support.** {*;}
    
    #      
    -keep public class * extends android.support.v4.**
    -keep public class * extends android.support.v7.**
    -keep public class * extends android.support.annotation.**
    
    #   R     
    -keep class **.R$* {*;}
    
    #     native      
    -keepclasseswithmembernames class * {
      native <methods>;
    }
    
    #    Activity       view   ,
    #        layout   onClick      
    -keepclassmembers class * extends android.app.Activity{
      public void *(android.view.View);
    }
    
    #          
    -keepclassmembers enum * {
      public static **[] values();
      public static ** valueOf(java.lang.String);
    }
    
    #          (   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);
    }
    
    #   Parcelable        
    -keep class * implements android.os.Parcelable {
      public static final android.os.Parcelable$Creator *;
    }
    
    #   Serializable         
    -keepclassmembers class * implements java.io.Serializable {
      static final long serialVersionUID;
      private static final java.io.ObjectStreamField[] serialPersistentFields;
      !static !transient <fields>;
      !private <fields>;
      !private <methods>;
      private void writeObject(java.io.ObjectOutputStream);
      private void readObject(java.io.ObjectInputStream);
      java.lang.Object writeReplace();
      java.lang.Object readResolve();
    }
    
    #          onXXEvent、**On*Listener ,     
    -keepclassmembers class * {
      void *(**On*Event);
      void *(**On*Listener);
    }
    
    # webView  ,        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);
    자신의 항목 부분 코드 를 유지 하 는 것 은 헷 갈 리 지 않 습 니 다.(자신의 항목 을 더 갖 춰 야 합 니 다)
  •  네트워크 요청(헷 갈 리 면 필드 오류 가 발생 하여 정상적으로 해석 할 수 없습니다)
  • 암호 화 클래스
  • 데이터베이스 실체 클래스
  • 도구 류
  • 프로젝트 에 응 용 된 제3자 도구 류(예 를 들 어 okhttp,eventbus,rxjava 등)는 구체 적 인 도구 소개 에 따라 조작 해 야 합 니 다
  • lib 와 copile 이 인용 한 제3자 jar 가방 을 헷 갈 리 지 않 게 유지 하 는 방법:
  • java -keep class .** { *; } 。
    예 를 들 어 인 용 된 과 대 신 비 를 유지 하 는 제3자 jar 가방 은 헷 갈 리 지 않 습 니 다.java -keep class com.iflytek.** { *; }
    
    #              
    -keep class com.xxxxx.function.**.net.** { *; }
    -keep class com.xxxxx.function.**.bean.** { *; }
    -keep class com.xxxxx.common.net.** { *; }
    -keep class com.xxxxx.common.bean.** { *; }
    #      
    -keep class com.xxxxx.crypt.** {*;}
    
    #          
    -keep class com.xxxxxx.function.**.dao.** { *; }
    #      
    -keep class com.xxxxx.common.utils.** { *; }
    #greenDAO 3
    #-keepclassmembers class * extends org.greenrobot.greendao.AbstractDao {
    #public static java.lang.String TABLENAME;
    #}
    #-keep class **$Properties
    #-dontwarn org.greenrobot.greendao.database.**
    #-dontwarn rx.**
    #greenDAO 3
    
    # Fresco
    #-keep class com.facebook.** {*;}
    #-keep interface com.facebook.** {*;}
    #-keep enum com.facebook.** {*;}
    
    # OkHttp3
    -dontwarn com.squareup.okhttp3.**
    -keep class com.squareup.okhttp3.** { *;}
    -dontwarn okio.**
    
    #Picasso
    #-dontwarn com.squareup.okhttp.**
    
    #zxing
    -dontwarn com.google.zxing.**
    -keep class com.google.zxing.** { *; }
    
    #webview
    -dontwarn com.tencent.**
    
    #eventbus    
    -keepattributes *Annotation*
    -keepclassmembers class ** {
      @org.greenrobot.eventbus.Subscribe <methods>;
    }
    -keep enum org.greenrobot.eventbus.ThreadMode { *; }
    
    # Only required if you use AsyncExecutor
    -keepclassmembers class * extends org.greenrobot.eventbus.util.ThrowableFailureEvent {
      <init>(java.lang.Throwable);
    }
    #        de.greenrobot.even beta1  ,        
    -keepclassmembers class ** {
      public void onEvent*(**);
    }
    
    #  
    -dontwarn com.amap.api.**
    -keep class com.amap.api.** {*;}
    
    #bugout
    -dontwarn com.qamaster.android.**
    -dontwarn com.testin.agent.**
    -keepattributes InnerClasses
    -keep class com.testin.agent.** { *; }
    -keepattributes SourceFile, LineNumberTable
    
    #butterknife
    -keep class butterknife.** { *; }
    -dontwarn butterknife.internal.**
    -keep class **$$ViewBinder { *; }
    -keepclasseswithmembernames class * {
      @butterknife.* <fields>;
    }
    -keepclasseswithmembernames class * {
      @butterknife.* <methods>;
    }
    
    #sharesdk
    -keep class cn.sharesdk.**{*;}
    -keep class com.sina.**{*;}
    -keep class **.R$* {*;}
    -keep class **.R{*;}
    -dontwarn cn.sharesdk.**
    -dontwarn **.R$*
    -dontwarn com.tencent.**
    -keep class com.tencent.** {*;}
    
    # rx
    -dontwarn rx.**
    -keepclassmembers class rx.** { *; }
    # retrolambda
    -dontwarn java.lang.invoke.*
    
    # Glide specific rules #
    -keep public class * implements com.bumptech.glide.module.GlideModule
    -keep public enum com.bumptech.glide.load.resource.bitmap.ImageHeaderParser$** {
      **[] $VALUES;
      public *;
    }
    
    #    
    -keep class com.umeng.message.protobuffer.* {
       public <fields>;
         public <methods>;
    }
    -keep class com.umeng.message.* {
       public <fields>;
         public <methods>;
    }
    
    #ormLite
    -keep public class * extends com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper
    -keep public class * extends com.j256.ormlite.android.apptools.OpenHelperManager
    -keepclassmembers class * {@com.j256.ormlite.field.DatabaseField *;}
    -keep class com.j256.ormlite.** {*;}
    
    # Gson specific classes
    -keep class sun.misc.Unsafe { *; }
    -keep class com.google.gson.stream.** { *; }
    
    #zbar
    -keep class net.sourceforge.zbar.**{*;}
    
    -keep class com.nineoldandroids.** {*;}
    
    #   ocr
    -keep class com.yd.ocr.idcard.** { *; }
    -keep class com.googlecode.** { *; }
    -keep class org.opencv.** { *; }
    
    #    
    -keep class com.iflytek.** { *; }
    
    # FastJson     
    -dontwarn com.alibaba.fastjson.**
    -keep class com.alibaba.fastjson.** { *; }
    -keepattributes Signature
    -keepattributes *Annotation*
    이로써 코드 혼동 은 이미 소개 가 끝 났 습 니 다.문제 가 있 으 면 제때에 지적 하고 같이 공부 하 세 요.감사합니다.
    이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

    좋은 웹페이지 즐겨찾기