Proguardの使用

6028 ワード

ASを使用してプロジェクトを新規作成する場合、moduleのbuildファイルにデフォルトで表示されます.
 buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

プロジェクトを混同する必要がある場合は、minifyEnabledをtrueに設定するだけです.また、shrinkResources trueを設定して、プロジェクト内の不要なリソースファイルを削除することもできます.
proguard潜入規則
Proguardはデフォルトのルールがあり、これらのルールはsdk/tools/proguard/proguard-androidに配置されています.txtでは、私たち自身のプロジェクトで混同する必要があるのは、私たちのプロジェクトに書かれているproguard-rulesです.Proファイルの中
プライマリ・ルール
  • -keepattributes*Annotation*注記のパラメータ
  • を保持
  • keepリザーブパッケージ/クラス
  • -keepclasseswithmembernames class * { native ; }は、nativeメソッドを含むすべてのクラスを混同しない.
  • -keepclassmembers class * extends android.app.Activity { public void *(android.view.View); }は、ビュー内のsetメソッドとgetメソッドを混同せず、プロパティアニメーションが正常であることを確認します.
  • -keepclassmembers class * extends android.app.Activity { public void *(android.view.View); }は、Activityから継承されたすべてのクラスを保持します.すなわち、すべてのactivityが混同されない.
  • -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); }すべての列挙タイプは混同されない.
  • -keepclassmembers class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator CREATOR; }すべてのシーケンス化されたクラスにおけるCreatorメソッドは、混同されない
  • -keepclassmembers class **.R$* { public static ; } Rファイルの静的フィールドを混同せず、
  • -dontwarn android.support.** warn警告なしandroid.supportパッケージの内容.
  • androidを混同しない.support.annotation.Keep関連クラス、メソッド、メンバー変数、初期化
      `-keep class android.support.annotation.Keep
    
      -keep @android.support.annotation.Keep class * {*;}
    
      -keepclasseswithmembers class * {
       @android.support.annotation.Keep ;
      }
    
      -keepclasseswithmembers class * {
        @android.support.annotation.Keep ;
      }
    
      -keepclasseswithmembers class * {
        @android.support.annotation.Keep (...);
      }`
    
  • いくつかのキーワードについて
  • -dontusemixedcaseclassnames混同時に大文字小文字混同は適用されません
  • -dontskipnonpubliclibraryclasses libraryの非publicクラス
  • をスキップしない
  • -verbose詳細な混同情報
  • を打たない
  • -dontoptimize混同ファイルのサイズ最適化、
  • -dontpreverify検査なし

  • 以上、android sdkでデフォルトのproguardルールについて説明します.次はドキュメントの翻訳ですhttp://proguard.sourceforge.net/index.html#manual/usage.html主にルール関連
    proguardについてProファイルの編集規則
  • は、行全体
  • を注釈するために#を使用することができる.
  • 単語と区切り文字の間のスペースは自動的に無視され、特にスペースが必要なのは単一引用符または二重引用符です.
  • 配置のパラメータの一般的な順序は前後
  • を区別しない.
    Input/Output Options入出力相関
  • include filename作成ファイル
  • を読み込む
  • basedirectory再帰読取ファイルディレクトリの下の内容
  • injars CLASS_PATHは、読み込んだjarのパス
  • を指定する
  • outjars CLASS_PATH出力を指定するjarのパス
  • libraryjars CLASS_PATH指定ライブラリファイルのパス
  • skipnonpubliclibraryclassesスキップされた非共通クラス
  • を指定
  • dontskipnonpubliclibraryclassesスキップしない非共通クラス
  • を指定
  • dontskipnonpubliclibraryclassmembers無視しないライブラリクラスのメンバー変数とメソッド
  • を指定
  • keepdirectories[directory_filter]出力jarsのディレクトリを指定します.デフォルトは削除された
  • です.
  • target version指定処理ファイルのバージョン
  • 比較入力、出力ファイルのタイムスタンプ
  • Keep Options保留、混同しない
  • keep [,modifier,...] class_specificationは、指定されたクラスおよびメンバー変数を保持し、保存されたコードを基準
  • とする.
  • keepclassmembers [,modifier,...] class_specification指定予約クラスメンバー
  • keepclasseswithmembers [,modifier,...] class_specificationはクラスとメンバーが存在する場合に
  • を保持する.
  • keepnames class_specificationは、保持するクラスのメンバー
  • を指定する
  • keepclassmembernames class_specificationは、コード圧縮時に
  • が除去されなかった場合に保持するメンバーを指定する.
  • keepclasseswithmembernames class_specificationは、コードを圧縮する際に保持するクラスおよびメンバー
  • を指定する.
  • printseeds[filename]一致するクラスとメンバーを指定した出力ファイル
  • に詳細にリストします.
    Shrinking Options圧縮
  • dontshrink非圧縮クラスファイル
  • を指定
  • printusage[filename]不要コード(dead code)が指定リスト
  • に出力.
  • whyareyoukeeping class_specificationは、指定されたクラスおよびメンバーが指定された圧縮レベルでなぜ
  • を圧縮しないのかを示す.
    Optimization Options最適化
  • dontoptimize最適化されていないクラスファイルを指定し、デフォルトbyteレベル最適化
  • optimizations optimization_filterは、詳細な最適化レベルで最適化するかどうかを指定します.
  • assumenosideeffects class_specificationは、削除してもプロジェクトに影響を与えない方法を指定します.例えば、この構成を用いてログコード
  • を削除する.
  • allowaccessmodificationはさらに最適化するために使用されますが、使用は推奨されません.一部の仮想マシンでは、問題が発生します.
  • m e r g e interfacesaggressivelyはインタフェースのマージを指定し、さらに使用を推奨せず、生成されたコード
  • を処理できない仮想マシンもあります.
    Obfuscation Options混同
  • dontobfuscate入力を混同しないクラス
  • を指定する
  • printmapping[filename]対応するファイルの新しい名前を指定する
  • applymapping filename再使用する特定の名前を指定
  • applymapping filename混同ファイルとメソッドを指定するテキストファイル
  • obfuscationdictionary filename混同用のファイルを指定し、混同時のみ
  • を適用する
  • classobfuscationdictionary filename前回の
  • に類似
  • packageobfuscationdictionary filenameは、前の
  • に類似しています.
  • overloadaggressivelyは、パラメータと戻り値のタイプが異なる限り、複数のフィールドとメソッドを再名できる混同を指定します.
  • useuniqueclassmembernames同じ名前に同じ混同名を適用することを指定し、異なる混同名は異なるメンバー
  • に割り当てられる.
  • dontusemixedcaseclassnames混同大文字と小文字の混合を使用しない方法
  • keeppackagenames[package_filter]指定パッケージが混同しない
  • flattenpackagehierarchy[package_name]指定パケットを指定した親パケットに移動し、処理後のコードを減らす.
  • repackageclasses[package_name]指定クラスが指定されたパッケージに移動します.
  • keepattributes[attribute_filter]は、保持する属性
  • を指定します.
  • keepparameternames混同しないメソッドのパラメータ名とタイプ
  • を指定
  • renamesourcefileattribute[string]SourceFileに定数文字を配置する
  • を指定します.
  • adaptclassstrings[class_filter]指定クラス名文字列定数が混同される
  • adaptresourceflenames[FILE_FILTER]指定リソースファイル名前変更
  • adaptresourceflecontents[FILE_FILTER]指定コンテンツが更新されるリソース定数
  • Preverification Options検査
  • dontpreverify不検証処理を指定するクラス
  • microedition指定処理のファイルはJava Micro Edition
  • General Options一般
  • verbose印刷全情報
  • dontnote[class_filter]印刷しない構成の潜在的なエラーと漏れ
  • を指定します.
  • dontwarn[class_filter]未解決の参照とその他の問題を警告しないことを指定
  • ignorewarningsは、未解決の参照と問題をすべて印刷することを指定しますが、
  • を実行し続けます.
  • printconfiguration[filename]は、ファイルと変数
  • を含む解析された構成全体を印刷する.
  • dump[filename]出力クラスファイルの内部構造を指定dontwarn