android混淆解说

3895 ワード

転載は出所を明記してください。http://www.jianshu.com/p/1a16eb7fc402
プログレッシブの役割
progurardはコードを混同し、逆コンパイルされないようにするほか、圧縮、最適化、プリチェックコードの役割があります。
app.gradleファイルのbuildTypesにappの混淆についての文を書いています。まず見てください。
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
minifyEnbaled trueはprogurdFilesの後ろに二つの混淆規則が書かれたファイルがあるかどうかを設定します。最初はデフォルトで、二つ目はユーザーが自分で追加します。デフォルトではprogurd-android-optimize.txtの他にもう一つはprogurd-android.txtです。全部sdk\tools\proggaardフォルダにあります。この二つの違いは前に最適化したものです。もちろん最適化後には一定のリスクがあります。
Optimzations:If you don't want to optimize,use the progurd-android.txt configration file instead of this one,which turns off the optimization flags.Adding optimization introduceducess.cs。since for example not all optimizations performed by ProGrand works on all versions of Dalvik.The following flagturn off various optimizations known to have issues,but the list may not be completter puttitant.put。Make sure you test throughly if you go this route.
ユーザーが自分で追加した混淆規則ファイルの位置はProject Name\ap\progurard-rules.proで、デフォルトの混淆規則は大きいプロジェクトの中では足りないので、多くのカスタムの混淆規則を追加しなければなりません。
混淆は不要です
混同しない(類、方法など)つまり名前は変えられません。間違えます。
  • 反射に使用されたクラスは混淆されません。例えば、いくつかの注釈フレームは類名方法が不変でなければ反射できません。
  • Parcellableとそのサブクラス、そしてCreatorメンバー変数が混同されていません。
  • Rクラスとそのすべての内部staticクラスのすべてのstatic変数フィールドが混同されていません。
  • JSONオブジェクト類は混淆されておらず、JSONを対応するオブジェクトに解析することができません。
  • 第三者ソースライブラリを使用する場合、または他の第三者のSDKパケットを参照する場合、対応する混淆ルール
  • を混淆ファイルに追加する必要がある。
  • 役に立つWebViewのJs呼び出しも書くことを保証するインターフェース方法が必要です。
  • JNI方法は混淆しません。
  • ProGradの常用文法
    -library jars class_pathアプリケーションの依存パッケージ、例えばAndroid-support-v 4-keep[、modifier、...]class_specificationはいくつかのクラスを混同しません。specification混同しないタイプのメンバー-keepclassis withmembers[、modifier、...]クラスspecification混同しないクラスとそのメンバー-keepnames class_specificationは、クラスとそのメンバー名を混同しない-keepatributes{atributemune}与えられたオプション属性を混同しないspecification混淆類のメンバー名-keepclassis withmembersnamens class_specification混同類とそのメンバー名-asumenosideffects class_specificationは呼び出しに何の影響も与えないと仮定して、progurdコードの最適化時にその呼び出しをRemoveから削除します。Logなど-dontwarn[classigufilter]はwarnning moreを提示しません。
    一般コード
  • は、ある種類の構造方法を混同しないで、JSONObject
  • のような構造関数のパラメータタイプを指定したいです。
    -keepclassmembersclass cn.trinea.android.common.service.impl.ImageCache{
       public(int);
    }
    
  • は、あるカバンのすべての種類またはクラスクラス、あるインターフェースインターフェースインターフェースインターフェースを混同しないでください。指定クラスを混同しないと、*を類名
  • に変えます。
    -keep class com.facebook.**
    -keep class cn.trinea.android.common.**{ *;}
    
  • 混同しないである方法を指します。*指定された方法または類名
  • に変えることができます。
    -keepclassmembersclass cn.trinea.android.common.service.impl.ImageCache{
       public boolean get(java.lang.String,android.view.View);
    }
    
  • Parcebaleのサブクラスを混同しないで、android.os.BadParcel able Exception
  • を防止します。
    -keep class *implements android.os.Parcelable{
      public static final android.os.Parcelable$Creator*;
    }
    
  • 追加android-support-v 4.jar依存パケット
  • -libraryjars  libs/android-support-v4.jar
    -dontwarn android.support.v4.**    
    -keep class android.support.v4.**{ *;}  
    -keep interface android.support.v4.app.**{ *;}
    
  • proggaardとlog levelはdebugモードLog問題を解決して、Log.dとLog.vコードに副作用がないと表しています。progardの時にソースからremoveされます。このようにreleaseモード(正式発表)はログを印刷しません。
  • -assumenosideeffects class android.util.Log{
        public static ***d(...);
        public static ***v(...);
    }
    
    メモリ
    マップ
    mappingg.txtは、元のクラス、方法およびフィールド名と混淆後のコード間のマッピングを示しています。このファイルは重要です。リリースバージョンからバグレポートを受信すると、混淆されたコードを翻訳するためにそれを使ってもいいです。mappingファイルは\app\build\outputs\mapping\releaseにあります。
    特に以下のいくつかの参考資料を紹介します。
  • http://blog.csdn.net/chen930724/article/details/49687067
  • http://www.trinea.cn/android/proguard-grammar/
  • http://blog.csdn.net/yunyu5120/article/details/13024359
  • 公式サイト