몇 달 전 Google은 맞춤 Android 봇을 생성하는 앱으로 Androidify를 다시 출시했습니다. Androidify는 Gemini와 Imagen을 사용하여 셀카 사진을 재미있는 Android 봇으로 변환합니다.
하지만 Android가 최근에 추가된 XR을 비롯한 여러 폼 팩터에 걸쳐 있는 만큼 Androidify의 재미를 Wear OS에 어떻게 가져올 수 있을지 고민했습니다.
Androidify 워치 페이스
Androidify 봇은 고도로 맞춤설정되므로 이를 표시하기에 가장 자연스러운 곳은 워치 페이스입니다. 가장 자주 표시되는 화면일 뿐만 아니라 가장 개인적인 화면이기도 하므로 나를 표현할 수 있습니다.
셀피 이미지로 생성된 맞춤 Androidify 워치 페이스
이제 Androidify는 휴대전화 앱 내에서 워치 페이스를 동적으로 생성한 다음 워치로 전송하여 자동으로 워치 페이스로 설정할 수 있습니다. 이 모든 과정이 몇 초 만에 이루어집니다.
대략적인 구성
워치 페이스 생성 및 설치를 위한 엔드 투 엔드 플로우
엔드 투 엔드 환경을 구현하려면 이 개략적인 설계 다이어그램에 표시된 것처럼 여러 기술을 결합해야 합니다.
먼저 사용자의 아바타가 기존 워치 페이스 형식 템플릿과 결합된 후 APK로 패키징됩니다. 이것은 검증되었습니다. 그 이유는 설명될 것입니다! - 시계로 전송됩니다.
시계에서 수신되면 Wear OS 6의 일부인 새로운 워치 페이스 푸시 API를 사용하여 워치 페이스를 설치하고 활성화합니다.
자세한 내용을 살펴보겠습니다.
워치 페이스 템플릿 만들기
워치 페이스는 워치 페이스 디자이너에서 디자인된 템플릿으로 만들어집니다. Figma 내에서 직접 워치 페이스 형식 워치 페이스를 만들 수 있는 새로운 Figma 플러그인입니다.
워치 페이스 디자이너의 Androidify 워치 페이스 템플릿
이 플러그인을 사용하면 워치 페이스 형식 (WFF) 리소스를 비롯한 다양한 방식으로 워치 페이스를 내보낼 수 있습니다. 그런 다음 이를 Androidify 앱 내의 애셋으로 쉽게 통합하여 최종 워치 페이스를 동적으로 빌드할 수 있습니다.
패키징 및 검증
템플릿과 아바타가 결합되면 휴대용 애셋 컴파일러 키트 (Pack)를 사용하여 APK를 조합합니다.
Androidify에서 Pack은 휴대전화의 네이티브 라이브러리로 사용됩니다. Androidify가 Pack 라이브러리와 인터페이스하는 방법에 관한 자세한 내용은 GitHub 저장소를 참고하세요.
전송 전 마지막 단계로 워치 페이스 푸시 검사기에서 APK를 확인합니다.
이 검사기는 APK가 설치에 적합한지 확인합니다. 여기에는 APK의 콘텐츠를 확인하여 유효한 워치 페이스인지 확인하는 작업과 일부 성능 검사가 포함됩니다. 유효한 경우 검사기가 토큰을 생성합니다.
이 토큰은 워치에서 설치하는 데 필요합니다.
워치 페이스 전송 중
Wear OS의 Androidify 앱은 WearableListenerService를 사용하여 웨어러블 데이터 영역의 이벤트를 수신 대기합니다.
전화 앱은 MessageClient를 사용하여 프로세스를 설정한 다음 ChannelClient를 사용하여 APK를 스트리밍하는 방식으로 워치 페이스를 전송합니다.
시계에 워치 페이스 설치
Wear OS 기기에서 워치 페이스를 수신하면 Androidify 앱은 새로운 워치 페이스 푸시 API를 사용하여 워치 페이스를 설치합니다.
val wfpManager =
WatchFacePushManagerFactory.createWatchFacePushManager(context)
val response = wfpManager.listWatchFaces()
try {
if (response.remainingSlotCount > 0) {
wfpManager.addWatchFace(apkFd, token)
} else {
val slotId = response.installedWatchFaceDetails.first().slotId
wfpManager.updateWatchFace(slotId, apkFd, token)
}
} catch (a: WatchFacePushManager.AddWatchFaceException) {
return WatchFaceInstallError.WATCH_FACE_INSTALL_ERROR
} catch (u: WatchFacePushManager.UpdateWatchFaceException) {
return WatchFaceInstallError.WATCH_FACE_INSTALL_ERROR
}Androidify는 시나리오에 따라 addWatchFace 또는 updateWatchFace 메서드를 사용합니다. 워치 페이스 푸시는 '슬롯' 개념을 정의합니다. 즉, 특정 앱이 언제든지 설치할 수 있는 워치 페이스의 수를 정의합니다. Wear OS 6의 경우 이 값은 실제로 1입니다.
Androidify의 접근 방식은 빈 슬롯이 있는 경우 워치 페이스를 설치하고, 빈 슬롯이 없는 경우 기존 워치 페이스를 새 워치 페이스로 교체하는 것입니다.
활성 워치 페이스 설정
프로그래매틱 방식으로 워치 페이스를 설치하는 것은 좋은 방법이지만 Androidify는 워치 페이스가 활성 워치 페이스인지도 확인합니다.
워치 페이스 푸시에는 앱이 이를 실행할 수 있도록 부여해야 하는 새로운 런타임 권한이 도입되었습니다.
com.google.wear.permission.SET_PUSHED_WATCH_FACE_AS_ACTIVE
이 권한을 획득하면 wfpManager.setWatchFaceAsActive() 메서드를 호출하여 설치된 워치 페이스를 활성 워치 페이스로 설정할 수 있습니다.
하지만 Androidify가 해결해야 할 몇 가지 고려사항이 있습니다.
setWatchFaceAsActive은(는) 한 번만 사용할 수 있습니다.- 사용자가 거부한 후에는
SET_PUSHED_WATCH_FACE_AS_ACTIVE권한을 다시 요청할 수 없습니다. - Androidify가 이미 활성 워치 페이스를 제어하고 있을 수 있습니다.
자세한 내용은 Androidify가 활성 로직을 구현하는 방법을 참고하세요.
Wear OS용 워치 페이스 푸시 시작하기
워치 페이스 푸시는 Androidify를 개선하는 데도, 모든 기능을 갖춘 워치 페이스 마켓플레이스를 구축하는 데도 적합한 다목적 API입니다.
기존 휴대전화 앱이 있고 사용자의 참여도를 높이고 만족도를 높일 기회를 찾고 계신가요?
아니면 마켓플레이스 앱을 출시하여 자체 커뮤니티와 갤러리를 만들려는 기존 워치 페이스 개발자이신가요?
다음 리소스를 확인하세요.
- 워치 페이스 푸시
- 워치 페이스 형식 - 워치 페이스 게시와 관련된 예정된 정책 변경사항도 참고하세요.
- 워치 페이스 디자이너
- Androidify GitHub 저장소
- Androidify Play 스토어 등록정보
또한 첨부된 동영상을 통해 Androidify를 Wear OS에 도입한 방법을 자세히 알아보세요.
워치 페이스 푸시를 사용하여 어떤 멋진 결과물을 만들어 내실지 기대됩니다.
-
제품 소식에이전트형 개발이 가속화됨에 따라 Android 엔지니어링은 흥미로운 새로운 영역에 도달하고 있습니다. 즉, 보조 코드 완성에서 개발자의 지시에 따라 엔드 투 엔드로 실행되는 에이전트로 전환되고 있습니다. 사용하는 모델과 에이전트를 완전히 자유롭게 선택하고 유연하게 사용할 수 있습니다.
Jason Buchel • 읽는 데 3분 소요 -
제품 소식오늘 Google은 '단순한 스토어 이상의 가치'라는 비전을 다음 단계로 발전시키는 방법을 공유했습니다. 월간 활성 사용자 수가 2억 5천만 명이 넘는 개인 홈 베이스인 내 페이지 탭부터 7억 개 이상의 게이머 프로필을 연결하는 통합 게임 플랫폼에 이르기까지 Google Play는 사용자가 있는 곳이라면 어디에서나 사용자를 만나고 있습니다.
Paul Feng • 읽는 데 3분 소요 -
제품 소식Google은 Googlebook을 통해 사용자가 자신을 표현하고 이러한 도구를 이용할 수 있도록 지원하게 되어 기쁩니다.
Cyrus Stoller • 읽는 데 2분 소요
Android 개발 관련 최신 정보를 이메일로 받아 보세요.