Android Studio 프로젝트 릴리즈 빌드할때 Proguard를 이용해 로그제거하기

마켓에 애플리케이션을 릴리즈하기 전에 해야할 일 중 하나는 로그를 제거하는 작업입니다.

소스코드를 수정하지 않고 릴리즈 빌드할때 Proguard를 이용해 로그(android.util.Log) 메서드 호출을 간단하게 제거할 수 있습니다.

build.gradle에서 다음과 같이 릴리즈 빌드할때 Proguard를 적용하도록 정의해 줍니다.

    buildTypes {
        release {
            runProguard true
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.txt'
        }
    }

그리고 proguard-rules.txt를 아래와 같이 수정해 줍니다.

-assumenosideeffects class android.util.Log {
    public static *** d(...);
    public static *** v(...);
}

이렇게 설정하고 gradle assembleRelease로 빌드하면, Log.d(), Log.v() 호출은 제거됩니다. (리턴값을 참조하지 않는다면)

중요한 포인트는 -assumenosideeffects 옵션은 optimize 단계를 거쳐야만 적용이 된다는 점입니다. 때문에 proguard-android.txt가 아닌 proguard-android-optimize.txt를 사용하도록 설정해야 합니다.

이 파일들은 안드로이드 SDK의 tools/proguard 디렉토리에 위치하고 있습니다.

Android Studio에서 unsigned apk 생성하기

build.gradle에서 다음과 같이 release 빌드용 signing configuration을 정의해 줍니다.

    signingConfigs {
        release {
            storePassword ""
            keyAlias ""
            keyPassword ""
        }
    }

    buildTypes {
        release {
            signingConfig signingConfigs.release
        }
    }

그리고 아래와 같이 console에서 release 빌드하면,

$ gradle assembleRelease

다음 위치에서 unsigned apk를 확인할 수 있습니다.

build/outputs/apk/app-release-unsigned.apk