Bringing Androidify to Wear OS with Watch Face Push

Posted by Garan Jenkin - Developer Relations Engineer






A few months ago we
relaunched Androidify as an app for generating personalized Android bots. Androidify transforms your selfie photo into a playful Android bot using Gemini and Imagen.

However, given that Android spans multiple form factors, including our most recent addition, XR, we thought, how could we bring the fun of Androidify to Wear OS?

An Androidify watch face

As Androidify bots are highly-personalized, the natural place to showcase them is the watch face. Not only is it the most frequently visible surface but also the most personal surface, allowing you to represent who you are.


Personalized Androidify watch face, generated from selfie image


Androidify now has the ability to generate a watch face dynamically within the phone app and then send it to your watch, where it will automatically be set as your watch face. All of this happens within seconds!

High-level design

End-to-end flow for watch face creation and installation

In order to achieve the end-to-end experience, a number of technologies need to be combined together, as shown in this high-level design diagram.

First of all, the user’s avatar is combined with a pre-existing Watch Face Format template, which is then packaged into an APK. This is validated - for reasons which will be explained! - and sent to the watch.

On being received by the watch, the new Watch Face Push API - part of Wear OS 6- is used to install and activate the watch face.

Let’s explore the details:

Creating the watch face templates

The watch face is created from a template, itself designed in Watch Face Designer. This is our new Figma plugin that allows you to create Watch Face Format watch faces directly within Figma.


An Androidify watch face template in Watch Face Designer


The plugin allows the watch face to be exported in a range of different ways, including as Watch Face Format (WFF) resources. These can then be easily incorporated as assets within the Androidify app, for dynamically building the finalized watch face.

Packaging and validation

Once the template and avatar have been combined, the Portable Asset Compiler Kit (Pack) is used to assemble an APK.

In Androidify, Pack is used as a native library on the phone. For more details on how Androidify interfaces with the Pack library, see the GitHub repository.

As a final step before transmission, the APK is checked by the Watch Face Push validator.

This validator checks that the APK is suitable for installation. This includes checking the contents of the APK to ensure it is a valid watch face, as well as some performance checks. If it is valid, then the validator produces a token.

This token is required by the watch for installation.

Sending the watch face

The Androidify app on Wear OS uses WearableListenerService to listen for events on the Wearable Data Layer.

The phone app transfers the watch face by using a combination of MessageClient to set up the process, then ChannelClient to stream the APK.

Installing the watch face on the watch

Once the watch face is received on the Wear OS device, the Androidify app uses the new Watch Face Push API to install the watch face:

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 uses either the addWatchFace or updateWatchFace method, depending on the scenario: Watch Face Push defines a concept of “slots” - how many watch faces a given app can have installed at any time. For Wear OS 6, this value is in fact 1.

Androidify’s approach is to install the watch face if there is a free slot, and if not, any existing watch face is swapped out for the new one.

Setting the active watch face

Installing the watch face programmatically is a great step, but Androidify seeks to ensure the watch face is also the active watch face. 

Watch Face Push introduces a new runtime permission which must be granted in order for apps to be able to achieve this:

com.google.wear.permission.SET_PUSHED_WATCH_FACE_AS_ACTIVE

Once this permission has been acquired, the wfpManager.setWatchFaceAsActive() method can be called, to set an installed watch face to being the active watch face.

However, there are a number of considerations that Androidify has to navigate:

  • setWatchFaceAsActive can only be used once.

  • SET_PUSHED_WATCH_FACE_AS_ACTIVE cannot be re-requested after being denied by the user.

  • Androidify might already be in control of the active watch face.

For more details see how Androidify implements the set active logic.

Get started with Watch Face Push for Wear OS

Watch Face Push is a versatile API, equally suited to enhancing Androidify as it is to building fully-featured watch face marketplaces.

Perhaps you have an existing phone app and are looking for opportunities to further engage and delight your users?

Or perhaps you’re an existing watch face developer looking to create your own community and gallery through releasing a marketplace app?

Take a look at these resources:

And also check out the accompanying video for a greater-depth look at how we brought Androidify to Wear OS!


We’re looking forward to what you’ll create with Watch Face Push!

Our best avatars in Google Vids yet, now powered by Veo 3.1

Earlier this year we launched AI avatars in Google Vids to streamline video creation, and today we’re excited to announce that our avatars are now powered by Veo 3.1, Google’s state-of-the-art video generation model. 

This upgrade is so powerful that in evaluations, people prefer Vids avatars five times more often than those on other platforms. Now our avatars are: 

  • More realistic and natural: Avatars deliver heightened expression, smoother lip-syncing, and steadier framing, resulting in a truly professional look.
  • Faster to create: Generate high-quality avatars faster than ever, at no additional cost.
   

Avatars help improve viewer watch time and engagement without the need for cameras or re-recording. Use avatars in scenarios like:

  1. Training videos: Upskill your workforce with guided speaking.
  2. Internal announcements: Announce updates with a consistent character.
  3. Custom support walkthroughs: Quickly make engaging walkthroughs to solve common user issues.

Vids avatar creation experience

Getting started

  • Admins: There is no admin control for this feature.
  • End users: There is no end user setting for this feature. Visit the Help Center to learn more.
Note: Workspace customers will get promotional access to higher usage limits of Veo 3.1 avatars in Vids for at least 30 days, allowing users to experiment with these features. Per-user usage limits will apply afterward; we’ll provide more information in a future update prior to any changes.

Rollout pace

Availability

Available for Google Workspace: 

  • Business Starter **, Standard and Plus 
  • Enterprise Starter **, Standard and Plus 
  • Essentials, Enterprise Essentials and Enterprise Essentials Plus 
  • Nonprofits**
  • Education Plus** and Teaching and Learning add-on**
Also available to:

  • Google AI Pro and Ultra
  • Google AI Pro for Education
**For a limited time, at least through May 31, 2026, Business Starter, Enterprise Starter, Nonprofit, Education Plus, and Teaching and Learning add-on accounts can access generative AI features in Vids. Learn about Google Vids availability

Resources

Introducing Agent Development Kit for TypeScript: Build AI Agents with the Power of a Code-First Approach

Introducing the Agent Development Kit (ADK) for TypeScript, an open-source framework for building complex, multi-agent AI systems with a code-first approach. Developers can define agent logic in TypeScript, applying traditional software development best practices (version control, testing). ADK offers end-to-end type safety, modularity, and deployment-agnostic functionality, leveraging the familiar TypeScript/JavaScript ecosystem.

Gemini 3 Flash is now available in Gemini CLI

Gemini 3 Flash is now available in Gemini CLI. It delivers Pro-grade coding performance with low latency and a lower cost, matching Gemini 3 Pro's SWE-bench Verified score of 76%. It significantly outperforms 2.5 Pro, improving auto-routing and agentic coding. It's ideal for high-frequency development tasks, handling complex code generation, large context windows (like processing 1,000 comment pull requests), and generating load-testing scripts quickly and reliably.