apk 크기가 너무 커져서 인터넷을 뒤지다가 해보니 효과가 있는 것 같아서 이렇게 옮깁니다.
모바일 앱 개발이란 세계는 당신의 안드로이드 앱 APK 크기를 최적화 하는 것이 엄청 중요한 일입니다.
더 작은 apk 크기란 사용자의 다운로드나 설치 시간을 줄일 뿐아니라 해당 기기의 저장 공간을 효율화 할 수 있습니다.
Proguard 와 R8 Code Shrinkers
Proguard와 R8 은
사용하지 않는 코드, 클래스 이름변경, 그리고 코드를 컴팩트하게 만들어 줌으로써
APK 크기를 획기적으로 줄여주는 code shrinker 입니다.
이 기능들은 안드로이드 스튜디오로 통합되어 있어 사용하기 편합니다.
자신의 안드로이드 프로젝트에서 Proguard 기능 활성화는 다음과 같이 build.gradle 파일에 내용을 추가 하면 됩니다.
android {
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt')
}
}
}
Proguard 환경설정 파일들은 난독화가 필요없는 특정 클래스, 메서드나 리스소를 제외할 수 있도록 커스터마이징 할 수 있습니다.
이는 특히 라이브러리들이나 프레임워크에서 중요한 부분입니다.
예를 들어 특정 클래스를 난독화로 부터 유지하려면, Proguard 환경파일에 다음 줄을 추가하면 됩니다:
-keep class com.example.myapp.model.** { *; }
R8 은 구글에서 나온 차세대 code shrinker 이며, 안드로이드 프로젝트에서 새로운 기본 옵션입니다.
이 축약 기능을 사용하기 위한 기본 설정은 build.gradle에 추가 할 수 있습니다.
android {
buildTypes {
release {
minifyEnabled true
useProguard false
}
}
}
리소스 최적화(Resource Optimization)
Vector Drawables
비트맵 이미지를 vector drawable로 교체하는 것으로 앱 크기를 크게 줄일 수 있습니다.
Vector drawables는 레졸루션 독립적이며 다양한 스크린 크기와 density에 적용 될 수 있습니다.
vector drawables을 사용하기 위해서, SVG or XML 벡터그래픽들을 Android Vector Drawable 형식으로 변경해야만 합니다.
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_vector_image" />
이미지 압축(Image Compression)
품질을 희생하지 않고 크기를 줄이도록 이미지 assets을 최적화 해야 합니다.
ImageMagick, TinyPNG, 혹은 Android Studio의 Image Asset Studio 같은 툴들이 이 과정에 도움이 될 수 있습니다.
모듈화( Modularization )
앱을 모듈로 쪼갬으로서 사용자에게 필요한 코드만 제공 할 수 있도록 합니다. Android App Bundle의 경우 앱의 모듈화 방법을 제공 합니다.
그리고 Play Store는 다운로드의 전체 크기를 줄임으로써 기기 환경에 맞는 테일러링 된 APK를 사용자에게 제공 할 수 있습니다.
build.gradle에서 App Bundle을 활성화 합니다:
android {
// ...
bundle {
language {
enableSplit = true
}
density {
enableSplit = true
}
}
}
코드 최적화(Code Optimization)
Lint Warnings
코드 상에 Lint Warnings 을 해결 하는 것으로 상당한 크기 축소의 효과가 있습니다. 때때로 Lint 는 중복코드를 감지하고 이를 수정하면 크기가 크게 줄어 줍니다.
다음 lint warning에 대해서 생각해 봅시다.
// Unnecessary object creation
String result = String("Hello, World!")
불필요한 오브젝트 생성을 제거 함으로써 코드를 최적화 합니다:
val result = "Hello, World!"
불필요한 리소스 제거(Removing Unused Resources)
layouts, strings, 또는 drawables 같은 사용하지 않는 리소스는 APK 크기에 영향을 줍니다.
Android Studio는 불필요한 resource 에 대해 개발자가 확인하고 제거 할 수 있도록 내장된 Lint 확인 기능을 가지고 있습니다.
예를 들어 다음과 같이 사용하지 않는 layout 파일이 있다면, Lint가 찾아 줄 것입니다:
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Unused Button" />
당신은 API 크기를 줄일 수 있게 사용하지 않는 layout을 안전하게 삭제 할 수 있습니다.
Proguard 규칙
필요한 코드만 유지하도록 맞춤 Proguard 규칙을 작성하면 APK 크기를 크게 줄일 수 있습니다.
예를 들어, 앱이 널리 사용되는 Gson 라이브러리를 사용하는 경우 Proguard 규칙을 추가하여 필요한 부분만 남겨 둘 수 있습니다.
-keep class com.google.gson.** { *; }
이 규칙은 Gson 관련 클래스 및 메소드가 Proguard에 의해 제거되지 않도록 합니다.
코드 분할 (Code Splitting )
특정 기능이나 모듈의 지연 로딩을 구현하면 기본 APK에 코드를 포함하는 대신 필요에 따라 코드를 로드할 수 있습니다.
앞서 언급한 Android App Bundle 접근 방식은 동적 모듈 제공을 지원합니다.
Native Libraries
앱에 기본 라이브러리가 포함되어 있는 경우 크기에 맞게 최적화하는 것을 고려합시다.
불필요한 기호를 제거하고 기본 라이브러리의 크기를 줄이려면 strip 및 objcopy 도구를 사용하십시오.
AAPT2 사용하기
AAPT2(Android Asset Packaging Tool 2)는 원래 AAPT의 향상된 버전입니다. 중복성을 제거하여 리소스 크기를 줄일 수 있습니다.
gradle.properties 파일에 다음 줄을 추가하여 프로젝트에서 AAPT2 사용이 기본이 될 수 있도록 합니다.
android.enableAapt2=true
의존성 줄이기(Reduce Dependencies)
프로젝트에 포함하는 모든 라이브러리는 APK 크기로 추가됩니다.
불필요한 종속성을 주의 깊게 평가하고 제거하거나 유사한 기능을 갖춘 더 작은 대체 라이브러리를 생각해 봅시다.
결론
Android 앱의 APK 크기를 최소화하는 것은 모바일 앱 개발에서 중요한 작업입니다.
코드 축소, 리소스 최적화, 모듈화 및 기타 기술을 조합하여 더 빠르게 로드하고, 더 적은 스토리지를 소비하며, 더 나은 사용자 경험을 제공하는 간결한 앱을 만들 수 있습니다.
APK 크기 최적화는 지속적인 프로세스여야 하며,
앱 크기를 정기적으로 검사하는 것은 새로이 크기 축소 가능성을 확인 하는 데 도움이 될 수 있습니다.
최신 도구와 기술을 최신 상태로 유지하고 앱 크기를 최소화할 수 있는 더 많은 방법을 찾기 위해 진화하는 Android 생태계를 주시하세요.
'모바일프로그래밍 > 안드로이드' 카테고리의 다른 글
안드로이드 gradle 빌드 하기 (4) | 2024.08.31 |
---|---|
안드로이드 스튜디오 설치하기 (2) | 2024.08.30 |
[Android] 안드로이드 용 OpenCV 빌드하기-3 (0) | 2024.01.24 |
[Android] 안드로이드 용 OpenCV 빌드하기-2 (1) | 2024.01.23 |
[Android] 안드로이드 용 OpenCV 빌드하기 (0) | 2024.01.22 |