[Android] 앱의 크기를 줄이는 방법 (feat. VectorDrawable, WebP, shape drawable 등)

han·2021년 7월 30일
1

APK 대신에 App Bundle 사용하기

  • 8월부터 새로운 앱을 Play 스토어에 출시 할때 Android App Bundle(AAB) 로 등록해야 함
  • 현재 APK 인 앱들은 그대로 유지 가능
  • AAB 가 APK보다 15% 크기가 작음
  • 업데이트 배포 방법을 더 상세히 제어할 수 있어서 빠르고 효율적인 업데이트 가능

사용하지 않는 리소스 삭제

사용하지 않는 코드들을 일일이 찾지 않아도 리스트를 모아서 보여준다.


바로 삭제하려면 Refactor를 누르면 대고 리스트를 보려면 Preview를 누르면 밑에 화면이 나온다.

사용하지 않는 선택적 리소스 삭제

언어 리소스(예: AppCompat 또는 Google Play Services)가 포함된 라이브러리에는 전 세계의 언어가 포함되어 사용하는 경우가 있다.
하지만 앱에서 특정 언어만 지원 대상으로 삼는 경우에는 굳이 전부 앱에 포함시킬 필요가 없다.

예를들어, 내가 개발하는 앱에 지원되는 언어 중에 한, 영 언어만 한정해서 사용할 수 있다.
따라서 앱에서 공식적으로 지원하는 언어만 유지하려면 resConfig속성을 사용하여 해당 언어(en, ko 등)를 지정할 수 있다.
지정되지 않은 언어에 대한 모든 리소스는 제거되며 모바일 Locale을 제3국으로 지정해도 언어가 변경되지 않는다.

Gradle파일

리소스 축소 사용

리소스 축소는 코드 축소와 함께만 작동한다고 한다.
설명에 앞서 코드를 봐보자.

Gradle파일

android {
    ...
    buildTypes {
        getByName("release") {
            shrinkResources = true
            minifyEnabled = true // false로 기본설정
            proguardFiles(
                getDefaultProguardFile("proguard-android.txt"),
                "proguard-rules.pro"
            )
        }
    }
}

코드를 보면 minifyEnabled는 false로 처음에 설정되어있는데 사용하지 않는 리소스 삭제를 위해 true로 바꿔준다.
shrinkResources는 리소스 제거를 시작하기 전에 동적으로 생성되거나 호출되는 클래스 또는 메서드를 유지하기 위해 true로 생성해준다.
또한 Proguard는 빌드 시간이 늘어나기 때문에 위 코드처럼 release 블록에서 이 방법을 사용해야 한다.

필요한 종속성만 추가

라이브러리를 추가한다고 할 때 Google Play Services나 Facebook SDK처럼 아주 많은 라이브러리를 포함하고 있는 것이 있는데, 전부 다 넣지말고 필요한 개별 라이브러리(googleservice-authentication 등)만 찾아서 넣으라는 애기다.

보통 Terminal 에서 gradlew app:dependencies 라고 치면 트리구조를 볼 수있다고 하는데 알아보기가 힘들어서 해당 라이브러리 문서를 보는 방법이 편할 수도 있다.

쉐이프 드로어블(shape drawable) 사용

Shape Drawable은 비트맵보다 용량이 작으면서 직사각형이나 타원형, 모서리 라운딩 등을 모두 XML로 작성할 수 있다.

Shape Drawable을 사용하면 앱 크기는 물론, 개발자가 직사각형이나 타원형, 그라데이션이 있는 배경을 간단히 제작하여 바로 사용할 수 있다.

circle_blue.xml

WebP 사용 ( 이미지 크기 )

WebP는 Google이 제공하는 이미지 포맷으로 PNG 포맷보다 크기가 30% 정도 작아서 앱 크기를 줄일 수 있다고 한다.

하지만, 애플리케이션 작업할 때 Minimum SDK를 지원하고 싶다면 Android API 레벨 18 이상을 사용해야 배경 투명도를 사용할 수 있다.

WebP변환하는 방법에 대해서 알아보자.

먼저 변환할 이미지를 Convert to Webp한다.

크기변환


원본 사이즈의 18%로 줄어든것을 확인할 수 있다.

VectorDrawable 사용

VectorDrawable은 XML 파일에서 연관된 색상 정보와 함께 점, 선, 곡선의 조합으로 정의되는 벡터 그래픽이며, 벡터 이미지는 비트맵 이미지보다 작다고 한다.

VectorDrawable을 사용하기 이전에는 각 화면 밀도에 맞는 비트맵 리소스를 제공해왔으나, APK에 포함되는 리소스의 크기도 크고 밀도별 리소스를 관리하는 것도 귀찮다고 한다.
이런 결과, 안드로이드 APK의 사이즈를 줄이기 위해 비트맵 대신 VectorDrawable을 사용한다고 볼 수 있다.

VectorDrawable은 한 번만 클릭하면 화질은 그대로 유지한 채 화면 밀도에 맞춰 크기를 자동으로 변환해 준다고 한다.

그러면 VectorDrawable을 사용하는 방법에 대해서 알아보자.
보통 SVG를 안드로이드 스튜디오에서 바로 사용할 수 없으니 VectorDrawable로 변환해서 사용한다고 알고 있다.
1. Vector Asset 클릭

  1. 변환하고 싶은 svg파일 선택 ( Next -> Finish )

    Size는 원하는 크기를 선택하면 된다. (기본값은 24dp x 24dp라고 한다.)

  2. Finish

참고 : https://engineering.linecorp.com/ko/blog/reduce-android-app-size/

profile
개인 공부 및 기록겸 벨로그 시작

0개의 댓글