질문 : 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
검사를 잊어 버리고 ProGuard 를 release
대상을 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
'프로그래밍 언어 > Android' 카테고리의 다른 글
Android Studio의 "cannot resolve symbol R" (0) | 2021.09.09 |
---|---|
Android 화면이 회전하면 활동 다시 시작 (0) | 2021.09.08 |
Android Studio-Android SDK 경로 변경 방법 (0) | 2021.09.08 |
[안드로이드] 버튼을 클릭 할 때 대화 상자가 닫히지 않도록 하는 방법 (0) | 2021.09.08 |
Android의 MVC 패턴 (0) | 2021.09.08 |