인스턴트 지원 App Bundle 만들기

Android App Bundle의 일부로 포함하여 Google Play 인스턴트 환경을 만들 수 있습니다. 이러한 번들을 인스턴트 지원 App Bundle이라고 합니다. 이 문서에서는 인스턴트 지원 App Bundle의 개발 환경을 설정하는 방법 및 인스턴트 지원 App Bundle을 구성, 빌드, 테스트 및 게시하는 방법을 설명합니다.

지원 중단된 기능 플러그인(com.android.feature)을 사용하는 기존 인스턴트 앱 프로젝트가 있는 경우 Android App Bundle을 지원하기 위해 인스턴트 앱을 이전하는 방법을 알아보세요.

개발 환경 설정

App Bundle 내에서 인스턴트 환경을 제공하려면 Google Play 인스턴트 개발 SDK의 액세스 권한이 필요합니다. 다음 방법 중 하나를 사용하여 SDK를 설치할 수 있습니다.

  • Android 스튜디오 3.6 이상을 설치합니다. Android 스튜디오를 연 다음 SDK ManagerSDK Tools 탭에서 Google Play 인스턴트 개발 SDK를 다운로드합니다.
  • 명령줄에서 설치합니다.

        cd path/to/android/sdk/tools/bin && \
          ./sdkmanager 'extras;google;instantapps'
        

또한 로컬로 인스턴트 환경을 테스트하려면 실제 또는 가상 기기에 액세스하세요.

필수 실행 조건 알아보기

Google Play 인스턴트는 보안을 강화하기 위해 특별한 SELinux 샌드박스에서 인스턴트 지원 App Bundle을 실행합니다. 이 샌드박스는 권한 하위 집합 및 다른 앱과의 제한된 유형의 상호작용을 허용합니다. 다음 섹션에서는 이 샌드박스의 특징을 더 자세히 설명합니다.

지원되는 권한과 작업

인스턴트 지원 App Bundle에서는 다음 목록의 권한만 사용할 수 있습니다.

지원되지 않는 일반적인 권한 처리

다음 목록은 애플리케이션에서 삭제해야 하는 지원되지 않는 일반 권한 및 권한별로 권장되는 이전 경로입니다.

  • ACCESS_WIFI_STATE: ACCESS_NETWORK_STATE를 사용합니다(ACCESS_WIFI_STATE와 유사한 정보를 제공함).
  • BILLING: 지원 중단된 권한입니다. com.android.vending.BILLING 권한이 더 이상 필요하지 않은 Google Play 결제 라이브러리를 사용하세요.
  • READ/WRITE_EXTERNAL_STORAGE: 내부 저장소를 대신 사용하세요. 앱이 외부 저장소에 써야 하는 경우 외부 저장소에 있는 애플리케이션별 디렉터리를 사용하세요. 그러면 앱이 이러한 디렉터리에 쓰기 위해 권한을 요청할 필요가 없습니다.
  • com.google.android.c2dm.permission.RECEIVEpermission.C2D_MESSAGE: C2DM은 지원 중단되었습니다. Firebase 클라우드 메시징(FCM)으로 이전하세요. FCM은 작업에 추가 권한이 필요하지 않습니다.

또한 인스턴트 지원 App Bundle은 다음을 할 수 없습니다.

설치된 앱 액세스

인스턴트 환경을 개발하는 경우 다음 중 하나의 조건이 참이 아니면 인스턴트 환경이 기기에 설치된 앱과 상호작용할 수 없습니다.

  • 설치된 앱 내의 활동 하나 이상이 android:visibleToInstantApps 요소를 true로 설정했습니다. 이 요소는 Android 8.0(API 수준 26) 이상을 실행하는 앱에서 사용할 수 있습니다.
  • 설치된 앱에 CATEGORY_BROWSABLE이 있는 인텐트 필터가 포함되어 있습니다.
  • 인스턴트 환경에서 ACTION_SEND, ACTION_SENDTO 또는 ACTION_SEND_MULTIPLE 작업을 사용하여 인텐트를 전송합니다.

인스턴트 환경을 위한 프로젝트 구성

Google Play 인스턴트와 호환되도록 하려면 인스턴트 지원 App Bundle의 몇 가지 측면을 신중하게 구성해야 합니다. 다음 섹션에서는 구성 시 고려할 사항을 설명합니다.

프로젝트 종속 항목 선언

앱에서 Google Play 인스턴트 API를 사용하려면 앱 모듈의 build.gradle 구성 파일에 다음 선언을 포함하세요.

    implementation "com.google.android.gms:play-services-instantapps:17.0.0"
    

올바른 버전 코드 정의

앱의 인스턴트 환경의 버전 코드는 설치 가능한 앱의 버전 코드보다 낮아야 합니다. 사용자는 Google Play 인스턴트 환경에서 기기에 앱을 다운로드해 설치하는 방식으로 옮겨갈 것으로 예상됩니다. Android 프레임워크는 이러한 전환을 앱 업데이트로 간주합니다.

사용자가 기대하는 버전 관리 체계를 따르려면 다음 전략 중 하나를 따르세요.

  • Google Play 인스턴트 환경의 버전 코드를 1에서 다시 시작합니다.
  • 설치할 수 있는 APK의 버전 코드를 1,000과 같은 큰 수로 늘려 인스턴트 환경의 버전 번호가 커질 수 있도록 충분한 공간을 확보하도록 합니다.

인스턴트 앱과 설치 가능한 앱을 별개의 두 Android 스튜디오 프로젝트로 개발해도 괜찮습니다. 하지만 그럴 경우에는 다음을 진행하여 Google Play에서 앱을 게시해야 합니다.

  1. 두 Android 스튜디오 프로젝트에 동일한 패키지 이름을 사용합니다.
  2. Google Play Console에서 두 변형을 동일한 애플리케이션에 업로드합니다.

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

타겟 샌드박스 버전 업데이트

Google Play 인스턴트가 지원하는 샌드박스 환경을 타겟팅하도록 인스턴트 앱의 AndroidManifest.xml 파일을 업데이트해야 합니다. 다음 코드 스니펫에 나와 있는 것처럼 앱의 <manifest> 요소에 android:targetSandboxVersion 속성을 추가하여 이 업데이트를 완료할 수 있습니다.

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

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

인스턴트 지원 앱 모듈 선언

다음 방법 중 하나를 사용하여 App Bundle이 인스턴트 환경을 지원한다고 선언할 수 있습니다.

  • 기본 모듈만 포함된 기존 App Bundle이 있는 경우 다음과 같이 App Bundle을 인스턴트 지원 번들로 설정할 수 있습니다.

    1. 메뉴 바에서 View > Tool Windows > Project를 선택하여 Project 패널을 엽니다.
    2. 보통 '앱'이라고 하는 기본 모듈을 마우스 오른쪽 버튼으로 클릭한 후 Refactor > Enable Instant Apps Support를 선택합니다.
    3. 대화상자가 표시되면 드롭다운 메뉴에서 기본 모듈을 선택합니다.
    4. OK를 클릭합니다.

    Android 스튜디오에서는 모듈의 매니페스트에 다음 선언을 추가합니다.

    <manifest ... xmlns:dist="http://schemas.android.com/apk/distribution">
            <dist:module dist:instant="true" />
            ...
        </manifest>
        
  • 여러 모듈이 포함된 기존 App Bundle이 있는 경우 인스턴트 지원 동적 기능 모듈을 만들 수 있습니다. 또한 이 과정에 따라 앱의 기본 모듈이 인스턴트 지원 모듈이 되어 앱 내에서 여러 인스턴트 진입점을 지원할 수 있습니다.

로그인 지원 추가

인스턴트 환경에서 사용자의 로그인을 허용하는 경우 인스턴트 지원 App Bundle이 Android에서 비밀번호 대용 Smart Lock을 지원해야 합니다. '인스턴트 플레이' 게임을 빌드하는 경우에는 Google Play 게임 서비스 로그인을 대신 사용해야 합니다.

실행 환경 지원

인스턴트 환경이 실행되는 SELinux 샌드박스와 호환되도록 하려면 인스턴트 지원 App Bundle을 만들 때 다음 사항에 유의하세요.

  • 앱 프로세스의 커널 할당 UIDmyUid()의 값을 공유하지 않습니다.
  • Android 8.1(API 수준 27) 이하를 타겟팅하는 앱의 경우 네트워크 보안 구성 파일을 만들고 cleartextTrafficPermittedfalse로 설정합니다. 인스턴트 환경은 HTTP 트래픽을 지원하지 않습니다. Android 9 이상을 타겟팅하는 앱의 경우 일반 텍스트 트래픽은 기본적으로 사용 중지됩니다.
  • 다음 상황 중 한 가지가 발생하여 인스턴트 환경 캐시가 삭제되기 전까지 인스턴트 환경은 사용자 기기에 다운로드된 상태로 남아 있습니다.

    • 기기에 사용 가능한 메모리가 부족하여 인스턴트 환경 캐시가 가비지로 수집된 경우
    • 사용자가 기기를 다시 시작한 경우

    어느 경우이든 사용자가 인스턴트 환경과 상호작용하려면 인스턴트 환경을 다시 다운로드해야 합니다.

  • 시스템의 저장공간이 매우 부족하면 인스턴트 환경의 사용자 데이터가 내부 저장소에서 삭제될 수 있습니다. 따라서 사용자의 진행 상황이 보존되도록 사용자 데이터를 앱의 서버와 주기적으로 동기화하는 것이 좋습니다.

인스턴트 환경 워크플로를 위한 로직 추가

인스턴트 환경을 지원하도록 App Bundle을 구성한 후에는 다음 섹션에 나와 있는 로직을 추가하세요.

앱에서 인스턴트 환경이 실행 중인지 확인

일부 앱 로직이 사용자의 인스턴트 환경 사용 여부에 따라 달라지는 경우 isInstantApp() 메서드를 호출합니다. 이 메서드는 현재 실행 중인 프로세스가 인스턴트 환경인 경우 true를 반환합니다.

설치 유도 메시지 표시

앱이나 게임의 무료 체험판을 빌드하는 경우 Google Play 인스턴트 환경 내에서 사용자에게 메시지를 표시하여 정식 버전을 기기에 설치하도록 유도할 수 있습니다. 이 메시지를 표시하려면 다음 코드 스니펫에 나와 있는 것처럼 InstantApps.showInstallPrompt() 메서드를 사용합니다.

Kotlin

    class MyInstantExperienceActivity : AppCompatActivity {
        // ...
        private fun showInstallPrompt() {
            val postInstall = Intent(Intent.ACTION_MAIN)
                    .addCategory(Intent.CATEGORY_DEFAULT)
                    .setPackage(your-installed-experience-package-name)

            // The request code is passed to startActivityForResult().
            InstantApps.showInstallPrompt(this@MyInstantExperienceActivity,
                    postInstall, request-code, /* referrer= */ null)
        }
    }
    

자바

    public class MyInstantExperienceActivity extends AppCompatActivity {
        // ...
        private void showInstallPrompt() {
            Intent postInstall = new Intent(Intent.ACTION_MAIN)
                    .addCategory(Intent.CATEGORY_DEFAULT)
                    .setPackage(your-installed-experience-package-name);

            // The request code is passed to startActivityForResult().
            InstantApps.showInstallPrompt(MyInstantExperienceActivity.this,
                    postInstall, request-code, /* referrer= */ null);
        }
    }
    

설치된 환경으로 데이터 전송

사용자가 인스턴트 환경이 마음에 들면 앱을 설치하겠다고 결정할 수도 있습니다. 좋은 사용자 환경을 제공하기 위해서는 사용자의 데이터를 인스턴트 환경에서 정식 버전 앱으로 전송하는 것이 중요합니다.

사용자가 Android 8.0(API 수준 26) 이상을 실행하는 기기를 사용 중이며 앱에서 targetSandboxVersion2로 지정된 경우 사용자의 데이터가 정식 버전 앱으로 자동 전송됩니다. 그러지 않으면 데이터를 수동으로 전송해야 합니다. 이를 위해서는 다음 API 중 하나를 사용합니다.

  • 사용자가 Android 8.0(API 수준 26) 이상을 실행하는 기기를 사용하는 경우 Cookie API - 샘플 앱을 사용합니다.
  • 사용자가 Android 7.1(API 수준 25) 이하를 실행하는 기기에서 개발자의 환경과 상호작용할 수 있는 경우 Storage API - 샘플 앱에 관한 지원을 추가합니다.

App Bundle 빌드

Android 스튜디오 또는 명령줄 인터페이스를 사용하여 인스턴트 지원 App Bundle을 빌드할 수 있습니다.

Android 스튜디오

Android 스튜디오에서 Build > Build Bundle(s) / APK(s) > Build Bundle(s)를 선택하여 App Bundle을 빌드할 수 있습니다. 프로젝트를 빌드하는 방법에 관한 자세한 내용은 프로젝트 빌드를 참조하세요.

명령줄 인터페이스

Gradle을 사용하여 명령줄에서 App Bundle을 빌드할 수도 있습니다. 빌드를 실행한 후 다음 명령어를 실행하여 인스턴트 환경 상태 검사를 실행하세요.

    ia check app-artifact
    

앱 아티팩트는 ZIP 파일, App Bundle 또는 인스턴트 환경이 하나 이상 포함된 APK의 목록입니다.

인스턴트 환경 테스트

인스턴트 지원 App Bundle을 게시하기 전에 다음 위치 중 하나에서 인스턴트 환경을 테스트하여 기능을 확인할 수 있습니다.

Android 스튜디오

Android 스튜디오를 사용하여 로컬 시스템에서 앱의 인스턴트 환경을 테스트하려면 다음 단계를 완료하세요.

  1. 테스트 기기에 앱의 설치된 버전을 설치한 경우 제거합니다.
  2. Android 스튜디오에서 Run/Debug Configurations 대화상자General 탭에 표시되는 설치 옵션 중 Deploy as instant app 체크박스를 선택합니다.
  3. 메뉴 바에서 Run > Run을 선택하거나 툴바에서 Run 을 클릭한 다음 앱의 인스턴트 환경을 테스트할 기기를 선택합니다. 선택한 테스트 기기에 앱의 인스턴트 환경이 로드됩니다.

명령줄 인터페이스

명령줄을 사용하여 로컬 시스템에서 앱의 인스턴트 환경을 테스트하려면 다음 단계를 완료하세요.

  1. 테스트 기기에 앱의 설치된 버전을 설치한 경우 제거합니다.
  2. 다음 명령어를 입력하여 테스트 기기에 인스턴트 앱을 사이드로드하고 실행합니다.
    ia run output-from-build-command
    

내부 테스트 트랙

Play 스토어 또는 웹사이트의 배너에서 앱의 인스턴트 환경을 테스트하려면 앱을 Play Console의 내부 테스트 트랙에 게시하세요.

앱을 내부 테스트 트랙에 게시하려면 다음 단계를 완료하세요.

  1. Play Console에 App Bundle 업로드 가이드의 단계에 따라 App Bundle을 업로드합니다.
  2. 내부 테스트 트랙에 출시하기 위해 업로드된 번들을 준비합니다. 자세한 내용은 버전을 준비하고 출시하는 방법에 관한 지원 도움말을 참조하세요.
  3. 기기의 내부 테스터 계정에 로그인한 후 다음 위치 중 하나에서 인스턴트 환경을 시작합니다.

    • 앱의 Play 스토어 등록정보에 있는 사용해 보기 버튼
    • 앱의 웹사이트에 있는 배너의 링크

App Bundle을 프로덕션 트랙에 게시

인스턴트 지원 App Bundle을 게시하려면 다음 단계를 완료하세요.

  1. 아직 하지 않았으면 출시 키로 App Bundle에 서명하고 App Bundle을 Play Console에 업로드합니다.
  2. Play Console에서 출시 관리 > Android 인스턴트 앱을 연 다음 인스턴트 앱 프로덕션 트랙으로 이동합니다.
  3. 라이브러리에서 업데이트를 선택한 다음 업로드한 인스턴트 지원 App Bundle을 선택합니다.

인스턴트 환경을 게시할 위치 선택

사용자가 앱을 설치할 수 있는 국가 및 지역의 하위 집합에서 앱의 인스턴트 환경을 출시할 수 있습니다. 이 기능은 특정 국가 및 지역 집합에 거주하는 사용자에게 앱의 인스턴트 환경을 홍보하려는 경우에 유용합니다.

추가 리소스

인스턴트 환경 및 Android App Bundle을 만드는 방법을 자세히 알아보려면 다음 리소스를 참조하세요.

동영상: 순식간에 App Bundle 구성하기
Android Dev Summit '18의 이 세션에서 Android App Bundle에 인스턴트 환경을 추가하는 방법을 알아보세요.
동영상: Android App Bundle로 크기가 작은 앱 게시하기
App Bundle이 앱을 더 빨리 개발하고 사용자를 위해 크기가 더 작은 APK를 만드는 데 어떻게 도움이 되는지 알아보세요.
Codelab: 첫 Android App Bundle 만들기
Android App Bundle을 만들고 기능을 추가하는 방법에 관한 단계별 안내입니다.
Android App Bundle 형식
bundletool 명령줄 프로그램을 사용하여 앱의 코드 및 리소스에서 App Bundle을 구성하는 방법을 알아보세요.