{"id":348327,"date":"2025-09-21T16:20:33","date_gmt":"2025-09-21T21:20:33","guid":{"rendered":"https:\/\/michigandigitalnews.com\/index.php\/2025\/09\/21\/android-developers-blog-migrating-to-the-watch-face-format\/"},"modified":"2025-09-21T16:20:33","modified_gmt":"2025-09-21T21:20:33","slug":"android-developers-blog-migrating-to-the-watch-face-format","status":"publish","type":"post","link":"https:\/\/michigandigitalnews.com\/index.php\/2025\/09\/21\/android-developers-blog-migrating-to-the-watch-face-format\/","title":{"rendered":"Android Developers Blog: Migrating to the Watch Face Format"},"content":{"rendered":"<p> [ad_1]<br \/>\n<\/p>\n<div>\n<meta name=\"twitter:image\" content=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgZtpSnWUwSbKjDIHbWgDGYxlZ90x2RognvQni0JP9oPLwJy2tB0RT1mOMGwyTc5w_PylCrvhcdEQpukA0EAHwSUFCaM1HAPqpFU0vqYSoo_HXqJVkjmThDwhZ3ld-uuZFwlyx9H0UCJ7P75jUCN5yICnyJSz6fNDE0yvaFVKHEtbDPnh8ec3qQ8eKXo6Y\/s1600\/Amoledwatchfaces_Banner.png\"\/><br \/>\n<img decoding=\"async\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgZtpSnWUwSbKjDIHbWgDGYxlZ90x2RognvQni0JP9oPLwJy2tB0RT1mOMGwyTc5w_PylCrvhcdEQpukA0EAHwSUFCaM1HAPqpFU0vqYSoo_HXqJVkjmThDwhZ3ld-uuZFwlyx9H0UCJ7P75jUCN5yICnyJSz6fNDE0yvaFVKHEtbDPnh8ec3qQ8eKXo6Y\/s1600\/Amoledwatchfaces_Banner.png\" style=\"display:none\"\/><\/p>\n<p><em>Posted by Garan Jenkin \u2013 Developer Relations Engineer<\/em><\/p>\n<p><a href=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgZtpSnWUwSbKjDIHbWgDGYxlZ90x2RognvQni0JP9oPLwJy2tB0RT1mOMGwyTc5w_PylCrvhcdEQpukA0EAHwSUFCaM1HAPqpFU0vqYSoo_HXqJVkjmThDwhZ3ld-uuZFwlyx9H0UCJ7P75jUCN5yICnyJSz6fNDE0yvaFVKHEtbDPnh8ec3qQ8eKXo6Y\/s1600\/Amoledwatchfaces_Banner.png\" imageanchor=\"1\"><img decoding=\"async\" border=\"0\" data-original-height=\"800\" data-original-width=\"100%\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEgZtpSnWUwSbKjDIHbWgDGYxlZ90x2RognvQni0JP9oPLwJy2tB0RT1mOMGwyTc5w_PylCrvhcdEQpukA0EAHwSUFCaM1HAPqpFU0vqYSoo_HXqJVkjmThDwhZ3ld-uuZFwlyx9H0UCJ7P75jUCN5yICnyJSz6fNDE0yvaFVKHEtbDPnh8ec3qQ8eKXo6Y\/s1600\/Amoledwatchfaces_Banner.png\" style=\"100%\"\/><\/a><\/p>\n<blockquote><p><i>This post is part of <a href=\"https:\/\/android-developers.googleblog.com\/2025\/08\/spotlight-week-wear-os.html\" target=\"_blank\" rel=\"noopener\">Wear OS Spotlight Week<\/a>. Today, we\u2019re exploring how Amoledwatchfaces successfully migrated to Watch Face Format, improving customization, extending battery life, and increasing development speed.<\/i><\/p><\/blockquote>\n<p><i><a href=\"https:\/\/amoledwatchfaces.com\/\" target=\"_blank\" rel=\"noopener\">Amoledwatchfaces<\/a> is a leading creator of watch faces for Wear OS using the <a href=\"https:\/\/developer.android.com\/training\/wearables\/wff\" target=\"_blank\" rel=\"noopener\">Watch Face Format<\/a> (WFF), known for a distinctive information-rich and crisp style. Now well-established on the platform with over 190 watch faces, we talked to Tom\u00e1\u0161 Marcin\u010din, owner of Amoledwatchfaces about their successful migration using the format, and the benefits he\u2019s seen in development velocity and performance as a result.<\/i><\/p>\n<h2><span style=\"font-size: x-large;\">Creating high-quality watch faces without complex code<\/span><\/h2>\n<p>In previous years, developing watch faces \u201ctook a lot of time,\u201d says Tom\u00e1\u0161 Marcin\u010din, owner of Amoledwatchfaces. The AndroidX libraries allowed developers to create watch faces, but Tom\u00e1\u0161, like others, was left looking for an \u201ceasier way to create watch faces,\u201d and crucially one that shifted the focus from coding and onto design.<\/p>\n<p><i>\u201cMy main motivation was to bring users watch faces that are of the same quality as those that are pre-installed. Users were looking for designs that were not too complicated, yet customizable and looked as if they had been designed for that watch.\u201d<\/i><\/p>\n<h2><span style=\"font-size: x-large;\">Expressing interest in a customized experience<\/span><\/h2>\n<p>Like many creators, Tom\u00e1\u0161 started using <a href=\"https:\/\/developer.samsung.com\/watch-face-studio\/overview.html\" target=\"_blank\" rel=\"noopener\">Watch Face Studio<\/a>, Samsung\u2019s watch face creation tool, giving designers and developers an easy way to build watch faces for Wear OS quickly.<\/p>\n<p>While successful, as a developer, he found himself wanting more control, and a solution that was somewhere in between Watch Face Studio and full code &#8211; this led him to working directly with the format.<\/p>\n<p><image><\/p>\n<div style=\"text-align: center;\"><img decoding=\"async\" alt=\"Stealth and Apex 2.0 watch faces from Amoledwatchfaces\" border=\"0\" id=\"imgCaption\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEiUpi95gKZf7tLdf1RKQs1kSdOpPDJUz5iJ-wgBJz4DpIF9HA9mAkShoDzrslMdPwJGZgVIwvbJlCQ4mnL9JxRjmhThVyBlxE49mET4Y3_hC5bJDdidogt_3QZ28W8Td1eJPkAp021U6MoOJSTr2UIIpFl0tPtygyUal4YEumnux-_s0OnBzEyXw5WTVPI\/s1600\/stealth-watch-face-apex-2-0-watch-face-amoledwatchface.png\" width=\"80%\"\/><\/div>\n<p><imgcaption><center><em><a href=\"https:\/\/play.google.com\/store\/apps\/details?id=com.amoledwatchfaces.stealth\" target=\"_blank\" rel=\"noopener\">Stealth<\/a> and <a href=\"https:\/\/play.google.com\/store\/apps\/details?id=com.amoledwatchfaces.apex2\" target=\"_blank\" rel=\"noopener\">Apex 2.0<\/a> watch faces from Amoledwatchfaces<\/em><\/center><\/imgcaption><\/image><\/p>\n<h2><span style=\"font-size: x-large;\">Migrating to Watch Face Format<\/span><\/h2>\n<p>Amoledwatchfaces already had a significant back catalog of watch faces, and took on the dual task of both converting all his existing watch faces and producing new ones directly in the format. <i>\u201cI wanted to have every old and new watch face design in WFF.\u201d<\/i> This would ensure that all Amoledwatchfaces\u2019 watch faces would be available to current and future users.<\/p>\n<p>Tom\u00e1\u0161 started working directly in Android Studio, gradually refining his build process. Android Studio has recently added support for syntax validation &#8211; a feature Tom\u00e1\u0161 fed directly into and helped test as an early adopter.<\/p>\n<p>Once up and running, Tom\u00e1\u0161 found that some of the most time-consuming tasks of AndroidX were extremely simple in the format. Notably, adding the level of user customization he &#8211; and users &#8211; wanted \u201c<i>is very easy.<\/i>\u201d<\/p>\n<p>As an example, some of Amoledwatchfaces\u2019 users wanted different <i>Always-On Display<\/i> (AOD) styles &#8211; some preferred a dimmed view of the active state, whereas others wanted only the digital clock. Using <span style=\"color: #0d904f ;font-family: courier;\">Variant<\/span>, and configuration options such as <span style=\"color: #0d904f ;font-family: courier;\">ListConfiguration<\/span> and <span style=\"color: #0d904f ;font-family: courier;\">BooleanConfiguration<\/span>, it was straightforward for Tom\u00e1\u0161 to give users the ability to customize their watch face &#8211; something which would have required a significant investment using legacy libraries.<\/p>\n<p><!-- Kotlin --><\/p>\n<div style=\"background: #f8f8f8; overflow:auto;width:auto;border:0;\">\n<pre style=\"margin: 0; line-height: 125%;\"><span\/><span style=\"color: #666\">&lt;<\/span>Variant<span style=\"color: #BBB\"> <\/span>mode<span style=\"color: #666\">=<\/span><span style=\"color: #BA2121\">\"AMBIENT\"<\/span><span style=\"color: #BBB\"> <\/span>target<span style=\"color: #666\">=<\/span><span style=\"color: #BA2121\">\"alpha\"<\/span><span style=\"color: #BBB\"> <\/span>value<span style=\"color: #666\">=<\/span><span style=\"color: #BA2121\">\"[CONFIGURATION.aod] == 0<\/span>\n<span style=\"color: #BA2121\">    ? 255 : [CONFIGURATION.aod] == 1 ? 165 : 0\"<\/span><span style=\"color: #BBB\"> <\/span><span style=\"color: #666\">\/&gt;<\/span>\n<\/pre>\n<\/div>\n<p><imgcaption><center><em>Customization of the ambient behavior: Using a <span style=\"color: #0d904f ;font-family: courier;\">ListConfiguration<\/span> to select between full opacity (255), a middle ground (165) or invisible (0), for a particular component<\/em><\/center><\/imgcaption><\/p>\n<h2><span style=\"font-size: x-large;\">Overcoming Watch Faces quality and versioning challenges<\/span><\/h2>\n<p>To shorten the debug cycle and minimize errors, Tom\u00e1\u0161 uses the <a href=\"https:\/\/github.com\/google\/watchface\/tree\/main\/third_party\/wff\" target=\"_blank\" rel=\"noopener\">WFF validator<\/a> and <a href=\"https:\/\/github.com\/google\/watchface\/tree\/main\/play-validations\" target=\"_blank\" rel=\"noopener\">memory footprint<\/a> tools in his Gradle scripts. He also incorporates tools such as <a href=\"https:\/\/pngquant.org\/\" target=\"_blank\" rel=\"noopener\">PNGQuant<\/a> into his Gradle builds so that resource usage remains optimized.<\/p>\n<p>However, the biggest challenge is creating different versions of the watch face for the different format versions that devices support. To help solve this issue, Tom\u00e1\u0161 took advantage of <a href=\"https:\/\/developer.android.com\/build\/build-variants#product-flavors\" target=\"_blank\" rel=\"noopener\">product flavors<\/a>, which let him define a different build configuration for each version. This way, he was able to support the widest range of users while still using the latest and greatest format features on the most recent devices:<\/p>\n<p><!-- Kotlin --><\/p>\n<div style=\"background: #f8f8f8; overflow:auto;width:auto;border:0;\">\n<pre style=\"margin: 0; line-height: 125%;\"><span\/><span style=\"color: #3D7B7B; font-style: italic\">\/** Set up flavors for different format versions **\/<\/span>\n\n\nflavorDimensions<span style=\"color: #BBB\"> <\/span><span style=\"color: #666\">+=<\/span><span style=\"color: #BBB\"> <\/span><span style=\"color: #BA2121\">\"wff_version\"<\/span>\nproductFlavors{\n<span style=\"color: #BBB\">   <\/span><span style=\"color: #3D7B7B; font-style: italic\">\/\/ Wear OS 4<\/span>\n<span style=\"color: #BBB\">   <\/span>create(<span style=\"color: #BA2121\">\"wff1\"<\/span>){\n<span style=\"color: #BBB\">       <\/span>dimension<span style=\"color: #BBB\"> <\/span><span style=\"color: #666\">=<\/span><span style=\"color: #BBB\"> <\/span><span style=\"color: #BA2121\">\"wff_version\"<\/span>\n<span style=\"color: #BBB\">       <\/span>manifestPlaceholders<span style=\"color: #666\">[<\/span><span style=\"color: #BA2121\">\"wff_version\"<\/span><span style=\"color: #666\">]<\/span><span style=\"color: #BBB\"> <\/span><span style=\"color: #666\">=<\/span><span style=\"color: #BBB\"> <\/span><span style=\"color: #BA2121\">\"1\"<\/span>\n<span style=\"color: #BBB\">       <\/span>versionNameSuffix<span style=\"color: #BBB\"> <\/span><span style=\"color: #666\">=<\/span><span style=\"color: #BBB\"> <\/span><span style=\"color: #BA2121\">\"-wff1\"<\/span>\n<span style=\"color: #BBB\">       <\/span>versionCode<span style=\"color: #BBB\"> <\/span><span style=\"color: #666\">=<\/span><span style=\"color: #BBB\"> <\/span><span style=\"color: #666\">10000<\/span><span style=\"color: #BBB\"> <\/span><span style=\"color: #666\">+<\/span><span style=\"color: #BBB\"> <\/span>(android.<span style=\"color: #687822\">defaultConfig<\/span>.<span style=\"color: #687822\">versionCode<\/span><span style=\"color: #BBB\"> <\/span><span style=\"color: #666\">?:<\/span><span style=\"color: #BBB\"> <\/span><span style=\"color: #666\">0<\/span>)\n<span style=\"color: #BBB\">       <\/span>minSdk<span style=\"color: #BBB\"> <\/span><span style=\"color: #666\">=<\/span><span style=\"color: #BBB\"> <\/span><span style=\"color: #666\">33<\/span>\n<span style=\"color: #BBB\">       <\/span>targetSdk<span style=\"color: #BBB\"> <\/span><span style=\"color: #666\">=<\/span><span style=\"color: #BBB\"> <\/span><span style=\"color: #666\">33<\/span>\n<span style=\"color: #BBB\">   <\/span>}\n\n\n<span style=\"color: #BBB\">   <\/span><span style=\"color: #3D7B7B; font-style: italic\">\/\/ \u2026 other flavors defined here!<\/span>\n\n\n<span style=\"color: #BBB\">   <\/span><span style=\"color: #3D7B7B; font-style: italic\">\/\/ Wear OS 6<\/span>\n<span style=\"color: #BBB\">   <\/span>create(<span style=\"color: #BA2121\">\"wff4\"<\/span>){\n<span style=\"color: #BBB\">       <\/span>dimension<span style=\"color: #BBB\"> <\/span><span style=\"color: #666\">=<\/span><span style=\"color: #BBB\"> <\/span><span style=\"color: #BA2121\">\"wff_version\"<\/span>\n<span style=\"color: #BBB\">       <\/span>manifestPlaceholders<span style=\"color: #666\">[<\/span><span style=\"color: #BA2121\">\"wff_version\"<\/span><span style=\"color: #666\">]<\/span><span style=\"color: #BBB\"> <\/span><span style=\"color: #666\">=<\/span><span style=\"color: #BBB\"> <\/span><span style=\"color: #BA2121\">\"4\"<\/span>\n<span style=\"color: #BBB\">       <\/span>versionCode<span style=\"color: #BBB\"> <\/span><span style=\"color: #666\">=<\/span><span style=\"color: #BBB\"> <\/span><span style=\"color: #666\">40000<\/span><span style=\"color: #BBB\"> <\/span><span style=\"color: #666\">+<\/span><span style=\"color: #BBB\"> <\/span>(android.<span style=\"color: #687822\">defaultConfig<\/span>.<span style=\"color: #687822\">versionCode<\/span><span style=\"color: #BBB\"> <\/span><span style=\"color: #666\">?:<\/span><span style=\"color: #BBB\"> <\/span><span style=\"color: #666\">0<\/span>)\n<span style=\"color: #BBB\">       <\/span>versionNameSuffix<span style=\"color: #BBB\"> <\/span><span style=\"color: #666\">=<\/span><span style=\"color: #BBB\"> <\/span><span style=\"color: #BA2121\">\"-wff4\"<\/span>\n<span style=\"color: #BBB\">       <\/span>minSdk<span style=\"color: #BBB\"> <\/span><span style=\"color: #666\">=<\/span><span style=\"color: #BBB\"> <\/span><span style=\"color: #666\">36<\/span>\n<span style=\"color: #BBB\">       <\/span>targetSdk<span style=\"color: #BBB\"> <\/span><span style=\"color: #666\">=<\/span><span style=\"color: #BBB\"> <\/span><span style=\"color: #666\">36<\/span>\n<span style=\"color: #BBB\">   <\/span>}\n}\n<\/pre>\n<\/div>\n<p><imgcaption><center><em>Example of using product flavors in a watch face build file, build.gradle.kts, to support multiple WFF versions<\/em><\/center><\/imgcaption><\/p>\n<h2><span style=\"font-size: x-large;\">Improving velocity and battery life<\/span><\/h2>\n<p>Amoledwatchfaces is now seeing their investment in this journey to future-proof their watch faces paying off: <i>\u201cOur watch faces are now simply more customizable and more battery friendly. With 8 custom complication slots where you can combine all different complication types, users can have every possible combination of relevant data at a glance.\u201d<\/i><\/p>\n<p>User feedback has been great, according to Tom\u00e1\u0161, <i>\u201cpeople mostly refer to battery life improvements after the switch to Watch Face Format.\u201d<\/i><\/p>\n<p>And the format has also had a positive effect on development velocity: <i>\u201cI\u2019m developing watch faces faster and cleaner. Updating projects to newer WFF versions is very easy. Fixing bugs is easy too.\u201d<\/i><\/p>\n<p><image><\/p>\n<div style=\"text-align: center;\"><img decoding=\"async\" alt=\"Our watch faces are now simply more customizable and more battery friendly \u2013 Tom\u00e1\u0161 Marcin\u010din, owner of Amoledwatchfaces\" border=\"0\" id=\"imgCaption\" src=\"https:\/\/blogger.googleusercontent.com\/img\/b\/R29vZ2xl\/AVvXsEjjObjOCSHf-IwqaUMpn5IkpPLh_EbwenBbtdnJ3-dspJtZnwwzCr2UOO7vS7i-CRRL11oXk3HjKLCVgDdnPepywLVKKhJqHv-_e4T6hwYCStlhyphenhyphenRwakrgRhqzM_bzo2ztE_zW1rZYavZenVrfth4M_LYu7zFbN44HaalWJSX3VTIVN85yXZIl_nKJ_s5w\/s1600\/Amoledwatchfaces_Quote.png\" width=\"\"\/><\/div>\n<p><imgcaption><center><em\/><\/center><\/imgcaption><\/image><\/p>\n<h2><span style=\"font-size: x-large;\">Making the switch to the format<\/span><\/h2>\n<p>As announced recently, <a href=\"https:\/\/android-developers.googleblog.com\/2025\/06\/upcoming-changes-to-wear-os-watch-faces.html\" target=\"_blank\" rel=\"noopener\"><b>all developers must migrate to Watch Face Format by January 2026<\/b><\/a>. Amoledwatchfaces has benefitted from being an early adopter and recommends that other developers make the switch early too.<\/p>\n<p>Tom\u00e1\u0161 adds, <i>\u201cDon\u2019t be afraid of switching to a WFF project, managed completely by you. It may seem hard at first sight but when you learn all the attributes, you can define your perfect progress bar arc or gradient digital clock faster than in other tools.\u201d<\/i><\/p>\n<p>He also suggests a hybrid workflow, where you work directly in the format and use other tools and editors such as Watch Face Studio. You can first create your watch face in Watch Face Studio, then extract all the resources from the bundle and continue in your preferred IDE.<\/p>\n<p>This week, we\u2019re also announcing <a href=\"https:\/\/android-developers.googleblog.com\/2025\/08\/introducing-watch-face-designer.html\" target=\"_blank\" rel=\"noopener\">Watch Face Designer<\/a>, which is a Figma-based plugin that you can use in a similar way: start with your design, then export to your preferred format for further refinement.<\/p>\n<h2><span style=\"font-size: x-large;\">What&#8217;s next for Amoledwatchfaces?<\/span><\/h2>\n<p>For Tom\u00e1\u0161, the journey hasn\u2019t ended, and he\u2019s continuing to strive to delight users even more with each new creation. \u201c<i>There\u2019s always room for improvement. When there&#8217;s a new WFF version or feature which could benefit watch faces and thus users, I\u2019ll be adding that.\u201d<\/i><\/p>\n<p>We\u2019re looking forward to seeing the next creations from <a href=\"https:\/\/play.google.com\/store\/apps\/dev?id=5591589606735981545\" target=\"_blank\" rel=\"noopener\">Amoledwatchfaces<\/a>!<\/p>\n<h2><span style=\"font-size: x-large;\">Getting started the with Watch Face Format<\/span><\/h2>\n<ul>\n<ul>\n<li><b>Documentation for developers<\/b><\/li>\n<li><b>Graphical editors for designers<\/b><\/li>\n<li><a href=\"https:\/\/android-developers.googleblog.com\/2025\/06\/upcoming-changes-to-wear-os-watch-faces.html\" target=\"_blank\" rel=\"noopener\">Migration guidance<\/a><\/li>\n<p>We hope this story inspires you to take your next steps with the Watch Face Format.<\/p>\n<\/ul>\n<\/ul>\n<\/div>\n<p>[ad_2]<br \/>\n<br \/><a href=\"http:\/\/android-developers.googleblog.com\/2025\/08\/migrating-to-watch-face-format-amoledwatchfaces.html\">Source link <\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>[ad_1] Posted by Garan Jenkin \u2013 Developer Relations Engineer This post is part of Wear OS Spotlight Week. Today, we\u2019re exploring how Amoledwatchfaces successfully migrated<\/p>\n","protected":false},"author":1,"featured_media":348328,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[146],"tags":[],"_links":{"self":[{"href":"https:\/\/michigandigitalnews.com\/index.php\/wp-json\/wp\/v2\/posts\/348327"}],"collection":[{"href":"https:\/\/michigandigitalnews.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/michigandigitalnews.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/michigandigitalnews.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/michigandigitalnews.com\/index.php\/wp-json\/wp\/v2\/comments?post=348327"}],"version-history":[{"count":0,"href":"https:\/\/michigandigitalnews.com\/index.php\/wp-json\/wp\/v2\/posts\/348327\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/michigandigitalnews.com\/index.php\/wp-json\/wp\/v2\/media\/348328"}],"wp:attachment":[{"href":"https:\/\/michigandigitalnews.com\/index.php\/wp-json\/wp\/v2\/media?parent=348327"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/michigandigitalnews.com\/index.php\/wp-json\/wp\/v2\/categories?post=348327"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/michigandigitalnews.com\/index.php\/wp-json\/wp\/v2\/tags?post=348327"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}