デバッグのために多くのLog.d()
または呼び出しを使用するアプリケーションがあります。Log.e()
次に、リリース用の最終パッケージを作成します。EclipseのAndroidエクスポート機能"Debuggable"
は、マニフェストのフラグを削除することに言及していますが、これは私が行ったものです。また、アプリケーションのパフォーマンスを向上させるためにすべての呼び出しにコメントする必要がありLog
ますか、それともこれらの呼び出しはデバッグ不可能な最終バージョンパッケージでは何もしませんか?
4 に答える
LogクラスをTraceというクラスにサブクラス化しました。これは、Logのメソッドをミラーリングしています。したがって、Trace.d(TAG、 "blah")を実行し、Trace.dメソッド内で、コードはLOGGING_LEVELと呼ばれる静的な最終クラス変数に基づいてのみ実行されます。この変数にはレベル1〜5(なし、エラーのみ、エラーと警告)があります。 、エラーと警告と情報、およびデバッグを含むすべて)。本番APKを作成するとき、Proguardはアプリケーションで使用されていないすべてのコードを削除するので、私に代わってそれを行います。
私にとって、ロギングはソースから削除するには非常に重要ですが、パフォーマンス、安全性、および知的財産の理由から、本番アプリケーションから削除する必要があります。
この構造により、アプリケーションにさらに多くのログを追加できるため、デバッグの問題がはるかに簡単になりますが、本番APKにはまったく影響しません。
public class Trace
{
public static final int NONE = 0;
public static final int ERRORS_ONLY = 1;
public static final int ERRORS_WARNINGS = 2;
public static final int ERRORS_WARNINGS_INFO = 3;
public static final int ERRORS_WARNINGS_INFO_DEBUG = 4;
private static final int LOGGING_LEVEL = ERRORS_ONLY; // Errors + warnings + info + debug (default)
public static void e(String tag, String msg)
{
if ( LOGGING_LEVEL >=1) Log.e(tag,msg);
}
public static void e(String tag, String msg, Exception e)
{
if ( LOGGING_LEVEL >=1) Log.e(tag,msg,e);
}
public static void w(String tag, String msg)
{
if ( LOGGING_LEVEL >=2) Log.w(tag, msg);
}
public static void i(String tag, String msg)
{
if ( LOGGING_LEVEL >=3) Log.i(tag,msg);
}
public static void d(String tag, String msg)
{
if ( LOGGING_LEVEL >=4) Log.d(tag, msg);
}
}
log.d
これにより、マニフェストにデバッグ可能フラグが設定されていないと、コード内の行が署名済みリリース apk に何らかの形で表示されないという私の仮定を確認することができました。私は間違っていました。それらはまだ表示されています。
SO をすばやく検索すると、この質問に対する受け入れられた回答が得られました。 公開する前にすべてのデバッグ ログ呼び出しを削除します。これを行うツールはありますか?
非常にうまく機能し、コードを変更する必要はありません。
developer.android.comから:
ロギングとデバッグをオフにし、データ/ファイルをクリーンアップするリリースでは、デバッグ機能がオフになっていること、およびデバッグやその他の不要なデータ/ファイルがアプリケーションプロジェクトから削除されていることを確認する必要があります。
マニフェストの要素からandroid:debuggable="true"属性を削除します。ログファイル、バックアップファイル、およびその他の不要なファイルをアプリケーションプロジェクトから削除します。個人データまたは専有データを確認し、必要に応じて削除します。ソースコードのLogメソッドへの呼び出しをすべて非アクティブ化します。