release時にlogを削除
1500 ワード
releaseではlogを除去することはよく知られていますが、logはデバッグの開発にのみ役立ち、releaseでは除去しないとパフォーマンスに影響します.2つ目はreleaseがlogを除去しない場合、他の人があなたのapkを逆分析するときに安全な問題があります.主に2つの方法でlogを除去します BuildConfig を通過
これは条件コンパイルではなく、コンパイラがコンパイル時に定数で包まれたdead codeをコード最適化しただけであることに注意してください. ProGuardによってログコードを最適化するには、まずProGuardに最適化オプションをオンにする必要があります.デフォルトでは、最適化 はオンになっていません.
proguard-android-optimize.txtには最適化アルゴリズムproguard-rulesが指定されている.Proに次の構成を加えればいいです
一部の人がLog方法をカスタマイズしてシステムLog方法を包装することを見て、BuildConfig.を使いますDEBUGやカスタム変数をスイッチすることで、実際にはログを削除することはできません.毎回空のメソッドを多く呼び出しているだけでなく、他の人があなたのapkに逆方向になった後、1つの変数の値を変えるだけですべてのログが印刷され、深刻なセキュリティ問題があります.あなたの印刷ログのコードがコンパイラに最適化されても、私は逆方向に手動で追加することができます.
Android studio生成プロジェクトのデフォルトではProGuardの最適化機能が有効になっていません.googleはこう言います.
そこでここでは,コンパイル時にLogコードを削除し,logを書くたびに判断を加えることを第1の方法として推奨する.
if (BuildConfig.DEBUG) {
Log.d("leslie", "hello world");
}
これは条件コンパイルではなく、コンパイラがコンパイル時に定数で包まれたdead codeをコード最適化しただけであることに注意してください.
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
proguard-android-optimize.txtには最適化アルゴリズムproguard-rulesが指定されている.Proに次の構成を加えればいいです
-assumenosideeffects class android.util.Log {
public static int v(...);
public static int i(...);
public static int w(...);
public static int d(...);
public static int e(...);
}
一部の人がLog方法をカスタマイズしてシステムLog方法を包装することを見て、BuildConfig.を使いますDEBUGやカスタム変数をスイッチすることで、実際にはログを削除することはできません.毎回空のメソッドを多く呼び出しているだけでなく、他の人があなたのapkに逆方向になった後、1つの変数の値を変えるだけですべてのログが印刷され、深刻なセキュリティ問題があります.あなたの印刷ログのコードがコンパイラに最適化されても、私は逆方向に手動で追加することができます.
Android studio生成プロジェクトのデフォルトではProGuardの最適化機能が有効になっていません.googleはこう言います.
# Optimization is turned off by default. Dex does not like code run
# through the ProGuard optimize and preverify steps (and performs some
# of these optimizations on its own).
-dontoptimize
-dontpreverify
そこでここでは,コンパイル時にLogコードを削除し,logを書くたびに判断を加えることを第1の方法として推奨する.