The Android Developer Challenge is back! Submit your idea before December 2.

기존 앱을 인스턴트 앱으로 변환

첫 번째 인스턴트 앱 만들기에서 설명된 대로 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 게임 앱에서 Try Now 버튼을 탭하면 실행됩니다. 딥 링크 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의 버전 코드를 1,000과 같은 큰 수로 늘려 인스턴트 앱의 버전 번호가 커질 수 있는 충분한 공간을 확보하도록 합니다.

앱의 버전 설정에 관한 자세한 내용은 앱의 버전 지정을 참조하세요.

타겟 샌드박스 버전

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

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

Gradle 3.0 이상을 사용하여 Android 버전 게임을 빌드한다면 com.android.featurecom.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 – 때때로 파일 크기를 줄입니다.
    • 링커 플래그– -ffunction-sections, -fdata-sections와 같은 컴파일러 플래그와 함께 --gc-sections를 사용합니다.
  • Proguard를 사용하여 코드와 리소스를 축소합니다.

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

Play Core 분할 설치 API

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

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

설치 메시지

Google Play 인스턴트를 경험하는 어느 시점에 게임에서는 기기에 전체 버전을 설치하라는 메시지를 플레이어에게 표시해야 합니다. 이렇게 하려면 Android용 Google API에서 showInstallPrompt() 메서드를 사용하세요.

플레이어에게 설치를 요청하는 방법과 시기에 관한 자세한 내용은 Google Play 인스턴트 게임의 UX 권장사항을 참조하세요.

추가 리소스

다음 추가 리소스에서 Google Play 인스턴트에 관해 자세히 알아보세요.

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