몇 달 전에 Google은 맞춤 Android 봇을 생성하는 앱으로 Androidify를 다시 출시했습니다. Androidify는 Gemini와 Imagen을 사용하여 셀카 사진을 재미있는 Android 봇으로 변환합니다.
하지만 Android는 여러 폼 팩터에 걸쳐 있으므로 가장 최근에 추가된 XR을 비롯한 Androidify의 재미를 Wear OS에 어떻게 가져올 수 있을지 고민했습니다.
Androidify 워치 페이스
Androidify 봇은 고도로 맞춤설정되므로 이를 보여주기에 가장 적합한 곳은 워치 페이스입니다. 워치 페이스는 가장 자주 보이는 화면일 뿐만 아니라 가장 개인적인 화면이기도 하므로 사용자가 자신의 개성을 표현할 수 있습니다.
셀카 이미지에서 생성된 맞춤 Androidify 워치 페이스
이제 Androidify는 휴대전화 앱 내에서 워치 페이스를 동적으로 생성한 후 워치로 전송할 수 있으며, 워치에서 워치 페이스로 자동 설정됩니다. 이 모든 작업은 몇 초 안에 이루어집니다.
대략적인 구성
워치 페이스 생성 및 설치를 위한 엔드 투 엔드 흐름
엔드 투 엔드 환경을 구현하려면 이 대략적인 구성 다이어그램에 표시된 대로 여러 기술을 결합해야 합니다.
먼저 사용자의 아바타가 기존 워치 페이스 형식 템플릿과 결합된 후 APK로 패키징됩니다. 이 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를 사용하고 APK를 스트리밍하는 데 ChannelClient를 사용하는 조합을 사용합니다.
워치에 워치 페이스 설치
워치 페이스가 Wear OS 기기에서 수신되면 Androidify 앱은 새로운 Watch Face Push 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용 워치 페이스 푸시 시작하기
워치 페이스 푸시는 다용도 API로, Androidify를 개선하는 데 적합할 뿐만 아니라 모든 기능을 갖춘 워치 페이스 마켓플레이스를 빌드하는 데도 적합합니다.
기존 휴대전화 앱이 있고 사용자 참여를 유도하고 만족도를 높일 방법을 찾고 계신가요?
아니면 마켓플레이스 앱을 출시하여 자체 커뮤니티와 갤러리를 만들려는 기존 워치 페이스 개발자이신가요?
다음 리소스를 살펴보세요.
- 워치 페이스 푸시
- 워치 페이스 형식 - 워치 페이스 게시와 관련된 예정된 정책 변경사항도 참고하세요.
- 워치 페이스 디자이너
- Androidify GitHub 저장소
- Androidify Play 스토어 등록정보
또한 함께 제공되는 동영상을 확인하여 Androidify를 Wear OS에 도입한 방법을 자세히 알아보세요.
워치 페이스 푸시로 여러분이 만들 멋진 결과물을 기대하겠습니다.
계속 읽기
-
제품 소식
이제 Android Emulator를 사용하여 다중 기기 상호작용을 그 어느 때보다 쉽게 테스트할 수 있습니다.
Steven Jenkins • 전문 길이: 2분
-
제품 소식
모든 개발자의 AI 워크플로와 요구사항은 고유하며 AI가 개발에 어떻게 도움이 되는지 선택할 수 있는 것이 중요합니다. 1월에 Google은 Android 스튜디오에서 AI 기능을 구동할 로컬 또는 원격 AI 모델을 선택할 수 있는 기능을 도입했습니다.
Matthew Warner • 전문 길이: 2분
-
제품 소식
이제 Android 스튜디오 Panda 3이 안정화되어 프로덕션에서 사용할 수 있습니다. 이 출시를 통해 AI 기반 워크플로를 더욱 세부적으로 제어하고 맞춤설정할 수 있으므로 고품질 Android 앱을 그 어느 때보다 쉽게 빌드할 수 있습니다.
Matt Dyor • 전문 길이: 3분
소식 받아 보기
Android 개발 관련 최신 정보를 이메일로 받아 보세요. 매주