Wear 앱 패키징 및 배포

Wear OS by Google을 사용하면 시계에서 Play 스토어를 방문하여 Wear 앱을 시계에 직접 다운로드할 수 있습니다. 또한 웹 Play 스토어를 통해 시계에 직접 앱을 설치할 수도 있습니다.

Wear 2.0을 실행하는 모든 기기는 Android 7.1.1(API 레벨 25)을 사용하고 있습니다. 앱이 Wear 2.0 이상을 실행하는 기기만 지원하는 경우 최소 및 타겟 API 레벨이 25여야 합니다. 앱이 Wear 1.x와 2.0을 모두 지원하는 경우에는 최소 및 타겟 API 레벨이 23일 수 있습니다. 모든 Wear 앱은 API 레벨 23 이상을 타겟팅해야 하므로 런타임 권한이 필요합니다.

독립형 앱도 참조하세요.

Wear 2.0 앱에 호환 앱이 있는 경우 동일한 키를 사용하여 두 앱에 각각 서명해야 합니다. 이 요구사항은 항상 호환 앱이 있는 Wear 1.x 앱에도 적용됩니다.

Play 스토어 계획

시계용 Play 스토어에 앱을 표시하려면 다른 APK와 마찬가지로 시계 APK를 Play Console에 업로드해야 합니다. 시계 APK만 있고 전화 APK가 없는 경우에는 다른 단계가 필요하지 않습니다.

시계 APK 외에 전화 APK도 있는 경우 다중 APK 전송 방법을 사용해야 합니다.

Wear 2.0 시계에 배포

Wear 2.0을 실행하는 기기에서 사용자가 연결된 시계 앱(내장된 APK 또는 Play Console을 통해 업로드한 APK)이 있는 전화 앱을 설치하는 경우 사용 가능한 시계 앱에 관한 시계 알림을 받습니다. 알림을 탭하면 시계 Play 스토어가 열리고, 시계 앱을 설치할 수 있는 옵션이 사용자에게 제공됩니다.

또한 다음 사항에 유의하세요.

  • 휴대전화 APK를 새로 삽입된 시계 APK로 업데이트하면 사용자의 시계 APK가 자동으로 업데이트됩니다.
  • Play Console을 통해 시계 APK를 업로드하면 휴대전화 APK와는 별도로 Wear APK를 업데이트할 수 있으며, 사용자는 시계 Play 스토어를 통해 업데이트를 받습니다.
  • 삽입된 시계 APK의 경우 휴대전화의 APK를 업데이트하면 사용자의 시계 APK가 자동으로 업데이트됩니다. 다중 APK의 경우에는 Play 스토어 설정(앱 자동 업데이트)에 따라 업데이트 동작이 달라집니다. 동일한 버전이 아니면 삽입된 APK와 다중 APK를 앱에 함께 사용하지 않는 것을 적극적으로 권장합니다. 삽입된 APK v1과 다중 APK v2가 있는 경우를 예로 들어 보겠습니다. 삽입된 APK를 먼저 설치하면 상위 버전인 다중 APK가 삽입된 APK를 대체합니다. 나중에 개발자가 전화 APK를 v3으로 업데이트하면 삽입된 APK가 자동으로 설치되어다중 APK를 통해 전송된 상위 버전을 재정의합니다.

Wear 1.x 및 2.0 시계에 배포

Wear 1.x의 표준 배포 모델은 전화 앱에 시계 앱을 삽입하는 것이었습니다. 이제 Wear OS를 사용하여 Wear 1.0과 2.0에서 동일한 방식으로 Wear 앱을 배포할 수 있습니다. 사용자가 전화 앱을 설치할 때 Play 스토어에 호환되는 Wear 앱이 있으면 Wear 1.0 시계에 자동으로 설치됩니다. 이 기능을 사용하면 전화 앱의 APK에 Wear 앱 삽입을 중지할 수 있습니다. Play 스토어에서 Wear 1.0 및 Wear 2.0 시계에 모두 적용되는 시계 APK의 독립형 버전을 제공할 수 있습니다.

버전 코드 지정

독립형 APK가 시계에 삽입된 기존 Wear APK를 업그레이드하도록 하려면 일반적으로 독립형 Wear APK의 버전 코드가 삽입된 Wear APK의 버전 코드보다 높아야 합니다. 전화 APK의 버전 코드 체계는 시계 APK와 독립적일 수 있지만 고유해야 합니다. 그러나 APK가 동일한 경우 독립형 APK와 포함된 Wear APK의 버전 코드가 같을 수 있습니다.

APK는 동일하지 않지만 버전 코드가 동일한 경우 시계를 Wear 1.x에서 2.0으로 업데이트할 때 시계가 새 APK를 받기까지 예상보다 오래 기다려야 할 수도 있습니다.

지금은 전화와 시계에서 모두 작동하는 단일 APK를 만들 수 없습니다.

Wear APK와 호환 APK가 코드를 공유하며 출시 조정이 필요한 경우 APK 변형에 사용할 버전 코드의 마지막 두 자리를 예약해야 합니다. APK 변이의 예로 CPU 아키텍처가 있습니다. 예를 보려면 여러 CPU 아키텍처 지원을 참조하세요.

추천 버전 코드 체계는 다음과 같습니다.

  • 버전 코드의 처음 두 자리를 targetSdkVersion으로 설정합니다(예: 25).
  • 다음 세 자리를 제품 버전으로 설정합니다(예: 제품 버전 1.5.2의 경우 152).
  • 다음 두 자리를 빌드 또는 출시 번호로 설정합니다(예: 01).
  • 다중 APK 변형에 사용할 마지막 두 자리를 예약합니다(예: 00).

추천 버전 코드 체계의 예제 값(25, 152, 01, 00)을 사용할 경우 예제 APK 변형의 버전 코드는 251520100이 됩니다.

애플리케이션 버전 정보 설정도 참조하세요.

Gradle 파일의 지원

Wear 1.x와 Wear 2.0 둘 다를 대상으로 하는 Wear 앱이 있는 경우 제품 버전을 사용하는 것이 좋습니다. 예를 들어 SDK 버전 23과 버전 25를 모두 타겟팅하려는 경우 기존 Wear 1.x 앱의 최소 SDK 버전이 23이면 다음을 포함하도록 Wear 모듈의 build.gradle 파일을 업데이트합니다.

    android {
        // Allows you to reference product flavors in your
        // phone module's build.gradle file
        publishNonDefault true
        ...
        defaultConfig
        {
           // This is the minSdkVersion of the Wear 1.x app
           minSdkVersion 23
           ...
        }
        buildTypes {...}
        productFlavors {
            wear1 {
              // Use the defaultConfig value
            }
            wear2 {
                minSdkVersion 25
            }
        }
    }
    

빌드 변형은 제품 버전과 빌드 유형의 조합입니다. Android 스튜디오에서 앱을 디버그하거나 게시할 때 적절한 빌드 변형을 선택합니다. 예를 들어 wear2가 제품 버전인 경우 출시 빌드 변형으로 wear2Release를 선택합니다.

Wear 2.0 특정 코드나 Wear 1.x 특정 코드의 경우 빌드 변형용 소스 조합을 고려합니다.

삽입된 APK에서 다중 APK로 Wear 1.0 APK 이전

참고: Wear 1.x 시계의 앱 가용성에 영향을 주는 지연 시간 문제로 인해 Wear 1.x 시계에 다중 APK 전송 방법을 사용하는 대신 Wear APK를 삽입할 수 있습니다.

기존에는 웨어러블 앱을 사용자에게 배포하기 위해 전화 APK에 Wear 1.0 APK가 삽입되었습니다. 이제 Wear OS에서 Wear 1.0 APK를 삽입하는 대신 Play 스토어에 직접 업로드할 수 있습니다. 이렇게 하면 전화 APK의 크기가 줄어들고 APK 버전 관리 및 출시의 유연성이 향상됩니다. 삽입된 기존 Wear 1.0 APK가 있는 경우 아래 단계에 따라 APK를 구성 및 빌드하고 Play 스토어에 업로드할 수 있습니다.

  1. 휴대전화 모듈의 build.gradle 파일에 wearAppUnbundled true 설정을 추가합니다. 이 작업은 삽입된 Wear 앱을 이전에 Play 스토어에 게시한 경우에만 필요합니다.
  2.     android {
          ...
          defaultConfig {
            ...
            wearAppUnbundled true
          }
        }
        
  3. 전화 앱의 build.gradle 파일에서 다음 wearApp 종속성 규칙을 제거합니다.
  4.     dependencies {
            ...
            wearApp project(path: ':wear', configuration: 'wear1Release')
        }
        
  5. Wear 앱의 manifest 파일에 다음 기능 제한이 지정되어 있는지 확인합니다.
  6.     <manifest package="com.example.standalone"
            xmlns:android="http://schemas.android.com/apk/res/android">
            <uses-feature
                android:name="android.hardware.type.watch"/>
            ...
        </manifest>
        
  7. Wear 모듈의 build.gradle 파일에서 최소 SDK 버전을 23으로 설정합니다.
  8. 원하는 경우 독립형 앱 페이지를 검토한 후에 Wear 앱을 독립형으로 지정합니다.
  9. Wear APK를 빌드하고 Google Play Console을 사용하여 배포합니다.

Wear 앱의 최소 SDK 버전과 관련해서 다음 사항에 유의하세요.

  • Wear 1.0과 Wear 2.0의 APK가 서로 다른 경우 Wear 2.0 모듈의 build.gradle 파일에서 더 높은 최소 SDK 버전인 25를 설정해야 합니다. 이렇게 하면 Play 스토어에서 Wear 2.0 APK를 Wear 2.0 기기에만 배포하고, Wear 1.0 기기에는 배포하지 않습니다.
  • 보유 중인 Wear 2.0 앱을 Wear 1.0 기기에 배포하려는 경우 Wear 1.0 기기에서 잘 작동하는지 확인한 후에 최소 SDK 버전을 23으로 설정해야 합니다.

시계 타겟팅 설정

Android manifest 파일에서 uses-feature 요소를 android.hardware.type.watch로 설정해야 합니다. 또한 required 속성을 false로 설정하면 안 됩니다. Wear 기기와 Wear 이외의 기기에 모두 사용할 수 있는 단일 APK는 현재 지원되지 않습니다.

따라서 APK에 다음과 같은 설정이 있을 경우 Google Play는 시계에만 APK를 제공합니다.

    <manifest package="com.example.standalone"
        xmlns:android="http://schemas.android.com/apk/res/android">
        <uses-feature
            android:name="android.hardware.type.watch"/>
        ...
    </manifest>
    

위의 android.hardware.type.watch 설정은 SDK 버전, 화면 해상도, CPU 아키텍처 등의 다른 기준과 결합될 수 있습니다. 따라서 Wear APK마다 다른 하드웨어 구성을 타겟팅할 수 있습니다.

앱을 독립형으로 지정

Wear 2.0에서는 시계 앱의 Android manifest 파일에 meta-data 요소가 <application> 요소의 하위 요소로 포함되어야 합니다. meta-data 요소의 이름은 com.google.android.wearable.standalone이고 값은 true 또는 false여야 합니다. 이 요소는 시계 앱이 독립형 앱인지 여부를 나타냅니다. 요소 설정이 true인 경우, 모든 채널(예: 베타 채널)의 활성 APK에서 이 요소가 true로 설정되어 있기만 하면 iPhone과 페어링된 시계의 Play 스토어에서 앱을 제공할 수 있습니다. 현재 사용자에게 제공되는 일부 APK(알파, 베타 및 프로덕션)에 위의 설정이 없을 경우, 사용자가 iPhone과 페어링된 시계에서 검색할 때 앱이 제공되지 않습니다.

시계 앱은 독립형으로 간주될 수도 있고, 그렇지 않을 수도 있습니다. 다음 중 하나로 시계 앱을 분류할 수 있습니다.

  • 전화 앱과 완전히 독립적
  • 반 독립적(전화 앱이 필요하지 않고 선택적 기능만 제공)
  • 전화 앱에 종속

시계 앱이 완전히 독립적이거나 반 독립적인 경우, 새 meta-data 요소의 값을 true로 설정합니다.

    <application>
    ...
      <meta-data
        android:name="com.google.android.wearable.standalone"
        android:value="true" />
    ...
    </application>
    

iPhone 사용자 또는 Play 스토어가 없는 Android 휴대전화 사용자가 독립형 앱(즉, 독립적 앱 또는 반 독립적 앱)을 설치할 수 있으므로, Android 휴대전화 앱 없이 시계 앱을 사용할 수 있어야 합니다.

시계 앱이 전화 앱에 종속된 경우 위의 meta-data 요소 값을 false로 설정합니다. 이 요소를 false로 설정하면 Play 스토어가 있는 휴대전화와 페어링된 시계에만 시계 앱을 설치해야 합니다.

참고: 값이 false인 경우에도 전화 앱을 설치하기 전에 시계 앱을 설치할 수 있습니다.

Wear 2.0 앱에 함께 제공되는 전화 앱이 있는 경우 Wear 앱과 전화 앱에 동일한 패키지 이름을 사용합니다.

Play Console 사용

Play Console을 사용하여 독립형 Wear APK를 앱 등록정보에 업로드할 수 있습니다.

여러 APK 지원앱 관리도 참조하세요. 아래에 설명된 대로 APK를 업로드하기 전에 APK에 서명해야 합니다.

APK 업로드 및 게시

Play Console을 사용하여 APK를 업로드하고 게시하려면 다음 단계를 따르세요.

  1. Play Console로 이동합니다.
  2. 왼쪽 메뉴에서 출시 관리 > 앱 출시를 선택합니다.

    참고: APK가 초안 모드인 경우 왼쪽 메뉴에서 직접 앱 출시를 선택합니다.

  3. 만들려는 출시 유형(프로덕션, 알파 또는 베타) 옆의 관리를 선택합니다.
  4. 새 출시를 만들려면 출시 만들기를 선택합니다.
  5. 라이브러리에서 APK 추가를 선택하여 독립형 Wear APK를 추가합니다. 또는 APK 파일을 드래그 앤 드롭하거나 파일 둘러보기를 선택합니다.
  6. 출시 준비가 완료되면 검토를 선택합니다. '검토 및 출시' 화면이 표시됩니다. 여기서 정보 아이콘을 사용하여 지원되는 Android 기기 수 등의 APK 세부정보를 검토할 수 있습니다. 또한 하드웨어 기능을 다음과 같이 설정했는지 확인합니다. android.hardware.type.Watch.
  7. 출시 확인을 선택하여 앱을 게시합니다.

Wear 1.x APK 삽입

이 섹션의 절차는 참조용으로 유지되었습니다. Wear 1.x APK가 전화 앱 APK에 패키징된 경우, 사용자가 전화 앱을 다운로드하면 Wear 앱이 페어링된 시계로 푸시됩니다.

참고: 디버그 키로 앱에 서명할 때는 이 기능이 작동하지 않습니다. 개발 중에 adb install 또는 Android 스튜디오를 사용해서 시계에 직접 앱을 설치해야 합니다.

Android 스튜디오로 Wear 1.x 앱 패키징

참고: Wear 1.x 시계의 앱 가용성에 영향을 주는 지연 시간 문제로 인해 Wear 1.x 시계에 다중 APK 전송 방법을 사용하는 대신 Wear APK를 삽입할 수 있습니다.

Android 스튜디오에서 Wear 1.x 앱을 패키징하려면 다음 단계를 따르세요.

  1. 시계 앱 모듈과 전화 앱 모듈의 패키지 이름이 같은지 확인합니다.
  2. 시계 앱 모듈을 가리키는 전화 앱의 build.gradle 파일에서 Gradle 종속성을 선언합니다. 선언은 다음과 유사하지만, 최신 버전을 보려면 Google Play 서비스 설정v4 호환 라이브러리를 참조하세요.
        dependencies {
           compile 'com.google.android.gms:play-services-wearable:10.0.1'
           compile 'com.android.support:support-compat:25.1.0'
           wearApp project(':wearable')
        }
        
  3. 출시 빌드 서명의 안내에 따라 출시 키 저장소를 지정하고 앱에 서명합니다. Android 스튜디오는 삽입된 시계 앱을 포함하는 서명된 전화 앱을 프로젝트의 루트 폴더로 내보냅니다.

    또는 Gradle 래퍼를 사용하여 명령줄에서 두 앱에 모두 서명합니다. 시계 앱을 자동으로 푸시하려면 두 앱에 모두 서명해야 합니다. 앱 서명을 참조하세요.

Wear 1.x 앱과 전화 앱에 별도로 서명

빌드 프로세스에서 전화 앱과는 별도로 시계 앱에 서명해야 하는 경우, 휴대전화 모듈의 build.gradle 파일에서 다음과 같은 Gradle 규칙을 선언하여 이전에 서명한 시계 앱을 삽입할 수 있습니다.

    dependencies {
      ...
      wearApp files('/path/to/wearable_app.apk')
    }
    

그런 다음, Android 스튜디오의 Build > Generate Signed APK... 메뉴 항목이나 Gradle signingConfig 규칙을 사용하여 원하는 대로 전화 앱에 서명합니다.

수동으로 Wear 1.x 앱 패키징

다른 IDE 또는 다른 빌드 방법을 사용하는 경우, 전화 앱에서 시계 앱을 수동으로 패키징할 수 있습니다.

  1. 시계 APK와 휴대전화 APK의 패키지 이름 및 버전 번호가 같은지 확인합니다.
  2. 서명된 시계 앱을 휴대전화 프로젝트의 res/raw 디렉터리에 복사합니다. 이 APK를 wearable_app.apk로 참조하겠습니다.
  3. 시계 앱의 버전 및 경로 정보가 포함된 res/xml/wearable_app_desc.xml 파일을 만듭니다. 예를 들면 다음과 같습니다.
        <wearableApp package="wearable.app.package.name">
          <versionCode>1</versionCode>
          <versionName>1.0</versionName>
          <rawPathResId>wearable_app</rawPathResId>
        
        </wearableApp>
        

    package, versionCodeversionName의 값은 시계 앱의 manifest 파일에 있는 값과 같습니다. rawPathResId는 APK 리소스의 정적 변수 이름입니다. 예를 들어 wearable_app.apk에서 정적 변수 이름은 wearable_app입니다.

  4. 전화 앱의 <application> 태그에 meta-data 태그를 추가하여 wearable_app_desc.xml 파일을 참조합니다.
          <meta-data android:name="com.google.android.wearable.beta.app"
                         android:resource="@xml/wearable_app_desc"/>
        

    참고: 위의 meta-data 태그는 변경하면 안 됩니다. com.google.android.wearable.beta.app은 필수사항입니다.

  5. 전화 앱을 빌드하고 서명합니다.

애셋 압축 해제

Android 스튜디오는 기본적으로 APK를 압축하지 않지만, 다른 빌드 프로세스를 사용하는 경우 시계 앱이 이중으로 압축되지 않도록 합니다. 많은 빌드 도구는 Android 앱의 res/raw 디렉터리에 추가된 파일을 자동으로 압축합니다. 시계 APK는 이미 압축되어 있으므로 이중 압축이 발생합니다. 따라서 시계 앱 설치 프로그램이 시계 앱을 읽을 수 없고, 설치가 실패하며, PackageUpdateService에서 다음 오류를 로깅합니다. '이 파일을 파일 설명어로 열 수 없습니다. 파일이 압축된 것 같습니다.'