본문으로 바로가기
반응형

개발하는 앱이 점점 커짐에 따라 용량에 민감해지기 시작했습니다.

매일 jenkin가 빌드를 돌려서 apk의 증가분을 리포트하기도 하며, 0.01MB가 늘어나더라도 "아닛!! 어디서 갑자기 불어난거야?" 라는 의심의 문구가 여기저기서 들려옵니다.

"이거 굉장히 유용한 library같은데 추가해 볼까?" 라는 생각을 하면서도 "이거 추가하며 쓸데없이 무거워 지는건 아닐까?"란 의심의 눈초리가 생길수 있기에 이를 측정하는 방법을 보고자 합니다.

물론 여러 방법이 있겠지만 저는 dependency가 있을때와 없을때에 따른 빌드를 두번 돌려서 최종 APK를 만든후 단순 용량을 비교해 봤습니다.

Library를 추가한 상태로 빌드

RestfulApi를 쉽게 사용하기 위해 가장 많이 알려진 Retrofit을 사용하고 있었습니다만, 좀더 직관적이고 심플한 ktor를 이용하고 싶었기에 아래와 같이 build.gradle에 dependency를 추가했습니다.

    //Ktor
    implementation ("io.ktor:ktor-client-core:${Versions.ktor}")
    implementation ("io.ktor:ktor-client-cio:${Versions.ktor}")
    implementation ("io.ktor:ktor-client-content-negotiation:${Versions.ktor}")
    implementation ("io.ktor:ktor-serialization-kotlinx-json:${Versions.ktor}")
    implementation ("io.ktor:ktor-client-logging-jvm:${Versions.ktor}")

그리고 이를 이용한 코드들을 뚱땅뚱땅 작성후 build를 진행합니다.

빌드는 그냥 Build -> Build Bundle(s) /APK(s) 를 이용해서 빌드 합니다.

이렇게 apk가 생성되면, 다음작업으로 dependency를 제거한후 빌드해야 하나, dependency를 제거하면, 이미 작업해 놓은 코드도 지워야 하니, 아래와 같이 변경합니다.

"implementation" -> "compileOnly"로 변경

제목과 같이 compileOnlybuild.gradle을 수정합니다.

    //Ktor
    compileOnly ("io.ktor:ktor-client-core:${Versions.ktor}")
    compileOnly ("io.ktor:ktor-client-cio:${Versions.ktor}")
    compileOnly ("io.ktor:ktor-client-content-negotiation:${Versions.ktor}")
    compileOnly ("io.ktor:ktor-serialization-kotlinx-json:${Versions.ktor}")
    compileOnly ("io.ktor:ktor-client-logging-jvm:${Versions.ktor}")

동일하게 Build -> Build Bundle(s) /APK(s) 를 실행하여 apk를 생성하면 해당 library를 제거된 상태로 apk가 생성됩니다.

다만...이 apk는 install하면 runtime error가 발생합니다. 컴파일만 가능하게 하고 실제 library가 포함되지 않았기 때문입니다.

이렇게 단순히 두 apk의 용량을 비교하여 library import에 따른 용량을 비교해 볼수 있습니다.

만약 몇십 Kb 늘었다면 "까이꺼 걍 씁시다" 라고 얘기하면 되고, 몇 Mb 정도로 늘었다면 이걸 써야 하는 장문의 이유을 논리적이고 합리적으로 준비하시면 됩니다.^^

반응형