프로그래밍 언어/Android

Android 앱의 릴리스 버전을 빌드하기 전에 모든 디버그 로깅 호출을 제거하는 방법

Rateye 2021. 9. 8. 10:27
728x90
반응형
질문 : Android 앱의 릴리스 버전을 빌드하기 전에 모든 디버그 로깅 호출을 제거하는 방법은 무엇입니까?

Google에 따르면 내 Android 앱을 Google Play에 게시하기 전에 " 소스 코드에서 Log 메서드 호출을 비활성화"해야합니다. 출판 체크리스트 의 섹션 3에서 발췌 :

릴리스 용 애플리케이션을 빌드하기 전에 로깅을 비활성화하고 디버깅 옵션을 비활성화해야합니다. 소스 파일에서 Log 메서드에 대한 호출을 제거하여 로깅을 비활성화 할 수 있습니다.

내 오픈 소스 프로젝트는 규모가 크며 릴리스 할 때마다 수동으로 수행하는 것이 고통 스럽습니다. 또한 로그 줄을 제거하는 것은 잠재적으로 까다로울 수 있습니다.

if(condition)
  Log.d(LOG_TAG, "Something");
data.load();
data.show();

Log 줄에 주석을 달면 조건이 다음 줄에 적용되고 chances are load ()가 호출되지 않습니다. 그러한 상황이 존재하지 않아야한다고 결정할만큼 드문 경우입니까?

그렇다면 더 나은 소스 코드 수준의 방법이 있습니까? 아니면 모든 로그 행을 효율적이고 안전하게 제거하는 영리한 ProGuard 구문일까요?

답변

훨씬 더 쉬운 해결책은 모든 곳에서 모든 if 검사를 잊어 버리고 ProGuardrelease 대상을 Log.d() 또는 Log.v() 메서드 호출을 제거하는 것입니다.

이렇게하면 항상 일반 빌드에 대한 디버그 정보가 출력되고 릴리스 빌드에 대한 코드를 변경할 필요가 없습니다. 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 샘플 앱을 참조하세요.

출처 : https://stackoverflow.com/questions/2446248/how-to-remove-all-debug-logging-calls-before-building-the-release-version-of-an
728x90
반응형