나는 훨씬 쉽게 솔루션은 모든 잊지 찾을 if여기 저기 검사를 그냥 사용 ProGuard에서을 어떤 밖으로 제거하기 위해서 Log.d()또는 Log.v()우리가 우리의 개미 호출 할 때 메서드 호출을 release대상입니다.
이렇게하면 항상 일반 빌드에 대해 디버그 정보가 출력되므로 릴리스 빌드에 대해 코드를 변경할 필요가 없습니다. 또한 ProGuard는 바이트 코드를 여러 번 통과하여 원하지 않는 다른 명령문, 빈 블록을 제거하고 적절한 경우 짧은 방법을 자동으로 인라인 할 수 있습니다.
예를 들어 다음은 Android 용 기본 ProGuard 구성입니다.
-dontskipnonpubliclibraryclasses
-dontobfuscate
-forceprocessing
-optimizationpasses 5
-keep class * extends android.app.Activity
-assumenosideeffects class android.util.Log {
public static *** d(...);
public static *** v(...);
}
파일에 저장 한 다음 Ant에서 ProGuard를 호출하여 방금 컴파일 한 JAR과 사용중인 Android 플랫폼 JAR을 전달합니다.
ProGuard 매뉴얼 의 예제 도 참조하십시오 .
업데이트 (4.5 년 후) : 요즘에는 Android 로깅에 Timber 를 사용했습니다 .
Log로그 태그가 자동으로 설정되고 서식이 지정된 문자열과 예외를 쉽게 기록 할 수 있는 기본 구현 보다 약간 우수 할뿐만 아니라 런타임에 다른 로깅 동작을 지정할 수도 있습니다.
이 예제에서 로깅 명령문은 내 앱의 디버그 빌드에서 logcat에만 작성됩니다.
내 Application onCreate()방법으로 목재를 설정했습니다 .
if (BuildConfig.DEBUG) {
Timber.plant(new Timber.DebugTree());
}
그런 다음 내 코드의 다른 곳에서 쉽게 로깅 할 수 있습니다.
Timber.d("Downloading URL: %s", url);
try {
// ...
} catch (IOException ioe) {
Timber.e(ioe, "Bad things happened!");
}
개발 중에 모든 로그 문이 logcat으로 전송되고 프로덕션 환경에서는 디버그 문이 기록되지 않지만 오류는 Crashlytics에 자동으로보고되는 고급 예제 는 Timber 샘플 앱 을 참조하십시오 .