Wear 시계 화면
참고: 2024년 7월 10일부터 시계 화면에서는 시계 화면 형식을 Wear OS 5가 사전 설치된 새 시계에 설치된 앱 자세히 알아보기 사용자에게 미치는 영향을 고객센터 도움말을 참조하세요.
또한 2025년 초 (구체적인 날짜는 2025년 초 2024년 4분기)에서 Google Play에 게시되는 모든 신규 시계 화면은 시계 화면을 사용해야 합니다. 형식을 선택합니다.
최근 업데이트 | 안정화 버전 | 출시 후보 버전 | 베타 버전 | 알파 버전 |
---|---|---|---|---|
2024년 4월 17일 | 1.2.1 | - | - | 1.3.0-alpha03 |
종속 항목 선언
Wear의 종속 항목을 추가하려면 프로젝트에 Google Maven 저장소를 추가해야 합니다. 자세한 내용은 Google Maven 저장소를 읽어보세요.
다음과 같이 앱 또는 모듈의 build.gradle
파일에 필요한 아티팩트의 종속 항목을 추가합니다.
Groovy
dependencies { // Use to implement wear watchfaces implementation "androidx.wear.watchface:watchface:1.2.1" // Use to implement wear watchface complications implementation "androidx.wear.watchface:watchface-complications-data-source:1.2.1" // (Kotlin-specific extensions) implementation "androidx.wear.watchface:watchface-complications-data-source-ktx:1.2.1" // Use to implement a watchface style and complication editor implementation "androidx.wear.watchface:watchface-editor:1.2.1" // Can use to render complications. // This library is optional and watchfaces may have custom implementation for rendering // complications. implementation "androidx.wear.watchface:watchface-complications-rendering:1.2.1" }
Kotlin
dependencies { // Use to implement wear watchfaces implementation("androidx.wear.watchface:watchface:1.2.1") // Use to implement wear watchface complications implementation "androidx.wear.watchface:watchface-complications-data-source:1.2.1" // (Kotlin-specific extensions) implementation "androidx.wear.watchface:watchface-complications-data-source-ktx:1.2.1" // Use to implement a watchface style and complication editor implementation("androidx.wear.watchface:watchface-editor:1.2.1") // Can use to render complications. // This library is optional and watchfaces may have custom implementation for rendering // complications. implementation "androidx.wear.watchface:watchface-complications-rendering:1.2.1" }
종속 항목에 관한 자세한 내용은 빌드 종속 항목 추가를 참고하세요.
의견
제출하신 의견은 Jetpack을 개선하는 데 도움이 됩니다. 새로운 문제를 발견하거나 라이브러리 개선을 위한 아이디어가 있다면 Google에 알려 주세요. 새 문제를 제출하기 전에 이 라이브러리의 기존 문제를 살펴보시기 바랍니다. 별표 버튼을 클릭하여 기존 문제에 투표할 수 있습니다.
자세한 내용은 Issue Tracker 문서를 참고하세요.
버전 1.3
버전 1.3.0-alpha03
2024년 4월 17일
androidx.wear.watchface:watchface-*:1.3.0-alpha03
이 출시되었습니다. 버전 1.3.0-alpha03에 포함된 커밋을 확인하세요.
API 변경사항
- 수정하는 동안 기본 시계 화면 인스턴스의
ComplicationData
를 일시적으로 설정하는EditorSession#setOverrideComplications
를 추가했습니다. 정보 표시가 드물게 변경되는 경우EditorSession#renderWatchFaceToBitmap
를 통해 재정의를 전달하는 것보다 더 효율적입니다. 추가했습니다. (I19384)
버그 수정
- 이전에는
selectComplicationDataForInstant
가 모든 타임라인에서toApiComplicationData
를 호출했습니다. 즉, 후속 === 참조 동등 테스트가 항상 실패합니다. 즉, 프레임마다 정보 표시가 다시 로드되어 배터리가 소모되었습니다. (717406)
버전 1.3.0-alpha02
2024년 4월 3일
androidx.wear.watchface:watchface-*:1.3.0-alpha02
이 출시되었습니다. 버전 1.3.0-alpha02에 포함된 커밋을 확인하세요.
새로운 기능
- 이제 등호 연산자는 비용이 많이 들기 때문에 참조 동등을 사용하여 최적값과
selectedData
를 비교합니다. (446b00)
API 변경사항
GoalProgressComplicationData
를 위한 대체 없는 동적 API가 추가되었습니다. 추가했습니다. (c33264)
버전 1.3.0-alpha01
2024년 2월 7일
androidx.wear.watchface:watchface-*:1.3.0-alpha01
이 출시되었습니다. 버전 1.3.0-alpha01에 포함된 커밋을 확인하세요.
새로운 기능
WatchFaceServices
는 동시에 초기화할 수 있으므로 스테이트리스(Stateless)여야 합니다. 이를 지원하기 위해createExtra()
에서 생성된 사용자 정의 추가 항목이 초기화 중에 호출된 모든 재정의에 전달되는StatefulWatchFaceService
를 추가했습니다.- 이제
GlesRenderer2
에는 생성자 오버로드가 있습니다. 이 메서드를 통해eglChooseConfig
를 사용하여 차례로 시도할 속성 목록을 지정할 수 있습니다.
API 변경사항
- 이제
StatefulWatchFaceService
가createExtra()
에서 만든 사용자 정의 추가 항목이 전달되는getComplicationSlotInflationFactory
재정의를 지원합니다. 추가했습니다. (I82d9f) - 일부 시계 화면은
createUserStyleSchema
중에 생성된 보조 데이터를 다른 초기화 메서드와 공유해야 합니다. 더 나은 대안은 없었기 때문에 개발자는 일반적으로WatchFaceServices
를 스테이트풀(Stateful)로 만들었습니다. 여러 인스턴스를 동시에 생성할 수 있어 버그가 발생할 수 있으므로 위험합니다. 이 문제를 해결하기 위해StatefulWatchFaceService
및StatefulWatchFaceRuntimeService
를 도입했습니다. 여기서는 사용자 정의 유형이createExtra()
에서 생성되고 다양한 create 메서드에 매개변수로 전달됩니다. 추가했습니다. (If8a99) getUserStyleFlavors
를InteractiveWatchFaceClient
에 추가했으며 이는 주로 OEM에 관심 있습니다. 추가했습니다. (I0f5d8)- 이제
GlesRenderer2
에는 생성자 오버로드가 있습니다. 이 메서드를 통해eglChooseConfig
를 사용하여 차례로 시도할 속성 목록을 지정할 수 있습니다. 예를 들어 먼저 앤티앨리어싱이 적용된 구성을 시도해 보고 필요한 경우 앤티앨리어싱이 없는 구성으로 대체할 수 있습니다. 추가했습니다. (I1ba74) - Android U부터 WearOS에
SystemDataSources.DATA_SOURCE_HEART_RATE
지원이 추가됩니다. 이 정보 표시는SHORT_TEXT
정보 표시만 지원하도록 보장되지만ComplicationSlot
에서도SMALL_IMAGE
를 허용하는 것이 좋습니다. OEM이 실시간 값 대신 건강 앱 바로가기를 제공할 수 있기 때문입니다. 추가했습니다. (I34223) - Android U부터 시스템이
METADATA_KEY_DATA_SOURCE_CONFIG_ACTION
를 사용하는 정보 표시 데이터 소스의 백업에서 복원될 때 발생하는 동작을 제어하는METADATA_KEY_CONFIG_RESTORE_SUPPORTED
를 추가했습니다. 기본적으로 시스템은 정보 표시 데이터 소스 서비스가 구성 데이터의 백업을 지원한다고 가정하지만, 지원하지 않는 경우에는 메타데이터 설정METADATA_KEY_DATA_SOURCE_CONFIG_ACTION
을 false로 추가하여 정보 표시 자리가 구성되지 않은 것으로 표시할 수 있습니다. 추가했습니다. (I6c505)
버전 1.2
버전 1.2.1
2024년 1월 24일
androidx.wear.watchface:watchface-*:1.2.1
이 출시되었습니다. 버전 1.2.1에 포함된 커밋을 확인하세요.
버그 수정
- 삼성 Galaxy Watch 4, 5 및 여섯째, 추가했습니다. (43f0b0)
버전 1.2.0
2023년 11월 29일
androidx.wear.watchface:watchface-*:1.2.0
이 출시되었습니다. 버전 1.2.0에 포함된 커밋을 확인하세요.
1.1.0 이후 중요 변경사항
- Android T에서 사용할 수 있는 몇 가지 새로운 정보 표시 유형에 대한 지원을 추가했습니다.
<ph type="x-smartling-placeholder">
- </ph>
GoalProgressComplicationData
: 최솟값이 암시적으로 0이고 값이targetValue
보다 클 수 있는 목표 달성을 위한 진행을 사용한다는 점을 제외하면RangedValueComplicationData
와 유사합니다.WeightedElementsComplicationData
: 선택적 텍스트/제목/이미지와 함께 요소의 배열 (가중치 및 색상 쌍)으로 구성됩니다. 컨텍스트에 따라 색상이 의미 있어야 하는 원형 차트로 표시될 수 있습니다. 일반적으로 정보 표시에는 라벨을 렌더링할 공간이 없기
RangedValueComplicationData
에 선택적ColorRanges
지원을 추가했습니다. 일반적으로 정보 표시는 시계 화면에서 선택한 색상으로 렌더링되지만 예를 들어 특정 시맨틱 의미가 있는 색상을 설정하는 데는ComplicationDataSource
가 가장 적합합니다. 예를 들어 빨간색에서 파란색으로 온도를- 이제 거의 모든
ComplicationData
유형이SmallImages
를 지원합니다. - 기기가 잠겨 있을 때
DO_NOT_SHOW_WHEN_DEVICE_LOCKED
가 호환되는 시계 화면에 정보 표시를 표시하지 않도록 지시하는ComplicationDisplayPolicy
를 추가했습니다. - Android T부터 OEM은 정보 표시 요청이
ComplicationRequest#isForSafeWatchFace
에 의해 제공자의 매니페스트에 있는android.support.wearable.complications.SAFE_WATCH_FACES
메타데이터로 정의된 목록의 시계 화면에서 발생하는지 확인할 수 있습니다. 제공업체가 TargetWatchFaceSafety.UNKNOWN` 이외의 항목을 수신하려면com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE
권한이 필요합니다. UserStyleFlavors
가 비실험용 기능이 되었습니다.
버전 1.2.0-rc01
2023년 10월 18일
androidx.wear.watchface:watchface-*:1.2.0-rc01
이 출시되었습니다. 버전 1.2.0-rc01에 포함된 커밋을 확인하세요.
버전 1.2.0-beta02
2023년 9월 6일
androidx.wear.watchface:watchface-*:1.2.0-beta02
이 출시되었습니다. 버전 1.2.0-beta02에 포함된 커밋을 확인하세요.
새로운 기능
SuspendingComplicationDataSourceService#onDestroy
이(가) 열려 있습니다. 시스템 기본 날씨 정보 표시 지원이 삭제되었습니다.
API 변경사항
- '날씨 정보 표시를 위해 새 데이터 소스 노출'을 되돌립니다. 추가했습니다. (I6f335)
버전 1.2.0-beta01
2023년 8월 23일
androidx.wear.watchface:watchface-*:1.2.0-beta01
이 출시되었습니다. 버전 1.2.0-beta01에 포함된 커밋을 확인하세요.
새로운 기능
- Android T부터 WearOS는 이제 기본 날씨 시스템 정보 표시를 지원합니다.
API 변경사항
- 정보 표시의 날씨 기본 시스템 대체를 추가합니다. 추가했습니다. (Ia0994)
- 이 패치는 Guava 래퍼와 함께
WatchFaceRuntimeService
및WatchFaceControlClient.createWatchFaceRuntimeControlClient
를 추가합니다. 이는 다른 패키지에서 정의를 로드하는 특별한 종류의 시계 화면인 시계 화면 런타임 지원을 추가합니다. 현재 WearOS는 Android 워치 페이스 형식의 런타임만 지원합니다. 추가했습니다. (I2799f) - 이 패치는 aosp/2636578의 후속 조치로,
WatchFaceType
,CanvasType
,TapType
또는ComplicationsSlotBoundsType
에 종속된 코드를 변경할 필요가 없도록 int defs의 이름을 바꿉니다. 추가했습니다. (I4098b) - 호환성 비표시에 주석을 달도록 API 파일을 업데이트했습니다. 추가했습니다. (I8e87a, b/287516207)
- 이 패치는
WatchFaceTypes
에WatchFaceType
상수,CanvasTypes
에CanvasType
상수,TapTypes
에TapType
상수,ComplicationsSlotBoundsType
에ComplicationsSlotBoundsType
상수를 노출합니다. 추가했습니다. (I3b85a, b/288750666) WatchFace.OverlayStyle
은(는) 사용량이 매우 적고 OEM에서 잘 지원하지 않으므로 향후 삭제될 예정입니다. 추가했습니다. (I7344a)
버전 1.2.0-alpha09
2023년 6월 21일
androidx.wear.watchface:watchface-*:1.2.0-alpha09
이 출시되었습니다. 버전 1.2.0-alpha09에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
RangedValueComplicationData.Builder
가DynamicFloat
를 허용하며 새DynamicComplicationText
를ComplicationText
의 서브클래스로 사용할 수 있습니다. 둘 다 지원되는 Wear 4 기기에서 1hz로 업데이트되는 플랫폼 결합은 물론 동적 표현식을 활용할 수 있습니다.
API 변경사항
- 일일 거리, 일일 칼로리, 일일 오른 층수에 대한 동적 유형을 추가했습니다. 이제 플랫폼 상태 소스의 키가
PlatformHealthSources.Keys
아래에 있습니다. (Ib7637) PlatformDataProvider
를 구현하여 심박수와 일일 걸음 수를 제공합니다.SensorGateway
인터페이스가 공개 API에서 삭제되었습니다. 추가했습니다. (I55b84)StateEntryValue
의 이름을DynamicDataValue
로 바꾸고DynamicDataKey
를 사용하도록 상태 API를 업데이트합니다. 추가했습니다. (If1c01)- 앱 푸시 상태에 액세스하기 위한
AppDataKey
를 추가합니다. 플랫폼 데이터에 액세스하기 위한PlatformDataKey
를 추가합니다.StateStore
에 네임스페이스 지원을 추가합니다. 추가했습니다. (I7985e) - 메서드
disablePlatformSource
개 중enable
개가DynamicTypeEvaluator
에서 삭제되었습니다. 호출자가 업데이트를 담당해야 합니다. 추가했습니다. (I78c6d) - 결합된 데이터 유형의 크기 제한을 허용합니다. 추가했습니다. (Ie2966)
버전 1.2.0-alpha08
2023년 4월 19일
androidx.wear.watchface:watchface-*:1.2.0-alpha08
이 출시되었습니다. 버전 1.2.0-alpha08에 포함된 커밋을 확인하세요.
새로운 기능
- Android T에서
com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE
권한이 있는 정보 표시 제공자는 안전한 시계 화면을 위해android.support.wearable.complications.SUPPORTED_TYPES
를 재정의하는androidx.wear.watchface.complications.datasource.SAFE_WATCH_FACE_SUPPORTED_TYPES
메타데이터를 등록할 수 있습니다. 즉, 정보 표시 제공자는 신뢰할 수 있는 시계 화면과 신뢰할 수 없는 시계 화면에 서로 다른 유형을 제공하도록 선택할 수 있습니다.
API 변경사항
@Deprecated
클래스를 속성으로 전파합니다. (I882d1, b/271441831)Enum.valueOf
의 값 매개변수 이름이 변경되었습니다. (Ia9b89)- enum valueOf에서 더 많은 예외가 발생합니다. (I818fe)
- SurfaceControlViewHost 위에 빌드되고 호출자가 시계 화면에서 뷰를 삽입할 수 있도록 하는
createRemoteWatchFaceView
를 위해renderWatchFaceToSurface
를 삭제했습니다. 이는 클라이언트가RemoteWatchFaceViewHost#renderWatchFace
를 호출할 때 렌더링됩니다. 추가했습니다. (Ib311d) renderWatchFaceToSurface
를InteractiveWatchFaceClient
,HeadlessWatchFaceClient
,EditorSession
에 추가했습니다. 일반적으로 이 방법은 비트맵을 렌더링하는 것보다 성능이 우수합니다. (Ieacad)ObservableStateStore
의 이름이StateStore
로 변경되었습니다. 추가했습니다. (Ieb0e2)- 더 많은 선택적 인수를 허용하도록 생성자 인수 대신
DynamicTypeEvaluator.Builder
를 추가했습니다. 여기에는 이제 기본적으로 빈 스토어가 되는ObservableStateStore
가 포함됩니다. 추가했습니다. (I6f832) DynamicTypeEvaluator
의 매개변수 순서를 리팩터링했습니다. 추가했습니다. (Ic1ba4)- 실행자가
DynamicTypeEvaluator.bind
메서드에 추가되었습니다. 추가했습니다. (I346ab) - 동적 유형이 바인딩된 후 평가를 트리거하도록
BoundDynamicType
에startEvaluation
메서드를 추가했습니다. 추가했습니다. (I19908) - 권한이 있는
com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE
가 있는 정보 표시 제공자는 안전한 시계 화면의android.support.wearable.complications.SUPPORTED_TYPES
를 재정의하는androidx.wear.watchface.complications.datasource.SAFE_WATCH_FACE_SUPPORTED_TYPES
메타데이터를 등록할 수 있습니다. 추가했습니다. (Id1c73) CustomValueUserStyleSettings2
의 이름을LargeCustomValueUserStyleSettings
로 바꾸었습니다. 추가했습니다. (Ic17ac)
버그 수정
DynamicTypeValueReceiver#onPreUpdate
를 삭제했습니다. 추가했습니다. (I2dc35)
버전 1.2.0-alpha07
2023년 2월 22일
androidx.wear.watchface:watchface-*:1.2.0-alpha07
이 출시되었습니다. 버전 1.2.0-alpha07에 포함된 커밋을 확인하세요.
새로운 기능
Android T부터 OEM은 정보 표시 요청이
ComplicationRequest#isForSafeWatchFace
에 의해 제공자의 매니페스트에 있는android.support.wearable.complications.SAFE_WATCH_FACES
메타데이터로 정의된 목록의 시계 화면에서 발생하는지 확인할 수 있습니다. 제공자는TargetWatchFaceSafety.UNKNOWN
이외의 항목을 수신하려면com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE
권한이 있어야 합니다.또한 Android T부터 최대 12.5KB를 보관할 수 있는
CustomValueUserStyleSetting2
를 사용할 수 있습니다.CustomValueUserStyleSetting
의 이전 한도는 1KB였습니다. 크기 한도가 증가했더라도 시계 화면 개발자는 데이터를 작게 유지하는 것이 좋습니다. 설정이 수정 중에 블루투스를 통해 전송되고 블루투스 대역폭은 제한되어 있기 때문입니다.
API 변경사항
EGL14.eglCreateContext
에 전달된EGL14.EGL_CONTEXT_CLIENT_VERSION
을 설정할 수 있는 선택적 매개변수eglContextAttribList
를GlesRenderer
및GlesRenderer2
에 추가했습니다. (I2a83e)- 시계 화면 lib를
java.util.function.Consumer
가 아닌androidx.core.util.Consumer
로 이전했습니다. (I273f5) - KT 속성 접근자에서 더 많은 예외가 발생합니다. (Iff9d9)
- 클라이언트가 이전 시계 화면을 대신하여 지원을 에뮬레이션해야 하는지를 판단할 수 있도록
InteractiveWatchFaceClient.isComplicationDisplayPolicySupported
를 추가했습니다. (I24c89) isForSafeWatchFace
이 3개 상태IntDef
여야 한다고 결정했습니다. (Ief2f7)- Android T의 경우 OEM용으로
ComplicationRequest.isForSafeWatchFace
를 도입했으며com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE
가 필요합니다. 시스템 이미지의 데이터 소스의 경우 요청하는 시계 화면이 매니페스트의 데이터 소스에서 지정한 안전한 시계 화면 목록 내에 있으면 true가 반환됩니다. (I0cbb6) - Android T의 경우 최대 12.5KB를 보관할 수 있는
CustomValueUserStyleSetting2
를 추가했습니다.CustomValueUserStyleSetting
의 이전 한도는 1KB였습니다. (I0b100)
버전 1.2.0-alpha06
2023년 1월 25일
androidx.wear.watchface:watchface-*:1.2.0-alpha06
이 출시되었습니다. 버전 1.2.0-alpha06에 포함된 커밋을 확인하세요.
새로운 기능
- 정보 표시 플랫폼 바인딩 지원을 추가하기 위한 작업이 진행 중입니다. 이 기능은 아직 사용할 수 없지만 조금만 기다려 주세요.
- 새로운 정보 표시 유형(GOAL_PROGRESS 및 WEIGHTED_ELEMENTS)에 관한 XML
ComplicationSlot
지원을 추가했습니다.
버그 수정
- 삼성 기기에서 시계 화면 편집기가 제대로 출시되지 않는 누수 문제를 해결했습니다. (3b5987)
- 여러 즐겨찾기가 있는 시계 화면 간에 전환할 때 정보 표시가 올바르게 표시되지 않는 버그를 수정했습니다. (b38ece)
- 시계 화면 비정상 종료를 유발하는 perOptionScreenReaderNames의 직렬화 버그를 수정했습니다. (e9f466)
버전 1.2.0-alpha05
2022년 12월 7일
androidx.wear.watchface:watchface-*:1.2.0-alpha05
가 출시되었습니다. 버전 1.2.0-alpha05에 포함된 커밋을 확인하세요.
새로운 기능
얼마 전 계층적
UserStyleSettings
지원을 추가했으며 Android T부터는 이제 계층 구조에 둘 이상의ComplicationSlotsUserStyleSetting
을 포함할 수 있습니다. 사용자의 스타일 선택에 따라 하나의ComplicationSlotsUserStyleSetting
만 활성화됩니다.screenReaderName
필드를 추가하여ListOption
및ComplicationSlotsOption
의 스크린 리더 지원을 개선하고 있습니다. Android T 전에는 컴패니언 편집기에서 이 필드를 무시합니다.
API 변경사항
- 편집기에서 사용할 수 있도록
ListOption
및ComplicationSlotsOption
에 새로운screenReaderName
필드(선택사항)를 추가했습니다. Android T 전의 기기에서는 컴패니언 편집기에서 이 필드를 무시합니다. (I75326) - Android T부터 이제 한 번에 최대 하나만 활성화할 수 있는 경우 스타일 계층 구조에서 여러
ComplicationSlotsUserStyleSettings
가 지원됩니다. 활성ComplicationSlotsOption
(있는 경우)을 찾을 수 있도록UserStyleSchema
에 유틸리티 함수findComplicationSlotsOptionForUserStyle
을 추가했습니다. (Ic2b06) RangedValuesTypes
를RangedValueComplicationData
의 컴패니언 객체로 가져오고TYPE_UNDEFINED
,TYPE_RATING
로 이름을 바꾸었으며 새로운TYPE_PERCENTAGE
를 추가했습니다. (I55d02)- 실험용
DynamicFloat
를FloatExpression
으로 이름을 바꾸고@hide
로 표시했습니다. (Idf4f1) @JvmDefaultWithCompatibility
주석을 추가합니다. (I8f206)
버전 1.2.0-alpha04
2022년 11월 9일
androidx.wear.watchface:watchface-*:1.2.0-alpha04
가 출시되었습니다. 버전 1.2.0-alpha04에 포함된 커밋을 확인하세요.
새로운 기능
- Android T의 경우 두 가지 새로운 정보 표시 유형인
GoalProgressComplicationData
및WeightedElementsComplicationData
지원이 추가되었습니다. GoalProgressComplicationData
는RangedValueComplicationData
와 유사하지만 값을 타겟 넘게 지정할 수 있어(RangedValueComplicationData
의 경우 값이 [최소 .. 최대] 범위로 고정됨) 모든 시계 화면에는 적합하지 않을 수도 있는 시각 디자인적 영향이 있습니다.GoalProgressComplicationData
에는 간단한 데이터의 원형 차트 및 유사한 분류 지원이 추가되었습니다.RangedValueComplicationData
에ColorRamps
지원(선택사항)을 추가했습니다.- Android T의 경우
ComplicationData
에ComplicationPersistencePolicy
및setCachePolicy
를 추가했습니다. 현재, 이를 통해 제공자는 정보 표시가 지속되는지 여부(예: 재부팅 후에 캐시 유지 여부)를 제어할 수 있습니다. 대부분의 정보 표시는 캐시 관리를 설정할 필요가 없지만, 설정하면 자주 업데이트되는 일부 정보 표시(예: 건강 데이터 정보 표시)의 오래된 데이터가 있는 특수한 사례를 해결할 수 있습니다. 또한 기기가 잠겨 있을 때DO_NOT_SHOW_WHEN_DEVICE_LOCKED
가 호환되는 시계 화면에 정보 표시를 표시하지 않도록 지시하는ComplicationDisplayPolicy
를 추가했습니다. (Ic9574)
API 변경사항
GoalProgressComplicationData
,WeightedElementsComplicationData
,ColorRamp
가 더 이상 실험용이 아닙니다. (Ica9e2)- 이제
ComplicationPersistencePolicy
와ComplicationDisplayPolicy
가 T API로 제대로 표시됩니다. (I31d88) - 지원 중단된
ComplicationSlotOverlay
생성자에 이제DeprecationLevel.WARNING
이 포함되어 자바에서 다시 호출할 수 있습니다. (Ib308c) ComplicationRequestListener
,CanvasComplication
,ComplicationTapFilter
,InteractiveWatchFaceClient
와 관련된 일부 자바 호환성 문제를@JvmDefaultWithCompatibility
로 주석 처리하여 해결했습니다. (Id94fc)- 실험용
ProtoLayoutComplicationData
및ListComplicationData
를 삭제했습니다. 이에 관한 개발자 스토리가 명확하지 않았습니다. 나중에 다시 확인해 주세요. (I9df05) RangedValueComplicationData
에ValueType
을 다시 추가했습니다. 이제WeightedElementsComplicationData
가 배경 색상을 지원합니다. 기능이WeightedElementsComplicationData
의 하위 집합이므로DiscreteRangedValueComplicationData
를 삭제했습니다. (I6446c)
버그 수정
- 등호 및 해시 코드에
isForScreenShot
을 포함합니다.onRenderParametersChanged
에 정확한isForScreenshot
값을 가져오는지 확인합니다. (I04a41) - 헤드리스 클라이언트에서
WatchFaceControlService
가 유출되는 문제를 수정했습니다. (e90e00)
버전 1.2.0-alpha03
2022년 10월 5일
androidx.wear.watchface:watchface-*:1.2.0-alpha03
이 출시되었습니다. 버전 1.2.0-alpha03에 포함된 커밋을 확인하세요.
새로운 기능
- 새로운 기능은 없지만 다수의 시계 화면 편집기 버그가 수정되었습니다.
API 변경사항
rootUserStyleSettings
가 비실험용이 되어UserStyleSchema.userStyleSettings
를 지원 중단했습니다. (Ie96e3)rootUserStyleSettings
를 비실험용으로 이동했습니다. (I8d6b3)- 일부 시스템에서는 지원되지 않으므로
WatchFaceColors
를 실험용으로 표시했습니다. (I6d75d) IntDef
와 호환되도록 공개 API에DisconnectReasons
를 노출합니다. (I791f8)
버그 수정
SysUI
가 종료되면 시계 편집기가 열려 있는 경우 닫습니다.SysUI
가 종료되고 시계 화면 편집기가 닫히지 않은 경우 시스템이SysUI
에 의존하여 사용자 스타일 변경사항을 유지하기 때문에 시계 화면이 일관되지 않은 상태가 될 수 있습니다. (ba762a)- kotlin 코루틴 연속이 GC 루트 역할을 하고 편집기 활동을 유지하는
ComplicationDataSourceInfoRetriever
의 메모리 누수를 수정했습니다. (33ee06)
버전 1.2.0-alpha02
2022년 9월 21일
androidx.wear.watchface:watchface-*:1.2.0-alpha02
가 출시되었습니다. 버전 1.2.0-alpha02에 포함된 커밋을 확인하세요.
새로운 기능
일부 시계 화면의 경우
UserStyle
외부에 시각적인 영향을 주는 구성이 있습니다(예: 배경 사진 선택). 시계 화면에서 업데이트된 미리보기 이미지를 요청하도록 허용하는Renderer.sendPreviewImageNeedsUpdateRequest
를 추가했습니다. 이 작업을 수행하려면 해당하는 시스템 업데이트가 필요합니다.시계 화면이 색상을 시스템에 노출할 수 있도록 API를 추가할 수 있으며 시스템에서 이 색상을 토대로 색상 팔레트를 선택할 수 있습니다. 참고: 후속 패치에서 실험용으로 제공되었습니다.
이제 거의 모든
ComplicationData
유형이SmallImages
를 지원합니다.
API 변경사항
- 배경화면 관리자는 엔진에서 분리하여 다른 엔진으로 만들 수 있습니다. 리스너에서 엔진 분리를 관찰할 수 있도록
DisconnectReason
int def를 추가하고DisconnectReason
을 포함하는 새로운 메서드로ClientDisconnectListener
를 확장했습니다. (I45cce) ComplicationSlotOverlay
생성자에 선택적 매개변수nameResourceId
및screenReaderResourceId
두 개를 추가했습니다. (I157e8)PreviewImageUpdateRequestedListener
가 있는 새로운getOrCreateInteractiveWatchFaceClient
오버로드를 위한 guava 래퍼를 추가했습니다. (Ic31f0)- 외관에 영향을 미치는
UserStyleSchema
이외 상태의 시계 화면(예: 선택 가능한 배경 이미지가 있는 시계 화면)에 유용한Renderer.sendPreviewImageNeedsUpdateRequest
를 추가했습니다. 클라이언트 측에서 이러한 요청을 관찰하기 위해PreviewImageUpdateRequestedListener
를getOrCreateInteractiveWatchFaceClient
의 선택적 매개변수로 추가했습니다. (Iff44a) WatchFaceColors
를 노출하는 API를 간소화했습니다. 이제 렌더기에는 시계 화면에서 설정할 수 있는watchFaceColors
라는 간단한 속성이 있습니다. 모든 스타일 변경에 응답하여 필요에 따라 업데이트해야 합니다. 색상 변경을 관찰하기 위해WallpaperManager
를 사용하는 대신InteractiveWatchFaceClient
에OnWatchFaceColorsListener
를 추가했습니다. (I490bc)- 가장 눈에 띄는 세 가지 시계 화면 색상 세 가지를 포함하는
WatchFaceColors
클래스를 추가하고 공개 메서드watchfaceColors
및notifyWatchFaceColorsChanged
를 렌더기에 추가하여 시스템이WallpaperManager.getWallpaperColors
를 통해 시계 화면의 색상을 가져오도록 허용합니다. (I3d611) ShortTextComplicationData
,RangedValueComplicationData
,NoPermissionComplicationData
(및 실험용DiscreteRangedValueComplicationData
,GoalProgressComplicationData
,WeightedElementsComplicationData
)에서 이제SmallImages
를 모두 지원합니다. 시계 화면이 여러 색상으로 정보 표시를 렌더링하도록 선택하면 이전에는 단색 이미지를 사용해야 했던 여러 색상의SmallImage
를 사용할 수 있는 옵션이 지원됩니다. (I257df)- 대신
PreviewImageUpdateRequestedListener
를Consumer<>
로 리팩터링합니다. (Ia875d) - 맞춤 단일 추상 메서드(SAM) 유형
OnWatchfaceColorsListener
를 일반 자바 SAM 유형(소비자)으로 대체합니다. (I0c489) PreviewImageUpdateRequestedListener
를 지정하지 않는 이전getOrCreateInteractiveWatchFaceClient
및listenableGetOrCreateInteractiveWatchFaceClient
메서드가 지원 중단되었습니다. (Iec502)
버그 수정
DisconnectReason.BINDER_DIED
의 이름을DisconnectReason.ENGINE_DIED
로 변경했습니다. (I4eb0e)
버전 1.2.0-alpha01
2022년 8월 10일
androidx.wear.watchface:watchface-*:1.2.0-alpha01
이 출시되었습니다. 버전 1.2.0-alpha01에 포함된 커밋을 확인하세요.
새로운 기능
- 다양한 새로운 정보 표시 형식을 위한 실험용 지원을 추가했습니다. 현재 개발 중인 영역이므로 이러한 새로운 형식은 예고 없이 변경될 수 있으며 현재
CanvasComplicationDrawable
에서 렌더기 지원이 제공되지 않습니다. - 또한 정보 표시 자리에 여백(선택사항)을 추가하여 작은 정보 표시를 쉽게 탭할 수 있도록 했습니다.
API 변경사항
- 실험용
BoundingArc
클래스를 이제 변경할 수 없습니다. (If624a) - 작은 정보 표시는 탭하기 어려울 수 있습니다. 이 문제를 완화하기 위해 렌더링에 영향을 주지 않으면서 탭할 수 있는 영역을 늘리는 여백 지원을 도입했습니다. 코드에 또는 XML을 통해 지정되지 않는 한
ComplciationSlots
의 여백 크기는 0입니다. (I14089) - null이 아닌 팩토리 인스턴스를 반환하도록
getComplicationSlotInflationFactory(CurrentUserStyleRepository)
서명을 변경했습니다. 이전에는 null을 반환하는 것이 오류였으므로 API 계약이 더 명확해졌습니다. (I0fcc0) createComplicationSlotsManager
와 일관되도록WatchFaceService.getComplicationSlotInflationFactory
메서드에currentUserStyleRepository
인수를 추가했습니다. (I2ddd2)UserStyleFlavors
가 비실험용 기능이 되었습니다. (I69cdc)- 실험용
ValueType
을RangedValueComplicationData
에서 삭제했으며 대신 정수 범위와 값을 제외하고RangedValueComplicationData
와 비슷한 실험용DiscreteRangedValueComplicationData
를 도입했습니다. 최솟값이 암시적으로 0이고 값이targetValue
보다 클 수 있는 목표를 향한 진행을 위한 것이라는 점을 제외하고RangedValueComplicationData
와 유사한 실험용GoalProgressComplicationData
도 도입했습니다. 모든RangedValue
변형에서 monochromeImage나 텍스트, 제목 중 하나 이상을 지정해야 합니다. (I9590c) - 시스템 소프트웨어에 사용 사례가 없으므로
ComplicationSlotState
에서boundsWithMargins
를 삭제했습니다. (I42e26) - 선택적 텍스트/제목/이미지와 함께 요소의 배열(가중치 및 색상 쌍)로 구성된
WeightedElementsComplicationData
를 위한 실험용 지원을 추가했습니다. 컨텍스트에 따라 색상이 의미 있어야 하는 원형 차트로 표시될 수 있습니다. 일반적으로 정보 표시에는 라벨을 렌더링할 공간이 없기 때문입니다. (I87eea) RangedValueComplicationData
및GoalProgressComplicationData
에서 선택적으로 사용하는 실험용ColorRamps
를 사용하면 이제 최대 7가지 색상 시퀀스와 색상을 부드럽게 트위닝해야 하는지 또는 동일한 크기의 단색 색상 단계를 렌더링해야 하는지 나타내는 플래그를 지정할 수 있습니다. (I9f5bf)RangedValueComplicationData.drawSegmented
를valueType
으로 변경했습니다. 이는 범위가 지정된 값에 시맨틱 의미를 제공하고, 정보 표시 렌더기에서 사용하여 스타일 지정에 영향을 줄 수 있는 상응하는ValueType IntDef
가 있는 int입니다. (I0616b)- 선택적
ColorRanges
를 위한 실험용 지원을RangedValueComplicationData
에 추가했습니다. 일반적으로 정보 표시는 시계 화면에서 선택한 색상으로 렌더링되지만 예를 들어 특정 시맨틱 의미가 있는 색상을 설정하는 데는ComplicationDataSource
가 가장 적합합니다. 예를 들어 빨간색에서 파란색으로 온도를 나타냅니다. (I5153a) - 실험용
drawSegmented
힌트를RangedValueComplicationData
에 추가했습니다. 이는 세그먼트를 사용하여 범위가 지정된 값 표시기를 그리라고 렌더기에 알립니다. 여기서 1 세그먼트는 1 단위입니다. (I7d7c1)
버그 수정
- 사전 정의된 화면 좌표계를 기준으로
ComplicationSlotBounds
를 정의하는 기능을 추가했습니다. (I0985d)
버전 1.1
버전 1.1.1
2022년 8월 10일
androidx.wear.watchface:watchface-*:1.1.1
이 출시되었습니다. 버전 1.1.1에 포함된 커밋을 확인하세요.
- 버그 수정 출시이며 버전 1.1.0 사용자는 업그레이드하는 것이 좋습니다.
버그 수정
시계 화면 초기화는 비동기식이며, 정보 표시가 시계 화면이 준비되기 전에 수신되는 경우
pendingInitialComplications
목록에 배치되고 나중에 적용됩니다. 안타깝게도pendingInitialComplications
가 너무 빨리 적용되어 시계 화면 초기화 중에 정보 표시가 여전히pendingInitialComplications
에 배치되고 무시되는 시간이 있었습니다. 이제 이 문제를 해결했습니다. 또한 이 패치는ComplicationRenderer
가 자리표시자를 비동기식으로 잘못 로드하려고 하여 컴파일 그래픽이 업데이트되지 않는 버그를 수정합니다. 마지막으로 이 패치는 여러pendingInitialComplications
를 병합해야 하는 이론적인 버그를 수정합니다. (0d03ba3)getExistingInstanceOrSetPendingWallpaperInteractiveWatchFaceInstance
에서 필요 이상으로 오래 잠금을 유지한InteractiveInstanceManager
의 잠재적 교착 상태 문제를 수정했습니다. 일반적으로engine.setUserStyle
이 빠를 것이라고 예상하지만 어떤 이유로든 빠르지 않으면 교착 상태/ANR이 발생할 수 있습니다. 이 패치를 통해 불필요한 작업을 잠금에서 삭제하여 교착 상태의 발생 가능성을 제거합니다. (5a2adca)WatchFaceService
가 유지된 몇 가지 문제를 수정했습니다. WakeLock은 때로WatchFaceService
를 유지할 수 있어release()
호출을 추가하면 문제가 해결됩니다. 또한StateFlows
는WatchFaceService
를 유지할 수 있어 기본CoroutineScopes
를 취소하면 문제가 해결됩니다. (fd48138)awaitDeferredWatchFace
*에 제한 시간을 추가하고watchfaceOverlayStyle
NullPointerException
을 수정합니다. 새로 설치한 후나 CPU 부하가 높은DirectBoot
시나리오를 포함하여 일반적인 상황에서는 시간 초과가 발생하면 안 됩니다.getWatchfaceOverlayStyle
이close()
후에 호출되는 경우 발생하는 NPE도 수정했습니다. (a4c3a5a)
버전 1.1.0
2022년 6월 15일
androidx.wear.watchface:watchface-*:1.1.0
이 출시되었습니다. 버전 1.1.0에 포함된 커밋을 확인하세요.
1.0.0 이후 중요 변경사항
편집기 개선사항:
- 편집기 UI에서 스타일의 계층 구조를 설명할 수 있도록 하는 계층 구조 스키마 지원을 추가했습니다. 이제 시계 화면과 호환 편집기에서 사용할 아이콘을 별도로 지정할 수 있습니다.
- 시계 화면의 여러 인스턴스를 선택할 수 있으며, 각 인스턴스에는 모든 API 노출 영역에서 사용할 수 있는 고유 ID가 있습니다.
- 이제 편집기에서 사용할
ComplicationSlots
에 사람이 읽을 수 있는 이름을 지정할 수 있습니다. - '버전' 스타일 지정을 실험적으로 지원합니다. 이는 호환 편집기에서 표시할 수 있는 선별된 스타일입니다.
- 이제 시계 화면의 두 인스턴스를 편집하기 위해 로드할 때 시계 화면의 인스턴스가 리소스를 공유하여 메모리를 절약할 수 있습니다.
- 이제 시계 화면 편집기에서 정보 표시를 선택할 때 현재 제공자가 미리 선택됩니다.
정보 표시 개선사항:
- 이제 기본 데이터 소스와 보조 데이터 소스의
ComplicationType
을 지정할 수 있으며, 이를 통해 개발자에게 더 유연한 환경을 즉시 제공할 수 있습니다. - 시계 화면에 전달될 시간 제한형 데이터 시퀀스를 제공하는
ComplicationDataTimeline
을 추가했습니다. 이 시퀀스는 자동으로 캐시되고 업데이트될 수 있습니다. 예를 들면 수차례에 걸쳐 표시되는 오늘의 일기예보 또는 예정된 여러 캘린더 일정 등이 있습니다. - 정보 표시 제공자의
ComponentName
은ComplicationData
의 일부입니다. - 이제 시계 화면 간에 전환할 때 정보 표시가 캐시되어 더 나은 환경을 제공합니다.
기타 변경사항:
- 이제
UserStyleSchema
및ComplicationSlots
를 XML로 정의할 수 있습니다. 이에 따라 시계 화면 구성이 간소화되며 시스템에서 메타데이터 쿼리를 더 빠르게 실행할 수 있습니다. - 이제 시계 화면이 시스템 오버레이를 렌더링하는 데 사용되는 색상에 영향을 미칠 수 있습니다.
버전 1.1.0-rc01
2022년 5월 18일
androidx.wear.watchface:watchface-*:1.1.0-rc01
이 출시되었습니다. 버전 1.1.0-rc01에 포함된 커밋을 확인하세요.
새로운 기능
- 시계 화면 XML 지원에 관해 몇 가지 사용성을 조정하여
ComplicationSlotBounds
와 지원 참조를 더 쉽게 지정할 수 있도록 했습니다. 가장자리 정보 표시BoundingArc
를 사용하여drawHighlight
를 통해 연결하는 실험은 계속됩니다. 그러나 이 방법의 사용은 권장하지 않습니다.
API 변경사항
BoundingArc
매개변수를 수락하는 실험용 오버로드drawHighlight
를 추가했습니다. (I705f8)- 이제 시계 화면 XML에서 리소스 참조를 지원합니다. XML과 코드 모두에 동일한 상수를 사용할 수 있습니다. (I3ef61)
center_x
,center_y
,size_x
,size_y
양식에ComplicationSlotBounds
를 정의하는 기능이 추가되었습니다. 이제 리소스 참조를 통해 다른 단위(예: dp)를 사용할 수도 있습니다. (Iace98)
버그 수정
- 잘못된 컨텍스트에서 작업을 실행하던
runBlockingWithTracing
을 수정했습니다. (4f595fe) BaseEditorSession.close
를 동기식으로 만들었습니다. 비동기BaseEditorSession.close
의 문제는ComplicationDataSourceInfoRetriever
가 너무 늦게 해제되어 logcat에서 경고 스팸이 발생한다는 것입니다. 이로 인해 문제가 발생하지는 않았겠지만, Logcat 스팸은 방해가 되므로 피해야 합니다. (35a5308)
버전 1.1.0-beta02
2022년 5월 11일
androidx.wear.watchface:watchface-*:1.1.0-beta02
가 출시되었습니다. 버전 1.1.0-beta02에 포함된 커밋을 확인하세요.
새로운 기능
- 새로운
ComplicationData
유형을 위한 실험적 지원 기능을 추가했습니다. 아직 사용할 준비가 되지는 않았지만, 이 기능을 확인해 보세요.
API 변경사항
- 가장자리 정보 표시 자리의 도형을 설명하는 실험용 클래스인
BoundingArc
를 추가했습니다. 이 API는ComplicationSlot
에 추가되었으며ComplicationSlotState
및WatchFaceMetadataClient
로 연결됩니다. (I61a40) UserStyleSetting
XML의 설정을 상속하는 기능을 추가했습니다. 이 기능을 사용하면 상세 출력을 줄이고 시계 화면 간에 설정을 공유할 수 있습니다. (Ief841)- 새로운
ComplicationData
의 실험 유형이 두 개 추가되었으며ListComplicationData
와ProtoLayoutComplicationData
입니다. 현재 이러한 유형에는 렌더링 지원이 없으며ComplicationDataSource's
매니페스트에 추가되었더라도 WearOS는 현재 이러한 유형을 인식하지 못합니다. (I1811c)
버그 수정
TimeLineEntry
유형의 직렬화 문제를 수정합니다. NoData 유형의 캐시된TimeLineEntries
가 존재하지 않는 필수 필드에 액세스했을 때 상위 정보 표시 유형이 NPE를 발생시키는 것으로 잘못 해석되어TimeLineEntry
유형을 직렬화하지 않았습니다. (55ffdf5)setComplicationData
가 타임라인 필드를 누락하는 버그를 수정했습니다. (fb392f5)- 드물게
runBlockingWithTracing
으로 인해 NPE가 발생하는 버그를 수정했습니다. (12ca62e) - 정보 표시를 수신할 때 가끔
ClassNotFoundException: android.support.wearable.complications.ComplicationText
가 발생하는 버그를 수정했습니다. (217942d9) EGL14.eglCreateContext
가 호출된 경우에만onBackgroundThreadGlContextCreated
를 호출하는GlesRenderer.backgroundThreadInitInternal
의 버그를 수정했습니다.verticalFlip
으로 인해 스크린샷에 시각적 결함이 발생하는 또 다른 버그를 수정했습니다. (c674ad2)- 잘못된 패키지에서 로드되고 있던
WatchFaceService
XML 버전 확인을 수정했습니다. (dfa06f3) - 이제 자리표시자 와이어 형식이 내부 번들을 사용합니다. 자리표시자가 숨겨진 내부 a.s.w.c.ComplicationData를 사용할 수도 있는 기존 시계 화면을 손상하지 않는 것이 좋습니다. 이전에는
NoDataComplication
데이터의 와이어 형식이 일반 필드에 자리표시자를 저장했습니다. (이는 기존 시계 화면이 의도하지 않은 자리표시자 문자열을 렌더링하므로 문제가 됨) 이제는 내부 번들을 사용하여 이를 완전히 격리합니다. (d5e7bd2)
버전 1.1.0-beta01
2022년 4월 20일
androidx.wear.watchface:watchface-*:1.1.0-beta01
이 출시되었습니다. 버전 1.1.0-beta01에 포함된 커밋을 확인하세요.
API 변경사항
- 이제
WatchFaceMetadataClient
메서드(getUserStyleSchema
,getComplicationSlotMetadataMap
,getUserStyleFlavors
) 및HeadlessWatchFaceClient.getUserStyleFlavors
에서WatchFaceException
대신 선택 해제된 RuntimeException이 발생합니다. (I0718a) WatchFaceMetadataClient.WatchFaceException
를 재사용할 수 있도록 클래스 밖으로 이동했습니다. (I4e869)
버그 수정
- 부분
ComplicationSlotBounds
를 전송할 때WatchFaceMetadataClient
가 더 이상 비정상 종료되지 않습니다. (Iaafd)
버전 1.1.0-alpha05
2022년 4월 6일
androidx.wear.watchface:watchface-*:1.1.0-alpha05
가 출시되었습니다. 버전 1.1.0-alpha05에 포함된 커밋을 확인하세요.
새로운 기능
- 이제
ComplicationData.dataSource
를 검사하여ComplicationData
를 전송한 데이터 소스를 확인할 수 있습니다. 일부 시계 화면에서는 이를 사용해 정보 표시 화면을 맞춤설정할 수 있습니다. (I44a73)
API 변경사항
Renderer.CanvasRenderer
및Renderer.GlesRenderer
를 지원 중단했으며, 렌더링 메서드로 전달되는SharedAssets
를 지원하는Renderer.CanvasRenderer2
및Renderer.GlesRenderer2
로 대체했습니다. 자바 상호 운용성을 위해ListenableCanvasRenderer2
및ListenableGlesRenderer2
를 도입했습니다. (I31ffa)@WatchFaceFlavorsExperimental
의 버전 정의 기능을 추가했습니다. 스타일이 지정된 시계 화면 목록이 사전 구성됩니다. (I04dd0)Renderer.sharedAssets
는 이제 StateFlow며, 사용되지 않는Renderer.SharedAssetsFactory
를 삭제했습니다. (I12ac5)UserStyleSchema.userStyleSettings
가 더 이상 지원 중단되지 않습니다. (Iba7e3)- 다이제스트 해시를 계산하기 전에
HeadlessWatchFaceClient
가 AIDL을 통해 스키마를 전달하는 상대적으로 낮은 오버헤드를 방지할 수 있도록HeadlessWatchFaceClient.getUserStyleSchemaDigestHash
를 추가했습니다. (I33597) WatchFaceMetadataClient
에isUserStyleSchemaStatic
을 추가했습니다. 이 메서드는 시계 화면 APK가 업데이트되지 않는 한UserStyleSchema
가 바뀌지 않는다는 점이 확실한 경우에만 true입니다. (I45a3f)getDigestHash
를 스키마의 다이제스트 해시를 계산하는UserStyleSchema
에 추가했습니다. 이를 사용하여UserStyleSchema
가 변경되었는지 효율적으로 판단할 수 있습니다. (I2063d)METADATA_KEY_DATA_SOURCE_DEFAULT_CONFIGURATION_SUPPORTED
의 이름을METADATA_KEY_DATA_SOURCE_DEFAULT_CONFIG_SUPPORTED
로 변경했습니다. (I9ba5d)UserStyleSetting.OnWatchEditorData
의 이름을UserStyleSetting.WatchFaceEditorData
로 변경했으며 시계 화면 편집기에서만 사용되는 데이터가 포함되어 있습니다. (If3afb)
버전 1.1.0-alpha04
2022년 3월 9일
androidx.wear.watchface:watchface-*:1.1.0-alpha04
가 출시되었습니다. 버전 1.1.0-alpha04에 포함된 커밋을 확인하세요.
API 변경사항
- 최신
ComplicationData
를 경우에 따라(예: 캐시된 ComplicationData 만료) 사용할 수 없습니다. 따라서NoDataComplication
을 선택적 자리표시자 ComplicationData로 확장하고,NoDataComplicationData
자리표시자 컨텍스트 내에서만 사용할 수 있는ComplicationText.PLACEHOLDER
,MonochromaticImage.PLACEHOLDER
,SmallImage.PLACEHOLDER
,PhotoImage.PLACEHOLDER
를 추가했습니다. 선택한 경우 이러한 자리표시자는 회색 상자/호로 렌더링되는 것이 좋습니다. (I6285d) - 정보 표시 필드가 변경될 수 있는 참조 인스턴트 이후의 다음 인스턴트를 알려주는
ComplicationData.getNextChangeInstant
를 추가했습니다. 이는 정보 표시 업데이트 프레임을 예약하는 데 내부적으로 사용됩니다. 예를 들어 시계 화면이 보통 1분에 한 번 업데이트되는 경우 스톱워치 정보 표시를 설정하면 1초에 한 번 업데이트됩니다. (I7ceb2) - 이제 모든 API 수준에서
EditorSession.watchFaceId
를 사용할 수 있습니다. 또한 그 값은 이제 항상WatchState.watchFaceInstanceId
와 일치합니다. (I323b9) - 프레임워크에서 근본적인 문제가 해결되었으므로
getPendingIntentForTouchEvent
API가 더 이상 필요하지 않습니다. 따라서 모든 관련 API를 삭제했습니다. 홈 버튼을 최근에 눌렀어도 시계 화면은PendingIntents
실행을 위해 특별한 작업을 하지 않아도 됩니다. (I1f2e8) RendererParameters.isForScreenShot
을 추가했으며 이는 렌더링이 스크린샷용인 경우 true입니다. 애니메이션이 포함된 일부 시계 화면은 최상의 결과를 보장하기 위해 조정하려면 이를 인식해야 합니다. (I96d99)- 문제에 관한 설명을 위해
WatchFaceExceptionReason
을WatchFaceException
에 추가했습니다. (I01d15) ComplicationDataSourceService.onImmediateComplicationRequest
를 삭제하고 대신 제공자가 신속하게 응답(100ms 내에 응답)해야 함을 알리기 위해ComplicationRequest.immediateResponseRequired
를 추가했습니다. 이 기능은 권한이 있는com.google.android.wearable.permission.USE_IMMEDIATE_COMPLICATION_UPDATE
권한으로 보호됩니다. (Ie6b23)- Tiramisu DP2와 일치하도록 코어 및 appcompat의 null 허용 여부를 업데이트했습니다. (I0cbb7)
버그 수정
- 이제 스키마 유효성 검사에 실패할 경우 예외와 함께 시계 화면 앱이 비정상 종료됩니다. (Ia400f)
버전 1.1.0-alpha03
2022년 2월 9일
androidx.wear.watchface:watchface-*:1.1.0-alpha03
이 출시되었습니다. 버전 1.1.0-alpha03에 포함된 커밋을 확인하세요.
API 변경사항
- 계층적 스타일 스키마의 실험용 지원을 추가했습니다. 처음에
ListOption
에서만 사용되는 childSettings인androidx.wear.watchface.style.UserStyleSetting.Option
에 새 속성을 추가했습니다. 이렇게 하면 편집기 UI에서 사용할 스타일의 계층 구조를 설명할 수 있습니다. 기본 UserStyle은 변경되지 않으므로 여전히Map<String, ByteArray>
입니다. (Iaf6f4) - 시계 화면에서 시스템 상태 오버레이의 렌더링을 구성할 수 있는
WatchFace.OverlayStyle
을 추가했습니다. (I8520d) CanvasRenderer
의 새로운 선택적 생성자 매개변수clearWithBackgroundTintBeforeRenderingHighlightLayer
를 도입했습니다. 기본값은 false입니다. true로 설정하면 배경 색조 색상으로 캔버스가 지워집니다. (Ie01e5)- 정보 표시 데이터 소스가 구성 없이 기본값을 제공할 수 있음을 나타내는
androidx.watchface.complications.datasource.DEFAULT_CONFIGURATION_SUPPORTED
메타데이터 키를 추가했습니다. (Icc0d4) - 시계 화면을 수정할 때 일반적으로는 대화형 인스턴스와 헤드리스 인스턴스가 모두 있습니다. 메모리를 절약하기 위해 시계 화면 렌더기가 변경할 수 없는 데이터(예: 텍스처, 셰이더)를 인스턴스 간에 공유할 수 있도록
Renderer.SharedAssets
를 도입했습니다.GlesRenderer.setEglConfig
및GlesRenderer.setEglDisplay
는 지원 중단되었습니다. 이러한 메서드는 설정 가능하게 만들어진 것이 아니며 설정하면 정의되지 않은 동작이 발생할 수 있습니다. (I0d9e7) - 문자열 리소스를 참조하는
setNameResourceId
및setScreenReaderNameResourceId
를ComplicationSlot.Builder
및androidx.wear.watchface.client.ComplicationSlotState
의 상응하는 getter에 추가했습니다. 이렇게 하면 시스템이 편집기와 스크린 리더에서 사용할 ComplicationSlot의 이름을 가져올 수 있습니다. (If6c6a) - 이제
WatchfaceMetadataClient.getUserStyleSchema
및getComplicationSlotMetadataMap
이RemoteException
대신WatchFaceException
을 발생시킵니다. (I86f11) onSynchronousComplicationRequest
및ComplicationDataSourceService
의 관련 함수 이름이onImmediateComplicationRequest
등으로 변경되었습니다. (I87ba0)- 시계 화면 편집기는 컴패니언 편집기보다 화면 영역이 훨씬 작기 때문에 시계 화면 편집기에 다양한 아이콘을 지원하는 것이 좋습니다. 이 패치는 모든 UserStyleSettings 및 적절한 경우 그 Option 클래스에
OnWatchEditorData
(현재 아이콘만 포함됨)를 추가합니다. (If1886) - 자바 상호 운용성을 향상하기 위해 ListenableGlesRenderer의 생성자에
@JvmOverloads
를 추가했습니다. (I2974a)
버그 수정
- 이제
ListenableGlesRenderer
의 생성자가@Throws(GlesException::class)
로 올바르게 표시되고 자바에서 이 클래스를 확장할 수 있습니다. (Iac6d0) PhotoImageComplicationData
TapAction이 올바르게 처리되지 않는 버그를 수정했습니다. (I1cc30)
버전 1.1.0-alpha02
2022년 1월 12일
androidx.wear.watchface:watchface-*:1.1.0-alpha02
가 출시되었습니다. 버전 1.1.0-alpha02에 포함된 커밋을 확인하세요.
새로운 기능
- 디버깅 및 테스트 작업을 더 쉽게 진행하도록
ComplicationData
및 관련 서브클래스에 해시코드, 등호, toString 메서드를 재정의했습니다.
API 변경사항
WatchfaceMetadataClient
메서드가 적절한 상황에서RemoteExceptions
를 다시 발생시키므로 클라이언트 코드가 시계 화면의 오류를 더 쉽게 포착할 수 있습니다. (I78785)- 이제
ComplicationData
와 서브클래스에 해시코드, 등호, toString이 포함됩니다. (I24bc6)
버전 1.1.0-alpha01
2021년 12월 15일
androidx.wear.watchface:watchface-*:1.1.0-alpha01
이 출시되었습니다. 버전 1.1.0-alpha01에 포함된 커밋을 확인하세요.
새로운 기능
이제
UserStyleSchema
및ComplicationSlots
를 XML로 정의할 수 있습니다. 이에 따라 시계 화면 구성이 간소화됩니다. 또한WatchFaceMetadataClient
쿼리는 메타데이터를 가져오기 위해 서비스에 바인딩할 필요가 없기 때문에 더 빠르게 처리됩니다.WatchFaceMetadataClient
와ListenableWatchFaceMetadataClient
는 더 이상 실험용이 아니며 안정적인 API에 포함됩니다. 시스템은 선택적으로 여러 시계 화면 인스턴스를 지원할 수 있으며, 인스턴스마다 각각의 사용자 정의 스타일 지정 옵션이 있습니다. 이 옵션은 시계 화면 선택 도구에 표시됩니다. 옵션을 사용하려면 시계 화면에서 매니페스트에 다음과 같은 메타데이터 태그를 포함해야 합니다.<meta-data android:name="androidx.wear.watchface.MULTIPLE_INSTANCES_ALLOWED" android:value="true" />
일부 시계 화면의 경우 시계 화면 인스턴트와 여러 인스턴스를 지원하기 위해
UserStyle
에 지정되지 않은 상태를 포함하며, 이제WatchState.watchFaceInstanceId
를 통해 시계 화면의 인스턴스 ID를 사용할 수 있습니다.이제 정보 표시가 로드되는 즉시 나타나도록
ComplicationData
가 캐시됩니다.ComplicationData
는 시스템에서 메모리에 캐시되고 시계 화면 라이브러리에 의해 직렬화되는 경우가 있습니다. 직렬화되는 경우 관련 tapAction이 모두 손실되며 이때ComplicationData.tapActionLostDueToSerialization
이true
를 반환하고 시계 화면이 탭할 수 없음을 알리기 위해 정보 표시를 다르게 렌더링합니다. (예: 비활성화하거나 반투명 처리함) 시스템에서tapAction
과 함께 업데이트된ComplicationData
를 최대한 빨리 전송합니다.일부
ComplicationData
는 캐시하면 안 되는 기간이 길며, 이를 지원하기 위해 더 일반적인 기능인ComplicationDataTimeline
을 추가했습니다. 이를 통해 시계 화면에 전달되어 자동으로 캐시 및 업데이트되는 시간 제한형ComplicationData
시퀀스를 제공할 수 있습니다. 예를 들면 수차례에 걸쳐 표시되는 오늘의 일기예보 또는 예정된 여러 캘린더 일정 등이 있습니다. 이 데이터를 반환하는 데 사용할 수 있는 새로운onComplicationDataTimeline
메서드로ComplicationRequestListener
가 확장되었습니다.DefaultComplicationDataSourcePolicy
가 확장되었으므로 기본 및 보조 데이터 소스의ComplicationType
을 지정할 수 있습니다.시계 화면이 표시되어 있고 대기 모드가 아닐 때 정보 표시 업데이트 빈도가 일반 수준보다 더 잦은(최대 초당 1회) 동기식 정보 표시 제공자 지원을 추가했습니다. 참고: 동기식 정보 표시 제공자는 메모리 부담 문제로 인해 사용이 제한될 수 있습니다.
PendingIntentTapListener
가 변경되기 전으로 되돌려질 가능성이 큽니다. 홈 버튼을 누른 후 5초 동안 시계 화면이 활동을 시작할 수 없는 프레임워크 내 근본적인 문제를 해결했기 때문입니다.
API 변경사항
ComplicationData.isCached
를tapActionLostDueToSerialization
으로 변경했습니다. 탭할 수 없음을 알리기 위해 정보 표시 자리를 다르게 렌더링해야 하는지를 판단할 때 더 유용합니다. (I6de2f)wear-complication-data-source
에ComplicationDataTimeline
을 추가했습니다. 이를 통해 시계 화면에 전달되어 자동으로 캐시 및 업데이트되는 시간 제한형ComplicationData
시퀀스를 제공할 수 있습니다. 예를 들면 수차례에 걸쳐 표시되는 오늘의 일기예보 또는 예정된 여러 캘린더 일정 등이 있습니다. 이 데이터를 반환하는 데 사용할 수 있는 새로운onComplicationDataTimeline
메서드로ComplicationRequestListener
가 확장되었습니다. 데이터 소스 서비스를 정지시키는 새로운 Kotlin 래퍼SuspendingTimelineComplicationDataSourceService
가 있습니다. (Idecdc)PendingIntentTapListener
및WatchFaceControlClient.getPendingIntentForTouchEvent
를 추가했습니다. 이는 프레임워크로 인해 홈 버튼을 누른 후 5초 동안 새 활동이 시작되지 않는 문제를 해결하기 위해 탭에 응답하여 인텐트를 시작해야 하는 시계 화면에 유용할 수 있습니다. (I98074)- 시계 화면별
ComplicationData
캐시를 도입했습니다. 이 캐시의 목적은 시스템에서 정보 표시의 데이터 값을 업데이트할 수 있을 때까지 시계 화면이 로드된 마지막 데이터 값을 표시하기 위함입니다. OEM을 위한 새로운 API 메서드인WatchFaceControlClient.hasComplicationCache
가 제공됩니다. 이 메서드는 시계 화면에 정보 표시를 전송하는 시스템의 전략에 영향을 줄 수 있습니다.ComplicationData
에는isCached
속성도 있습니다. 또한tapAction
은 캐시할 수 없고 캐시된 정보 표시에서null
이 되므로 캐시된 정보 표시를 다르게 렌더링하는 것이 좋습니다. (I404b0) - 이제
WatchState.watchFaceInstanceId
를 통해 시계 화면의 인스턴스 ID를 사용할 수 있습니다. 이 메서드는 대부분의 시계 화면에서 사용할 필요가 없지만, 스키마에 저장되지 않은 시계 화면별 상태가 있는 경우 시계 화면 인스턴스를 식별하는 데 사용할 키가 됩니다. 이제WatchFaceControlClient.createHeadlessWatchFaceClient
를 호출할 때 ID를 제공하여 이 작업을 지원할 수 있습니다. (I1ff98) - 기본/보조 제공자 및 대체 시스템 제공자를 대상으로 기본
ComplicationTypes
를 설정하는 기능을 포함하여DefaultComplicationDataSourcePolicy
를 확장했습니다. 이제ComplicationSlot.defaultDataSourceType
이 지원 중단됩니다. (If0ce3) - 이제
ComplicationSlot.configExtras
는 변경 가능하며EditorSession.openComplicationDataSourceChooser()
호출 전에 업데이트할 수 있습니다. (I6f852) WatchFace.setComplicationDeniedDialogIntent
및setComplicationRationaleDialogIntent
를 추가했습니다. 이러한 인텐트는 정보 표시 권한을 요청하기 전에 근거 대화상자를 표시하고, 정보 표시 권한이 거부되었을 때 정보 표시를 수정하려면 정보 표시 권한이 필요함을 설명하는 또 다른 대화상자(제공자 선택기가 열리지 않으므로 대화상자가 필요함)를 표시하기 위해 시작됩니다. (I3a29c)- 이제
UserStyleSchema
및ComplicationSlots
를 XML로 정의할 수 있습니다. 이에 따라 시계 화면 구성이 간소화되며WatchFaceMetadataClient
쿼리는 메타데이터를 가져오기 위해 서비스에 바인딩될 필요가 없기 때문에 더 빠르게 처리됩니다. (I85bfa) - 클라이언트가 시계 화면이
getPendingIntentForTouchEvent
를 지원하는지 확인할 수 있도록InteractiveWatchFaceClient.supportsPendingIntentForTouchEvent
를 추가했습니다. (I0b917) WatchFaceMetadataClient
및ListenableWatchFaceMetadataClient
는 더 이상 실험용이 아닙니다. 가능한 경우 시계 화면 바인더를 열지 않고도 시계 화면 메타데이터를 효율적으로 가져오는 데 사용할 수 있습니다. (Ibb827)- 시계 화면이 표시되어 있고 대기 모드가 아닐 때 정보 표시 업데이트 빈도가 일반 수준보다 더 잦은(최대 초당 1회) 동기식 정보 표시 제공자 지원을 추가했습니다. 이 기능을 사용하려면 제공자가 매니페스트에 새
androidx.wear.watchface.complications.data.source.SYNCHRONOUS_UPDATE_PERIOD_SECONDS
메타데이터 태그를 포함하고onSynchronousComplicationRequest
를 재정의해야 합니다. 데이터 소스의 특성에 따라 정보 표시의 대화형 모드가 시작될 때와 종료될 때 알림을 받도록onStartSynchronousComplicationRequests
및onStopInteractiveComplicationRequests
를 재정의해야 할 수도 있습니다. (I8fe9d)
버전 1.0
버전 1.0.1
2022년 2월 9일
androidx.wear.watchface:watchface-*:1.0.1
이 출시되었습니다. 버전 1.0.1에 포함된 커밋을 확인하세요.
버그 수정
PhotoImageComplicationData
TapAction이 올바르게 처리되지 않는 버그를 수정했습니다. (I1cc30)
버전 1.0.0
2021년 12월 1일
androidx.wear.watchface:watchface-*:1.0.0
이 출시되었습니다. 버전 1.0.0에 포함된 커밋을 확인하세요.
1.0.0의 주요 기능
androidx.wear.watchface
패키지는 WearOS 시계 화면 개발에 권장되는 새로운 라이브러리입니다. 기존 웨어러블 지원 라이브러리에 비해 여러 새로운 기능이 있습니다.
- 라이브러리에서 바로 사용자 스타일(예: 색상 팔레트, 시계 침 스타일, 시간 표시 모양 등의 변경)을 지정할 수 있습니다. (
androidx.wear.watchface.style
참고) 이제 androidx.wear.watchface.editor를 사용하여 시계 화면 편집기를 훨씬 더 쉽게 개발하고, 추가 코드를 작성할 필요 없이 시스템 호환 앱에서 시계 화면을 수정할 수 있습니다. - 권장사항이 통합되었습니다. 새로운 라이브러리는 정보 표시와 관련된 스크린 리더 콘텐츠 라벨을 자동으로 생성하며, 개발자가 나만의 라벨을 추가할 수도 있습니다. 배터리가 부족하고 충전 중이 아닐 때 프레임 속도가 자동으로 줄어들어 배터리 수명이 개선됩니다.
- 특히 많은 상용구 코드가 라이브러리로 이전된 정보 표시의 경우 시계 화면을 개발하는 데 필요한 코드가 줄어듭니다.
버그 수정
EditorSession.userStyle.compareAndSet
수정 (I6f676)- 매우 짧은 시계 화면 지연 문제 해결 (Iffb97)
- UI 스레드에서
InteractiveWatchFaceImpl.onDestroy
전송 (I83340) - broadcast receiver의 몇 가지 문제 해결 (I7d25f)
버전 1.0.0-rc01
2021년 11월 3일
androidx.wear.watchface:watchface-*:1.0.0-rc01
이 출시되었습니다. 버전 1.0.0-rc01에 포함된 커밋을 확인하세요.
버그 수정
흐름 이전으로 인해 중단되는 dump()(adb 셸 dumpsys가 호출함) 문제를 해결했습니다. (087cf9e)
writeDirectBootPrefs의 올바른 순서를 확인합니다. writeDirectBootPrefs가 항상 initStyleAndComplications 이후에 실행되도록 합니다. 그러지 않으면 UI 스레드 초기화가 지연될 위험이 있습니다. (37650ac)
Renderer.onDestroy가 호출되었는지 확인합니다. 렌더기가 생성되었지만 WF init가 완료되지 않고 Engine.onDestroy가 호출되는 시나리오에서는 Renderer.onDestroy를 호출해야 합니다. (f9952dc)
isBatteryLowAndNotCharging을 최적화/수정합니다. 이 패치는 isBatteryLowAndNotCharging의 초기 설정을 이전으로 이동하여 createWatchFace와 동시에 실행할 수 있습니다. 또한 이제 ACTION_POWER_DISCONNECTED를 수신 대기합니다. (ddffd80)
InteractiveWatchFaceClientImpl.isConnectionAlive를 닫은 후 false로 설정합니다. (ab9774e)
버전 1.0.0-beta01
2021년 10월 27일
androidx.wear.watchface:watchface-*:1.0.0-beta01
이 출시되었습니다. 버전 1.0.0-beta01에 포함된 커밋을 확인하세요.
버전 1.0.0-alpha24
2021년 10월 13일
androidx.wear.watchface:watchface-*:1.0.0-alpha24
가 출시되었습니다. 버전 1.0.0-alpha24에 포함된 커밋을 확인하세요.
API 변경사항
- 패키지
androidx.wear.watchface.complications
의 클래스가 새wear:watchface:watchface-complications
프로젝트로 이동되었습니다. 따라서 이 라이브러리와wear:watchface:watchface-complications-data
의 이전 알파 버전을 포함할 수 없습니다. 중복 클래스와 관련된 오류가 발생하기 때문입니다. (I97195) - Renderer.dump가 Renderer.onDump로 이름이 바뀌었고 @UiThread로 주석이 달렸습니다. (I44845)
InteractiveWatchFaceClient.addWatchFaceReadyListener
의 이름은addOnWatchFaceReadyListener
로,removeWatchFaceReadyListener
의 이름은removeOnWatchFaceReadyListener
로 바뀌었습니다. (I48fea)- EditorSession
getComplicationsPreviewData
및getComplicationsDataSourceInfo
는 더 이상 정지 함수가 아닙니다. 대신 초기에 값이 null인StateFlow<>
속성입니다. ListenableEditorSession에서getListenableComplicationPreviewData
및getListenableComplicationsProviderInfo
는 기본 클래스에서 삭제되고 새StateFlow<>
객체로 대체되었습니다. 자바 코드의 변경사항을 수신 대기해야 하는 경우androidx.lifecycle.FlowLiveDataConversions.asLiveData
를 사용하여LiveData<>
로 변환하는 것이 좋습니다. (Ic5483)
버전 1.0.0-alpha23
2021년 9월 29일
androidx.wear.watchface:watchface-*:1.0.0-alpha23
이 출시되었습니다. 버전 1.0.0-alpha23에 포함된 커밋을 확인하세요.
새로운 기능
이제 시계 화면 라이브러리가 단일 라이브러리 그룹입니다. 따라서 라이브러리가 이동되어 gradle 가져오기를 다음과 같이 업데이트해야 합니다.
변경 전 | 신규 |
---|---|
androidx.wear:wear-complications-data |
androidx.wear.watchface:watchface-complications-data |
androidx.wear:wear-complications-data-source |
androidx.wear.watchface:watchface-complications-data-source |
androidx.wear:wear-watchface |
androidx.wear.watchface:watchface |
androidx.wear:wear-watchface-complications-rendering |
androidx.wear.watchface:watchface-complications-rendering |
androidx.wear:wear-watchface-client |
androidx.wear.watchface:watchface-client |
androidx.wear:wear-watchface-client-guava |
androidx.wear.watchface:watchface-client-guava |
androidx.wear:wear-watchface-data |
androidx.wear.watchface:watchface-data |
androidx.wear:wear-watchface-editor |
androidx.wear.watchface:watchface-editor |
androidx.wear:wear-watchface-editor-guava |
androidx.wear.watchface:watchface-editor-guava |
androidx.wear:wear-watchface-guava |
androidx.wear.watchface:watchface-guava |
androidx.wear:wear-watchface-style |
androidx.wear.watchface:watchface-style |
API 변경사항
- 별도의
androidx.wear
시계 화면 및 정보 표시 라이브러리를androidx.wear.watchface
라이브러리 그룹으로 이전합니다. (b25f3c0) - 시계 화면 편집기에서 헤드리스 편집을 지원하는지 클라이언트가 알 수 있도록 EditorRequest.canWatchFaceSupportHeadlessEditing을 추가했습니다. asop/1756809에 지원이 추가되었으므로 여기에는 일부 거짓음성이 발생합니다. 그러나 향후 모든 시계 화면의 올바른 값을 반환합니다. (ca55590)
- 이제 렌더기에 재정의하여 ABD 셸 dumpsys 활동 서비스 WatchFaceService에서 생성된 정보에 맞춤 데이터를 추가할 수 있는 dump() 메서드가 있습니다. (95235f9)
- 이제 InteractiveWatchFaceClient.addWatchFaceReadyListener에서 실행자를 먼저 지정합니다. (563ac2f)
- StateFlowCompatHelper를 삭제했습니다. 대신 asLiveData(androidx.lifecycle.asLiveData)를 사용해야 합니다. (bd35d3)
- CurrentUserStyleRepository.userStyle은 더 이상 변경할 수 없습니다. (I44889)
- WatchFaceReadyListener를 OnWatchFaceReadyListener로 이름을 바꿨습니다. (Ic12a9)
버그 수정
- InteractiveInstanceManager.deleteInstance를 사용하여 onDestroy를 호출합니다. 이는 InteractiveWatchFaceImpl이 가비지 컬렉션되도록 하는 데 필요합니다. (fce4af8, b/199485839)