いやあ、知らないって事は恐ろしいですな。
AndroidManifest.xmlに、確かdebaggableとかいう設定があったと思う。
だから私は「これをfalseにすれば、デバッグ出力のLog.d()は出力されないんだろう」と何の根拠もなく思い込んでいた。
偶然、「ログをリリース時にオフにする方法」みたいな記事があったので見てみると、全然そんな仕様じゃないことがわかった。
debaggableじゃなくて他の設定だろうと思って調べたけど、どうもそうではない模様。
つまり、Log.d()はそのまま出るんだ!
Javaのところは、ここ。
最後はprintln_native()が呼ばれている。
https://android.googlesource.com/platform/frameworks/base/+/android-4.3_r2.1/core/java/android/util/Log.java
Nativeは、これでよいのかな。
https://github.com/android/platform_frameworks_base/blob/master/core/jni/android_util_Log.cpp
__android_log_buf_write()が呼ばれるようだ。
もう、誰にも止められない・・・
JNIなんだな、ログって。
けっこう重たい動きになるんだ。
なんか、一括して、しかもバイナリレベルで呼び出されないくらいのことをしてくれんかと思って探すと、ProGuardで消すというのが一番多かった。
proguard-rules.proに、
-assumenosideeffects class android.util.Log {
public static int v(...);
public static int d(...);
public static int i(...);
public static int w(...);
public static int e(...);
public static int wtf(...);
}
みたいなのを書いて、build.gradleに、
buildTypes {
release {
runProguard true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
みたいな変更をして、Signed APKを作るようだ。
僕はこういうクラス作ってリリースビルド時のログ消してますねー
返信削除https://github.com/napplecomputer/toStarAutoReply/blob/master/app/src/main/java/co/natsuhi/tostarautoreply/utils/LogUtil.java
なるほど、debaggableの設定を見に行って決めるのですね。
削除ProGuardだと影響が全体に及ぶので、自作の部分だけにしたいなら自作で用意した方がよいですね。
技として覚えておきますー