인스턴트 액세스 지원 추가하기

첫 번째 인스턴트 앱 만들기에서 설명한, Google Play 인스턴트에서 앱을 실행하도록 설정하는 단계는 게임에도 적용됩니다. 이 가이드에서는 게임에 특정한 몇 가지 설정 단계를 강조해서 설명합니다.

Unity(Google Play 인스턴트 Unity 플러그인 사용 여부와 상관없음), Cocos2D, Android 스튜디오 또는 고유한 맞춤형 엔진을 사용하여 Google Play 인스턴트용 게임을 개발할 수 있습니다.

이 가이드에서는 개발자가 어떤 게임 경험을 제공할지 이미 알고 있다고 가정하고 설명합니다. 높은 품질의 게임을 제작하기 위한 아이디어와 권장사항을 확인하려면 Google Play 인스턴트 게임의 UX 권장사항을 검토하세요.

또한, Google Play 인스턴트에서 실행할 수 있는 게임을 게시하기 전에 기술 요구사항 체크리스트를 검토해야 합니다.

다음 인텐트 필터가 포함된 활동은 Google Play 인스턴트 경험의 진입점이 됩니다.

<activity android:name=".GameActivity">
       <intent-filter>
          <action android:name="android.intent.action.MAIN" />
          <category android:name="android.intent.category.LAUNCHER" />
       </intent-filter>
    </activity>
    

이 활동은 사용자가 Play 스토어 앱이나 Play 게임 앱에서 사용해 보기 버튼을 탭하면 시작됩니다. 개발자가 딥 링크 API를 사용하여 직접 이 활동을 시작할 수도 있습니다.

개발자가 소유하고 있는 URL을 사용하여 플레이어가 게임에 액세스하도록 하려면 앱 링크를 추가해도 됩니다. 하지만 이러한 앱 링크를 추가하는 경우에는 앱 링크 URL 중 하나와 정확히 일치하는 기본 URL도 추가해야 합니다.

다음 코드 스니펫은 앱 링크와 기본 URL 조합의 예를 보여줍니다.

<activity
       android:name=".GameActivity" ... >

       <!-- App links (HTTP and HTTPS) -->
       <intent-filter android:autoVerify="true">
           <action android:name="android.intent.action.VIEW" />

           <category android:name="android.intent.category.BROWSABLE" />
           <category android:name="android.intent.category.DEFAULT" />

           <data android:scheme="http" />
           <data android:scheme="https" />
           <data android:host="example.com" />
           <data android:pathPrefix="/instant" />
       </intent-filter>

       <!-- Default URL -->
       <meta-data
           android:name="default-url"
           android:value="https://example.com/instant" />
    </activity>
    

버전 코드

게임 인스턴트 앱의 버전 코드는 설치형 게임의 버전 코드보다 낮아야 합니다. 시간 경과에 따라 플레이어가 Google Play 인스턴트 경험에서 자신의 기기에 게임을 다운로드하여 설치하는 것으로 이동해야 합니다. Android 프레임워크에서는 이러한 전환을 앱 업데이트로 생각합니다.

이러한 버전 관리를 따르려면 다음 전략 중 하나를 사용하면 됩니다.

  • Google Play 인스턴트 경험용 버전 코드를 1에서 다시 시작합니다.
  • 설치형 APK의 버전 코드를 큰 수치로(예: 1000) 높여 인스턴트 앱의 버전 번호가 증가할 여유를 충분히 확보합니다.

앱의 버전 설정과 관련한 자세한 내용은 앱 버전 지정을 참고하세요.

타겟 샌드박스 버전

다른 앱과 마찬가지로 Google Play 인스턴트의 게임은 기기에서 제한된 샌드박스 내에서 실행됩니다. 이 샌드박스를 타겟팅하려면 인스턴트 앱의 AndroidManifest.xml 파일을 업데이트해야 합니다. 다음 코드 스니펫과 같이 <manifest> 요소에 android:targetSandboxVersion 속성을 추가하여 이 업데이트를 완료할 수 있습니다.

<manifest
       xmlns:android="http://schemas.android.com/apk/res/android"
      ...
       android:targetSandboxVersion="2" ...>
    

Gradle 3.0 이상 버전을 사용하여 게임의 Android 버전을 빌드하는 경우 기능 모듈에 com.android.feature 플러그인과 com.android.instantapps 플러그인을 적용하면 됩니다. 이 플러그인은 모듈의 manifest 파일에 필수 속성을 자동으로 추가합니다.

자세한 내용은 targetSandboxVersion 속성 관련 문서를 참고하세요.

APK 크기 축소

다른 유형의 앱과 달리 Google Play 인스턴트의 게임은 다운로드 크기가 10MB로 제한됩니다. 이 크기의 게임을 만들려면 게임의 로직을 리팩터링해야 할 수도 있습니다. 이 섹션에서는 게임의 크기를 최적화하는 데 도움이 되는 일부 도구와 기법을 설명합니다.

도구

다음 도구 목록을 참고하여 게임의 크기에 기여하는 요소를 결정할 수 있습니다.

  • APK Analyzer: 컴파일된 APK의 콘텐츠를 전체적으로 보여줍니다. 이 뷰를 사용하여 각 요소가 전체 크기에 기여하는 바이트 수를 결정할 수 있습니다. 이 도구를 사용하면 게임에서 사용 중인 리소스, 애셋, 로직, 네이티브 라이브러리의 크기를 신속하게 확인할 수 있습니다.
  • Bloaty McBloatface: 바이너리 파일의 크기 프로필을 보여줍니다.
  • GAPID: 텍스처 크기를 줄이는 경우 게임을 다시 컴파일할 필요 없이 파일 크기에 미치는 영향을 확인할 수 있습니다.

기법

다음 기법 목록을 사용하여 게임의 크기를 줄일 수 있습니다.

  • 게임 텍스처의 해상도를 줄입니다.
  • 특히 GPU에서 압축되지 않은 텍스처를 사용 중인 경우에는 WebP 형식을 사용해 보세요. WebP 형식은 품질이 JPEG 이미지와 같지만 크기는 15%~30% 더 작은 이미지를 만듭니다. WebP 이미지의 압축을 해제하는 데 걸리는 시간은 더 길지만 여전히 게임의 텍스처를 다운로드하는 시간보다 상당히 더 짧습니다.

    Google은 또한 이 형식을 오픈소스 게임 엔진에 통합했습니다.

  • 설치형 게임에서 사용할 수 있는 하위 사운드 집합만 사용합니다.

  • 서로 다른 컴파일 플래그를 사용하여 바이너리 파일의 크기를 줄입니다.

    • -fvisibility=hidden: 가장 중요합니다. cmake에서 다음과 같이 지정할 수 있습니다.
      $ set_target_properties(your-target PROPERTIES CXX_VISIBILITY_PRESET hidden)
          
    • -Oz: 크기를 줄이기 위해 중요합니다. gcc를 사용하여 컴파일하는 경우에는 대신 -Os를 사용합니다.
    • -flto: 때때로 파일 크기를 줄입니다.
    • 링커 플래그: --gc-sections-ffunction-sections-fdata-sections 같은 컴파일러 플래그와 함께 사용합니다.
  • Proguard를 사용하여 코드와 리소스를 축소합니다.

  • Gradle 4.4 이상 버전을 사용하여 더 작은 DEX 파일을 생성합니다.

Play Core Split Install API

권장사항을 적용하여 APK 크기를 축소한 후에도 10MB 크기의 단일 APK에 게임 크기를 맞추도록 Google Play 인스턴트 경험을 최적화하기 어려울 수 있습니다. 이 문제를 해결하려면 게임을 여러 APK로 나누면 됩니다. 플레이어는 기본 APK를 다운로드하여 시작하며, 플레이하는 동안 나머지 분할 APK를 백그라운드에서 게임에 사용할 수 있게 됩니다.

예를 들어 기본 APK는 코어 게임 엔진과 로드 화면을 표시하는 데 필요한 애셋을 포함할 수 있습니다. 기본 APK가 시작되면 로드 화면을 표시하고 게임 및 레벨 데이터가 포함된 추가 분할 APK를 즉시 요청합니다. 이 분할 APK를 사용할 수 있게 되면 이 APK는 애셋을 게임 엔진에 로드하고 게임을 시작하는 데 필요한 콘텐츠를 플레이어에게 제공할 수 있습니다.

설치 메시지

Google Play 인스턴트 경험 도중의 특정 시점에 게임에서 플레이어에게 기기에 전체 버전을 설치하도록 요청하는 메시지를 표시해야 합니다. 그러려면 Android용 Google API에서 showInstallPrompt() 메서드를 사용합니다.

플레이어에게 설치 메시지를 표시하는 방법과 시기와 관련하여 자세히 알아보려면 Google Play 인스턴트 게임의 UX 권장사항을 참고하세요.

추가 리소스

다음과 같은 추가 리소스에서 Google Play 인스턴트를 자세히 알아보세요.

Codelab: 첫 번째 인스턴트 앱 빌드하기
기존 앱에 Google Play 인스턴트 지원을 추가하세요.
Codelab: 다기능 인스턴트 앱 구축하기
다기능 앱을 모듈화하세요.