written: 2014-04-29 .. 2014-06-26

Android プログラミング - System.out.print() の除去

以前、ProGuard の機能を利用してリリースバージョンからデバッグ用の Log.d() 等の出力を除去する方法について解説しました(Log.d() の除去)。

今回は、同様のことを、Java の標準 API である System.out.print() の場合について解説します。もちろん、同じ方法は、System.out.println() 等でも使うことができます。

独自の Debug クラスを用意する

クラスの名前自体は、Debug だろうが、DebugPrinter だろうが、何でも構いませんが、ここでは Debug とします。次のようなクラスになります:


public class Debug {
	public static void print(String string) {
		System.out.print(string);
	}
}

プログラム中では、このクラス経由で間接的に、System.out.print() を使うようにします。つまり、標準出力から何か出力したいような場合は、System.out.print() は直接使わずに、Debug.print() の方を使うようにします。

このようにしておいて、ProGuard によって、リリースバージョンのコンパイル時に、この Debug.print() メソッドを削除するようにすればいいわけです。

project.properties


proguard.config=${sdk.dir}/tools/proguard/proguard-android-optimize.txt:proguard-project.txt

デフォルトでは proguard-android.txt となっている部分を proguard-android-optimize.txt に変える。こうしないと、次の proguard-project.txt における -assumunosideeffects オプションが効かない(※これは Log.d() を除去する場合と同じ)。

proguard-project.txt


-assumenosideeffects class (パッケージ名).Debug {
    public static void print(java.lang.String);
}

参考:System.out.print remover


Android