R8을 사용하여 앱 축소, 최적화, 신속 처리
Android 성능 Spotlight Week의 첫날에 오신 것을 환영합니다.
앱 성능을 개선하기 위해 할 수 있는 가장 영향력이 크고 노력이 적게 드는 변경사항인 전체 모드 에서 R8 최적화 도구를 사용 설정하는 것으로 시작합니다.
앱 크기를 줄이는 도구로 R8을 이미 알고 계실 수도 있습니다. R8은 사용하지 않는 코드와 리소스를 삭제하여 앱 크기를 줄이는 데 매우 효과적입니다. 하지만 R8의 진정한 강점은 최적화 도구로서의 역할입니다.
전체 모드를 사용 설정하고 최적화를 허용하면 R8은 전체 프로그램 최적화를 실행하여 코드를 근본적으로 더 효율적으로 다시 작성합니다. 이는 단순한 미세 조정이 아닙니다.
이 도움말을 읽은 후 YouTube에서 R8 최적화 도구에 관한 성능 Spotlight Week 소개를 확인하세요.
R8이 앱 성능을 개선하는 방법
R8 최적화 도구가 앱 성능을 개선하기 위해 취하는 가장 큰 단계를 집중적으로 살펴보겠습니다.
트리 셰이킹 은 앱 크기를 줄이는 가장 중요한 단계입니다. 이 단계에서 R8 최적화 도구는 앱이 종속된 라이브러리에서 사용하지 않는 코드와 자체 코드베이스에서 데드 코드를 삭제합니다.
메서드 인라이닝 은 메서드 호출을 실제 코드로 대체하여 런타임 성능을 개선합니다.
클래스 병합 및 기타 전략이 적용되어 코드를 더 간결하게 만듭니다. 인터페이스 및 클래스 계층 구조와 같은 모든 추상화는 이 시점에서 중요하지 않으며 삭제될 가능성이 높습니다.
코드 최소화 는 클래스, 필드, 메서드의 이름을 더 짧고 의미 없는 이름으로 변경하는 데 사용됩니다. 따라서 MyDataModel 대신 a라는 클래스가 생성될 수 있습니다. 이는 R8 최적화 앱에서 스택 트레이스를 읽을 때 가장 혼란을 야기하는 부분입니다. (AGP 9.0에서 이 문제가 개선되었습니다.)
리소스 축소 는 XML 파일 및 드로어블과 같은 사용하지 않는 리소스를 삭제하여 앱 크기를 더욱 줄입니다.
이러한 단계를 적용하면 R8 최적화 도구가 앱 시작 시간을 개선하고, 느리고 정지된 프레임이 적은 더 부드러운 UI 렌더링을 지원하며, 전반적인 기기 내 리소스 사용량을 개선합니다.
사례 연구: R8을 사용한 Reddit의 성능 개선
R8이 가져올 수 있는 성능 개선의 한 예로 Reddit의 예를 살펴보겠습니다. 전체 모드에서 R8을 사용 설정한 후 Android용 Reddit 앱은 다양한 영역에서 상당한 성능 개선을 보였습니다.
캡션: R8이 Reddit의 앱 성능을 개선한 방법
팀은 콜드 스타트가 40% 더 빨라지고, '애플리케이션 응답 없음'(ANR) 오류가 30% 감소하고, 프레임 렌더링이 25% 개선되고, 앱 크기가 14% 감소하는 것을 확인했습니다.
이러한 개선사항은 사용자 만족도에 매우 중요합니다. 시작 속도가 빠르면 대기 시간이 줄어들고 콘텐츠에 더 빠르게 액세스할 수 있습니다. ANR이 줄어들면 앱이 더 안정적이고 신뢰할 수 있게 되어 사용자 불만이 줄어듭니다. 더 부드러운 프레임 렌더링은 UI 버벅거림을 없애 스크롤과 애니메이션을 유연하고 반응성이 좋게 만듭니다. 이러한 긍정적인 기술적 영향은 사용자 감정에서도 분명히 확인할 수 있었습니다.
R8 사용의 비기술적 부작용
파트너와 협력하는 동안 이러한 기술적 개선사항이 사용자 만족도에 직접적인 영향을 미치고 사용자 유지, 참여, 세션 길이에 반영될 수 있음을 확인했습니다. 일일, 주간 또는 월간 활성 사용자로 측정할 수 있는 사용자 재방문율도 기술적 성능 개선의 영향을 받았습니다. 또한 Google Play 스토어의 앱 평점이 R8 도입과 함께 상승하는 것을 확인했습니다. 제품 소유자, CTO, 의사 결정권자와 이를 공유하면 앱 성능을 개선하는 데 도움이 될 수 있습니다.
의도적인 성능 최적화는 미덕 이라고 할 수 있습니다.
성능이 더 우수한 앱으로 안내
R8에 관한 개발자 가이드를 개선해야 한다는 의견이 있었습니다. 그래서 작업을 시작했습니다. 이제 R8 최적화 도구에 관한 개발자 가이드는 훨씬 더 실행 가능하며 R8을 사용 설정하고 디버깅하는 데 관한 포괄적인 가이드를 제공합니다.
문서에서는 채택을 위한 높은 수준의 전략을 안내하며, 최적화 친화적인 라이브러리를 선택하고 안정성을 보장하기 위해 R8의 기능을 점진적으로 채택하는 것이 중요함을 강조합니다. 이 단계별 접근 방식을 사용하면 디버깅하기 어려운 문제에 관한 안내를 제공하면서 R8의 이점을 안전하게 활용할 수 있습니다.
R8 최적화 도구를 제어하는 기본 메커니즘인 Keep 규칙에 관한 안내를 크게 확장했습니다. 이제 Keep 규칙이 무엇인지, 적용 방법, 작성 및 유지관리 권장사항을 안내하는 섹션을 제공합니다. 또한 실용적이고 실행 가능한 사용 사례와 예를 제공하여 R8이 리플렉션을 통해 액세스하거나 JNI 네이티브 인터페이스를 사용하는 코드와 같이 런타임에 필요한 코드를 삭제하지 않도록 올바르게 방지하는 방법을 이해하는 데 도움을 드립니다.
이제 문서에서는 필수 후속 조치와 고급 시나리오도 다룹니다. 테스트 및 문제 해결에 관한 섹션을 추가하여 성능 향상을 확인하고 발생할 수 있는 잠재적 문제를 디버깅할 수 있습니다. 고급 구성 섹션에서는 특정 빌드 변형을 타겟팅하고 유지하거나 삭제할 리소스를 맞춤설정하는 방법을 설명하며, 라이브러리 작성자를 위한 특별한 최적화 안내를 제공하여 다른 개발자가 사용할 수 있는 최적화된 R8 친화적인 패키지를 제공할 수 있도록 합니다.
R8 최적화 도구의 잠재력을 최대한 활용
R8 최적화 도구는 Android Gradle 플러그인 버전 8.0부터 기본적으로 '전체 모드'를 사용합니다. 프로젝트가 수년 동안 개발된 경우 사용 중지하는 레거시 플래그가 포함되어 있을 수 있습니다. gradle.properties 파일에서 이 줄을 확인하고 삭제하세요.
android.enableR8.fullMode=false // delete this line to enable R8's full potential
이제 출시 변형의 앱 build.gradle.kts 파일에서 R8을 사용 설정했는지 확인합니다. isMinifyEnabled 및 isShrinkResources를 true로 설정하여 사용 설정합니다. 이 단계에서 기본 구성 파일과 맞춤 구성 파일을 전달할 수도 있습니다.
release {
isMinifyEnabled = true
isShrinkResources = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"keep-rules.pro"
)
}사례 연구: Disney+ 성능 개선
Disney+ 의 엔지니어는 앱 성능에 투자하고 앱의 사용자 환경을 최적화하고 있습니다. 때로는 사소해 보이는 변경사항도 큰 영향을 미칠 수 있습니다. 팀은 R8 구성을 검사하는 동안 -dontoptimize 플래그가 사용되고 있음을 발견했습니다. 이 플래그는 오늘날에도 많은 앱에서 사용되는 기본 구성 파일에 의해 도입되었습니다.
Disney+팀은 proguard-android.txt를 proguard-android-optimize.txt로 대체한 후 앱 성능이 크게 개선되었습니다.
이 변경사항이 포함된 새 버전의 앱이 사용자에게 출시된 후 Disney+는 앱 시작 속도가 30% 빨라지고 사용자가 인식하는 ANR이 25% 감소했습니다.
오늘날에도 많은 앱에서 proguard-android.txt 파일에 -dontoptimize 플래그가 포함된 파일을 사용하고 있습니다. 이때 Google의 도구 개선사항이 도움이 됩니다.
도구 지원
Android 스튜디오 Narwhal 3 기능 출시부터 proguard-android.txt를 사용하는 경우 린트 경고가 표시됩니다.
AGP 9.0부터는 파일 지원이 완전히 중단 됩니다. 즉, proguard-android-optimize.txt로 이전해야 합니다.
또한 R8 최적화 코드를 그 어느 때보다 쉽게 디버깅할 수 있도록 새로운 Android 스튜디오 기능 에 투자했습니다. AGP 9.0부터는 Android 스튜디오의 Logcat 내에서 R8 처리 빌드의 스택 트레이스를 자동으로 난독화 해제하여 완전히 최적화된 앱에서도 문제를 일으키는 정확한 코드 줄을 찾아낼 수 있습니다. 이 내용은 내일 이 Android 성능 Spotlight Week에 관한 블로그 게시물에서 더 자세히 다루겠습니다.
다음 단계
YouTube에서 R8 최적화 도구에 관한 성능 Spotlight Week 소개를 확인하세요.
📣 성능 챌린지에 참여하세요!
이제 직접 이점을 확인해 보세요.
오늘 앱에 R8 전체 모드를 사용 설정해 보세요.
- 개발자 가이드에 따라 시작하세요. 앱 최적화 사용 설정.
- 여전히
proguard-android.txt를 사용하는지 확인하고proguard-android-optimize.txt로 대체합니다. - 그런 다음 영향을 측정 합니다. 차이를 느끼는 것뿐만 아니라 확인 하세요. GitHub의 Macrobenchmark 샘플 앱에서 코드를 조정하여 시작 시간을 전후로 측정하여 성능 향상을 측정합니다.
앱 성능이 크게 개선될 것이라고 확신합니다. R8 사용 설정 또는 문제 해결에 관한 질문은 #optimizationEnabled를 사용하세요. 최선을 다해 도와드리겠습니다.
금요일에 진행되는 Ask Android 세션에 질문을 가져오세요.
소셜 태그 #AskAndroid를 사용하여 성능에 관한 질문을 가져오세요. 이번 주 내내 질문을 모니터링하고 11월 21일 금요일에 진행되는 성능에 관한 Ask Android 세션에서 여러 질문에 답변해 드리겠습니다. 내일은 디버깅 및 문제 해결에 관해 더 자세히 알아보겠습니다. 지금은 R8을 시작하고 앱을 신속하게 처리하세요.
계속 읽기
-
이벤트 및 프로그램
R8 최적화 도구 및 프로필 기반 최적화의 기본 기능부터 Jetpack Compose를 사용한 성능 개선, 앱 성능 향상에 관한 새로운 가이드에 이르기까지 성능이 우수한 앱을 빌드하는 데 필요한 노력이 적게 들고 영향력이 큰 도구를 다루었습니다.
Ben Weiss, Sara Hamilton • 3분 읽기
-
이벤트 및 프로그램
지난 9월 Google은 Google Play 게임의 미래에 관한 비전을 공유했습니다. 이 비전은 게임의 성공을 이끄는 가장 좋은 방법은 세계적 수준의 플레이어 환경을 제공하는 것이라는 핵심 믿음에 기반을 두고 있습니다.
Maru Ahues Bouza • 3분 읽기
-
이벤트 및 프로그램
Google I/O가 돌아왔습니다. 온라인으로 참여하여 Gemini, Android, Chrome, Cloud 등 Google 전반의 제품에서 Google의 최신 AI 혁신과 업데이트를 확인하세요.
1분 읽기
소식 받아 보기
Android 개발 관련 최신 정보를 이메일로 받아 보세요. 매주