Google Play 인스턴트를 사용하면 웹 링크를 한 번 탭하는 것만으로도 다양한 네이티브 환경을 제공할 수 있습니다. 사용자가 앱을 미리 설치하지 않아도 체험해 볼 수 있으므로 더욱 높은 수준의 질 높은 사용자 참여를 촉진할 수 있습니다. 인스턴트 앱이 일반적인 모바일 웹페이지처럼 빠르게 로드되도록 하려면 잘 구조화된 효율적인 인스턴트 앱을 만들어야 합니다. 인스턴트 앱의 바이너리가 작을수록 로드 속도가 빨라지고 사용자 환경이 더 원활해집니다.
이 문서에서는 원활한 인스턴트 앱 환경을 지원할 수 있도록 앱의 구조 및 바이너리 크기를 관리하는 데 지침이 될 수 있는 권장사항을 제공합니다. 이 권장사항을 설치 가능한 앱에 적용해도 도움이 됩니다.
여러 기능 모듈로 리팩터링
앱의 바이너리 크기는 앱을 여러 기능 모듈로 리팩터링할 때 최대로 개선됩니다. 기본 기능 모듈로 시작하여 주제와 관련된 워크플로를 자체 기능 모듈로 추출하세요. 사용자가 모듈의 워크플로를 성공적으로 완료할 수 있도록 각 기능 모듈에 시작 활동과 고유 URL을 할당합니다.
기능 모듈을 만들 때 기본 기능 모듈은 최대한 작게 유지합니다. 특히 앱에서 종속 라이브러리에 액세스해야 하는 부분을 면밀히 살펴보세요. 하나의 기능 모듈에서만 특정 라이브러리를 사용한다면 기본 기능 모듈이 아닌 기능 모듈 자체에서 이 라이브러리를 가져옵니다. 특정 기능 모듈의 인스턴트 앱을 출시하려면 이 기능 모듈과 기본 기능 모듈의 총 크기가 15MB 미만이어야 합니다.
권장사항
앱을 리팩터링할 때 다음 권장사항에 유념하세요.
- 두 앱 유형에 모두 동일한 코드베이스 사용
- 설치된 앱과 인스턴트 앱을 둘 다 동일한 모듈식 코드베이스를 사용해 만들면 앱의 프로젝트 관리 프로세스를 간소화할 수 있습니다.
- 여러 기능 모듈을 위한 설계
- 앱에 하나의 워크플로만 있고 현재 하나의 기능 모듈만 필요하더라도 여러 기능 모듈을 염두에 두고 설계하는 것이 좋습니다. 이렇게 하면 앱에 기존 모듈을 추가해도 원래 기능 모듈의 크기에 영향을 미치지 않습니다.
- 처음에는 기능 모듈 크기 한도에 주의를 기울이지 마세요.
- 기능 모듈 크기 한도는 로컬에서 빌드한 바이너리에는 적용되지 않습니다. 또한 기능 모듈 크기에 15MB 한도를 강제하는 내부 테스트 트랙을 통해 인스턴트 앱을 출시할 수 있습니다. 알파 트랙과 프로덕션 트랙에서만 15MB 한도를 강제합니다.
앱 리소스 업데이트
일부 앱, 특히 코드베이스 기록이 더 긴 앱에는 앱의 바이너리가 더 이상 사용하지 않는 리소스가 포함되어 있습니다. 앱의 모듈을 더 작게 만들 수 있는 방법을 찾고 있다면 다음과 같은 불필요한 코드의 일반적인 원인을 고려하세요.
이미지 파일 크기 줄이기
PNG 대신 WebP 파일 형식을 사용하여 앱 드로어블의 총 크기를 크게 줄일 수 있습니다. Google Play 인스턴트는 투명도와 무손실 압축을 포함하여 WebP를 완벽하게 지원��므로 이미지 품질은 동일하게 유지됩니다.
가능하다면 다른 PNG 이미지 사용을 위한 이전 버전과의 호환성 요구사항을 모두 삭제하세요. PNG 이미지를 사용해야 한다면 앱을 빌드하고 설치하는 데 사용되는 모듈에 이미지를 배치하세요.
사용하지 않는 언어 삭제
앱에서 여러 언어를 지원한다면 현지화된 리소스 수를 최대한 줄이세요. 이 단계는 android.support.v7.appcompat
와 같은 'app compat' 라이브러리를 사용할 때 특히 유용합니다.
이 라이브러리에는 여러 언어로 된 메시지가 포함되어 있으며 이 언어 중 일부는 앱에서 지원하지 않을 수 있습니다.
자세한 내용은 특히 사용하지 않는 언어와 같이 사용하지 않는 대체 리소스를 삭제하는 방법을 확인하세요.
추가 파일 삭제
프로젝트로 가져온 리소스 중에는 앱에서 더 이상 사용하지 않는 것이 있을 수 있습니다. 이러한 리소스를 삭제하는 데 도움을 주기 위해 Android 스튜디오는 이러한 특정 상황에 대비한 린트 검사 기능을 갖추고 있습니다. 이 도구를 사용하려면 다음 단계를 완료하세요.
- Ctrl+Alt+Shift+I(Mac OS에서는 Command+Alt+Shift+I)를 누릅니다.
- 대화상자가 표시되면
"unused resources"
를 입력합니다. - Unused resources 옵션을 선택하여 리소스 사용량 검사 프로세스를 시작합니다.
앱에 큰 리소스가 남아 있다면 사용자가 앱과 상호작용하기 시작한 이후 앱에서 리소스의 패키지를 해제하여 독립형 파일로 다운로드할 수 있는지 고려하세요. 이러한 이미지 로드 지연이 발생했을 때는 대개 코드를 변경해야 하지만 사용자가 명시적으로 요청하는 리소스만 다운로드하면 인스턴트 앱의 파일 크기를 크게 줄일 수 있습니다.
사용하지 않는 라이브러리 삭제
앱은 범위가 커지면 많은 수의 종속 항목을 가질 수 있는데, 특히 다음 유형 중 하나입니다.
- 네이티브 라이브러리: 인스턴트 앱이 실행하지 않는 네이티브 코드를 포함하는 라이브러리입니다.
- 전이 종속 항목: 앱의 가져온 라이브러리가 종속된 라이브러리입니다.
Android 스튜디오에는 앱의 프로젝트에서 불필요한 종속 항목을 식별하는 데 유용한 도구가 여러 개 있습니다.
- 외부 라이브러리
Android 스튜디오의 Project 보기에는 External Libraries 섹션이 있습니다.
이 섹션에는 네이티브 코드와 모든 전이 종속 항목을 비롯해 앱에서 사용하는 모든 라이브러리가 포함되어 있습니다. 이 보기에서 앱에 필요 없는 미사용 또는 중복 라이브러리를 찾으세요.
- APK Analyzer
APK Analyzer 도구를 사용하여 인스턴트 앱 빌드를 비롯한 여러 빌드를 비교할 수 있습니다.
앱에 필요 없는 라이브러리를 확인한 후 다음과 유사한 행을 Gradle 빌드 파일에 추가하여 제외합니다.
<feature_module>/build.gradle
Groovy
dependencies { implementation('some-important-but-large-library') { exclude group: 'com.example.imgtools', module: 'native' } }
Kotlin
dependencies { implementation('some-important-but-large-library') { exclude(group = "com.example.imgtools", module = "native") } }
앱 종속 항목의 전체 가져오기 크기를 줄이는 방법에 관한 자세한 내용은 Gradle의 종속 항목 관리 가이드를 참조하세요.
클라우드 애셋 전송 구현
크기를 더 줄여야 한다면 클라우드 애셋 전송을 사용해야 할 수도 있습니다.