인스턴트 앱 크기 줄이기

Google Play 인스턴트를 사용하면 웹 링크를 한 번 탭하는 것만으로도 다양한 네이티브 환경을 제공할 수 있습니다. 앱을 미리 설치하지 않고도 경험할 수 있으므로 사용자가 참여하는 수준 및 품질을 높일 수 있습니다. 일반적인 모바일 웹페이지처럼 인스턴트 앱을 빠르게 로드하려면 잘 구조화된 효율적인 인스턴트 앱을 만들어야 합니다. 인스턴트 앱의 바이너리가 작을수록 로드 속도가 빨라지고 사용자 환경이 더 원활해집니다.

이 문서에서는 원활한 인스턴트 앱 환경을 지원하기 위해 앱의 구조와 바이너리 크기를 관리하도록 권장하는 내용의 지침을 전달합니다. 이 지침을 설치 가능한 앱에 적용해도 도움이 됩니다.

여러 기능 모듈로 리팩터링

앱의 바이너리 크기는 앱을 여러 기능 모듈로 리팩토링할 때 최대로 확장됩니다. 기본 특성 모듈로 시작하여 주제와 관련된 워크플로를 자체 기능 모듈로 추출하세요. 사용자가 모듈의 워크플로를 성공적으로 완료할 수 있도록 각 기능 모듈에 시작 활동과 고유 URL을 할당합니다.

기능 모듈을 만들 때 기본 기능 모듈은 최대한 작게 유지합니다. 특히 앱에서 종속 라이브러리에 액세스해야 하는 부분을 면밀히 살펴보세요. 하나의 기능 모듈에서만 특정 라이브러리를 사용한다면 기본 기능 모듈이 아닌 기능 모듈 자체에서 이 라이브러리를 가져옵니다. 특정 기능 모듈의 인스턴트 앱을 출시하려면 이 기능 모듈과 기본 기능 모듈의 크기가 4MB 미만이어야 합니다.

권장사항

앱을 리팩터링할 때 다음 권장사항에 유념하세요.

두 앱 유형 모두에 동일한 코드베이스 사용
설치된 앱과 인스턴트 앱을 둘 다 동일한 모듈식 코드베이스를 사용해 만들면 앱의 프로젝트 관리 프로세스를 간소화할 수 있습니다.
여러 기능 모듈을 위한 설계
앱에 하나의 워크플로만 있고 현재 하나의 기능 모듈만 필요하더라도 여러 기능 모듈을 염두에 두고 설계하는 것이 좋습니다. 이렇게 하면 앱에 기존 모듈을 추가해도 원래 기능 모듈의 크기에 영향을 미치지 않습니다.
처음에는 기능 모듈 크기 한도에 주의를 기울이지 마세요.
기능 모듈 크기 한도는 로컬에서 빌드한 바이너리에는 적용되지 않습니다. 또한 기능 모듈 크기에 10MB 한도를 강제하는 내부 테스트 트랙을 통해 인스턴트 앱을 출시할 수 있습니다. 알파 트랙과 프로덕션 트랙에서만 4MB 한도를 강제합니다.

앱 리소스 업데이트

일부 앱, 특히 코드베이스 기록이 더 긴 앱에는 앱의 바이너리가 더 이상 사용하지 않는 리소스가 포함되어 있습니다. 앱의 모듈을 더 작게 만들 수 있는 방법을 찾고 있다면 다음과 같은 불필요한 코드의 일반적 원인을 고려하세요.

이미지 파일 크기 줄이기

PNG 대신 WebP 파일 형식을 사용하여 앱의 드로어블 총 크기를 크게 줄일 수 있습니다. Google Play 인스턴트에서는 투명도와 무손실 압축을 포함해 완벽한 WebP 지원을 제공하므로 이미지 품질은 동일하게 유지됩니다.

가능하다면 다른 PNG 이미지 사용을 위한 이전 버전과의 호환성 요구사항을 모두 삭제하세요. PNG 이미지를 사용해야 한다면 앱을 빌드하고 설치하는 데 사용되는 모듈에 이미지를 배치하세요.

추가 언어 삭제

앱에서 여러 언어를 지원한다면 현지화된 리소스 수를 최대한 줄이세요. 이 단계는 android.support.v7.appcompat과 같은 'app compat' 라이브러리를 사용할 때 특히 유용합니다. 이 라이브러리에는 여러 언어로 된 메시지가 포함되어 있으며 이 언어 중 일부는 앱에서 지원하지 않을 수 있습니다.

자세히 알아보려면 특히 사용하지 않는 언어와 같이 사용하지 않는 대체 리소스를 삭제하는 방법을 확인하세요.

추가 파일 삭제

프로젝트로 가져온 리소스 중에는 앱에서 더 이상 사용하지 않는 것이 있을 수 있습니다. 이러한 리소스를 삭제하는 데 도움을 주기 위해 Android 스튜디오는 이러한 특정 상황에 대비한 Lint 검사 기능을 갖추고 있습니다. 이 도구를 사용하려면 다음 단계를 완료하세요.

  1. Ctrl+Alt+Shift+I(Mac OS에서는 Command+Alt+Shift+I)를 누릅니다.
  2. 대화상자가 나타나면 "unused resources"를 입력합니다.
  3. Unused resources 옵션을 선택하여 리소스 사용량 검사 프로세스를 시작합니다.

앱에 큰 리소스가 남아 있다면 사용자가 앱과 상호작용하기 시작한 이후 앱에서 리소스의 패키지를 해제하여 독립형 파일로 다운로드할 수 있는지 고려하세요. 이러한 이미지 로드 지연이 발생했을 때는 대개 코드를 변경해야 하지만 사용자가 명시적으로 요청하는 리소스만 다운로드하면 인스턴트 앱의 파일 크기를 크게 줄일 수 있습니다.

사용하지 않는 라이브러리 삭제

앱은 범위가 커지면 많은 수의 종속성을 띨 수 있는데, 특히 다음과 같은 라이브러리 유형 중 하나에 종속됩니다.

  • 네이티브 라이브러리: 인스턴트 앱이 실행되지 않는 네이티브 코드를 포함하는 라이브러리입니다.
  • 전이 종속성: 앱의 가져온 라이브러리가 종속된 라이브러리입니다.

Android 스튜디오에는 앱의 프로젝트에서 불필요한 종속성을 식별하는 데 유용한 도구가 여러 개 있습니다.

외부 라이브러리

Android 스튜디오의 Project 보기에는 External Libraries 섹션이 있습니다.

이 섹션에는 네이티브 코드와 모든 전이 종속성을 비롯해 앱에서 사용하는 모든 라이브러리가 포함되어 있습니다. 이 보기에서 앱에 필요 없는 미사용 또는 중복 라이브러리를 찾으세요.

APK Analyzer

APK Analyzer 도구를 사용하여 인스턴트 앱 빌드를 비롯한 여러 빌드를 비교할 수 있습니다.

앱에 필요 없는 라이브러리를 결정한 후 다음과 유사한 행을 Gradle 빌드 파일에 추가하여 제외합니다.

<feature_module>/build.gradle

dependencies {
        implementation('some-important-but-large-library') {
            exclude group: 'com.example.imgtools', module: 'native'
        }
    }
    

앱 종속성의 총 가져오기 크기를 줄이는 방법에 관한 자세한 내용은 Gradle의 종속성 관리 가이드를 참조하세요.