โš™๏ธ Advanced Android Engineering and Emerging Technology

Wear OS App Development

A watch app isn't a shrunk phone app. Sessions last seconds, screens are round and tiny, and battery is precious. Wear OS development with Compose for Wear OS makes building for the wrist familiar, as long as you design for glances.

โœ๏ธ Yunok Tech ๐Ÿ“… Updated โฑ 3 min read ๐ŸŽฏ Intermediate
On this page
  1. Wear OS surfaces
  2. Project setup
  3. Compose for Wear OS
  4. Tiles and complications
  5. Syncing with the phone
  6. Health and fitness
  7. Battery and performance
  8. Testing
  9. Use cases
  10. Frequently asked questions
  11. Conclusion

Users interact with a watch for a few seconds at a time. The best Wear OS experiences surface information through tiles and complications, and use the full app only for short, focused tasks.

Wear OS surfaces

Wear OS surfaces by interaction time Complications on the watch face show tiny data at a glance in about a second. Tiles show a swipeable card of key information and actions in a few seconds. The app handles focused tasks lasting longer. Notifications bridge from the phone or watch. Complication~1 second Tilea few seconds Appfocused task Notificationtimely info
Design from the fastest surface outward.

Project setup

Create a Wear OS module in Android Studio (New Module โ†’ Wear OS). Use the Wear Compose libraries (Material 3 for Wear OS is recommended for new apps) and declare the watch feature:

wear/AndroidManifest.xmlXML
<uses-feature android:name="android.hardware.type.watch" />
<application>
    <!-- true = works without a phone app installed -->
    <meta-data android:name="com.google.android.wearable.standalone" android:value="true" />
</application>

Compose for Wear OS

Wear Compose provides watch-specific components: scrolling lists that scale items near the edges, time text, round-friendly buttons and rotary input support.

Wear Compose screenKotlin
@Composable
fun WorkoutList(workouts: List<Workout>, onSelect: (Workout) -> Unit) {
    val listState = rememberTransformingLazyColumnState()
    AppScaffold {
        ScreenScaffold(scrollState = listState) { contentPadding ->
            TransformingLazyColumn(state = listState, contentPadding = contentPadding) {
                item { ListHeader { Text("Workouts") } }
                items(workouts) { workout ->
                    Button(
                        onClick = { onSelect(workout) },
                        label = { Text(workout.name) },
                        modifier = Modifier.fillMaxWidth(),
                    )
                }
            }
        }
    }
}

Component names differ between Wear Compose Material and Material 3 versions (for example ScalingLazyColumn vs TransformingLazyColumn). Follow the docs for the version you use.

Tiles and complications

  • Tiles: implemented with a TileService and the ProtoLayout library. Show key data and one or two actions. Keep updates efficient.
  • Complications: provide data to watch faces through a ComplicationDataSourceService (short text, ranged value, icon and so on).

Syncing with the phone

Use the Wearable Data Layer API: DataClient for synced state, MessageClient for one-off messages, and ChannelClient for large transfers. Standalone apps can also use the network directly (Wi-Fi/LTE, or proxied through the phone).

Send a message to the phoneKotlin
suspend fun sendToPhone(context: Context, path: String, payload: ByteArray) {
    val nodes = Wearable.getNodeClient(context).connectedNodes.await()
    nodes.forEach { node ->
        Wearable.getMessageClient(context).sendMessage(node.id, path, payload).await()
    }
}

Health and fitness

Use Health Services on Wear OS for heart rate, exercise tracking and passive data. It manages sensors efficiently. Request the relevant permissions, and run exercises with the exercise client so tracking survives the app going to the background.

Battery and performance

  • Avoid keeping the screen on. Support ambient mode for ongoing activities.
  • Batch network calls, and prefer syncing via the phone.
  • Use ongoing activities for workouts, so users can return quickly.

Testing

Use round and square Wear OS emulators, test rotary input, and test on a real watch for performance and sensor behaviour. Compose previews support Wear device configurations.

Use cases

Fitness tracking

Health Services + ongoing activity + tile showing today's progress.

Quick actions

Smart home toggles or timers from a tile.

Companion data

Next calendar event or delivery status as a complication.

Frequently asked questions

Can I reuse my phone app's Compose UI?

You can share ViewModels and data layers, but UI should be designed for the watch using Wear Compose components.

Does a Wear OS app need a phone app?

No. Standalone apps are supported and recommended where possible.

Conclusion

Build for glances: complications and tiles first, then a focused app with Compose for Wear OS, the Data Layer for phone sync, Health Services for fitness, and careful battery use.

Next step: build for the car with Android Auto and Android Automotive OS.

Official references

๐Ÿ“ฑ Apps built by Yunok Tech

Real Android apps on Google Play, free to download.

See all our apps โ†’

Ready to build real Android applications?

Jetpack Compose clicks once you build real screens with real state. Practise modern Android UI development on projects that go beyond toy examples.

Move beyond theory and strengthen your Android development skills with Yunoktech's Android course. Learn core concepts, practical implementation, modern Android development techniques, and the reasoning behind building maintainable applications.

Explore the Android course and take your next step as an Android developer.

Share: LinkedIn X / Twitter WhatsApp