Proguardの使用
6028 ワード
ASを使用してプロジェクトを新規作成する場合、moduleのbuildファイルにデフォルトで表示されます.
プロジェクトを混同する必要がある場合は、minifyEnabledをtrueに設定するだけです.また、
proguard潜入規則
Proguardはデフォルトのルールがあり、これらのルールはsdk/tools/proguard/proguard-androidに配置されています.txtでは、私たち自身のプロジェクトで混同する必要があるのは、私たちのプロジェクトに書かれているproguard-rulesです.Proファイルの中
プライマリ・ルール-keepattributes*Annotation*注記のパラメータ を保持 keepリザーブパッケージ/クラス 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
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ファイルの中
プライマリ・ルール
-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パッケージの内容. `-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 (...);
}`
以上、android sdkでデフォルトのproguardルールについて説明します.次はドキュメントの翻訳ですhttp://proguard.sourceforge.net/index.html#manual/usage.html主にルール関連
proguardについてProファイルの編集規則
Input/Output Options入出力相関
Shrinking Options圧縮
Optimization Options最適化
Obfuscation Options混同