packageScope와 함께 R8을 사용하여 특정 패키지를 최적화할 수 있습니다. 이는 아직 R8을 사용하지 않는 앱의 선택적 첫 단계로 설계되었으며 이미 R8을 사용하는 앱에는 권장되지 않습니다.
packageScope 사용 여부 고려
앱에서 이미 R8을 사용하고 있다면 성능과 앱 크기 측면에서 최적이 아닌 구성이므로 packageScope을 사용하지 마세요. 대신 개선된 유지 규칙을 사용하여 앱의 R8 구성을 개선하거나 호환성 모드를 사용하는 경우 R8의 전체 모드로 이전하세요.
아직 R8을 사용하지 않지만 R8을 채택하는 앱의 경우 packageScope를 사용하여 전환을 점진적으로 관리합니다. R8은 앱 동작을 변경할 수 있는 강력한 최적화를 적용하므로 이러한 최적화를 AndroidX 및 Kotlin과 같이 최적화해도 안전한 특정 패키지로 범위를 지정하면 위험을 최소화하면서 성능을 개선할 수 있습니다. 앱이 안정화되면 이러한 최적화를 코드베이스와 종속 항목의 나머지 부분으로 점진적으로 확장하고 각 단계에서 안정성을 테스트할 수 있습니다.
기본 요건
packageScope와 함께 R8을 사용하려면 Android Gradle 플러그인 9.0 이상이 필요합니다.
최적화 구성
packageScope로 최적화를 사용 설정하려면 다음 단계를 완료하세요.
최적화할 라이브러리 선택
최적화할 라이브러리를 식별합니다. AndroidX 및 Kotlin 라이브러리 androidx.**, kotlin.**, kotlinx.**는 R8 호환성을 위해 구성된 안정적인 라이브러리이므로 이러한 라이브러리로 시작하는 것이 좋습니다.
packageScope로 R8 사용 지원 사용 설정
프로젝트의 gradle.properties 파일에 다음을 추가합니다.
android.r8.gradual.support=true
최적화 블록 설정
모듈 수준 build.gradle.kts (또는 build.gradle) 파일에서 optimization 블록을 출시 빌드 구성에 추가합니다. 이 블록 내에서 packageScope를 사용하여 최적화할 특정 패키지를 나열합니다. build.gradle.kts 파일에서 패키지 목록을 setOf()로 래핑합니다.
Kotlin
android { buildTypes { release { proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"),"proguard-rules.pro") optimization { enable = true packageScope = setOf("androidx.**","kotlin.**", "kotlinx.**") } } } }
Groovy
android { buildTypes { release { proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' optimization { enable = true packageScope = ["androidx.**", "kotlin.**", "kotlinx.**"] } } } }
최적화 테스트
packageScope 선언을 적용하거나 업데이트한 후 앱을 철저히 테스트하여 예기치 않은 비정상 종료나 동작 변경이 발생하지 않았는지 확인하세요.
지정된 패키지 최적화에서 전체 앱 최적화로 전환
최적화 이점을 극대화하려면 전체 앱에서 packageScope 사용에서 R8 사용으로 점진적으로 전환해야 합니다. 이 프로세스에는 최적화 범위를 점진적으로 확대하는 작업이 포함됩니다.
- 안정적인 라이브러리로 시작하세요.
packageScope목록에 R8의 최적화와 호환되는 널리 사용되는 안정적인 라이브러리만 포함하는 것으로 시작하세요. AndroidX 및 Kotlin 라이브러리androidx.**,kotlin.**,kotlinx.**로 시작합니다. - 패키지를 점진적으로 추가합니다.
packageScope에 새 패키지 접두사를 점진적으로 추가합니다.- 종속 항목 평가 앱의 라이브러리를 검토합니다.
packageScope목록에 추가하기에 적합한 후보에는 공식 Google 라이브러리 (예:com.google.**)와OkHttp(예:okhttp3.**,okio.**)와 같은 기타 강력한 라이브러리가 포함됩니다. 과도한 리플렉션, 직렬화 또는 네이티브 코드 호출 (JNI)이 포함되지 않은 라이브러리를 우선시하세요. - 패키지 크기에 따라 우선순위 지정 Android 스튜디오의 APK 분석기를 사용하여 앱 크기에 가장 큰 영향을 미치는 요소를 파악합니다.
1. R8을 사용 중지한 상태로 출시 AAB 또는 APK를 빌드합니다.
1. 분석기에서 열고
dex파일을 검사합니다. 1. 크기별로 패키지를 정렬합니다. 가장 큰 패키지는 최적화에 가장 높은 투자수익 (ROI)을 제공합니다. 이러한 라이브러리에 먼저 타겟팅하면 라이브러리에 지나치게 광범위한 유지 규칙이 없는 한 프로세스 초기에 크기를 가장 크게 줄일 수 있습니다. 자세한 내용은 라이브러리 현명하게 선택하기를 참고하세요.
- 종속 항목 평가 앱의 라이브러리를 검토합니다.
- 동작 변경사항 확인 각 새 패키지 접두사를 추가한 후 포괄적인 테스트를 실행하여 회귀 또는 예기치 않은 동작을 감지하고 해결합니다.
- 앱 패키지는 마지막에 추가합니다. 앱 패키지에서 리플렉션을 많이 사용하지 않는 경우
packageScope에 앱 패키지를 포함하고 필요에 따라 유지 규칙을 점진적으로 추가합니다. 앱 패키지에서 리플렉션을 많이 사용하는 경우packageScope에 패키지를 포함하고 필요한 패키지에 패키지 전체 유지 규칙을 추가합니다. 유지 규칙을 반복하여 세부적으로 조정합니다. - 전체 앱에서 R8 사용으로 전환. 앱의 종속 항목 대부분이
packageScope선언에 포함되고 앱이 안정화되면packageScope를 삭제하여 전체 모드에서 전체 앱을 최적화합니다.