Skip to content
livery

How to Extract an Android App's Design System

By · Updated · 6 min read

The short answer

To extract an Android app's design system, read it from three places: the app's package (theme colours, colour resources, bundled fonts, animation files and images), its screens (layout, sizes and colours as drawn) and its motion (how long transitions take and how they ease). Android Studio's Layout Inspector and UI Automator show layout trees but not a full design system. Applivery, Livery's Android app, reads all three on the phone for any installed app and exports a kit your coding agent can apply.

Why is an app's design harder to extract than a website's?

Because there's no CSS to inspect. On a website, every element's colour, font, spacing and transition is in a stylesheet the browser will show you. An Android app ships compiled resources and code, and much of its look is decided at run time.

  • Colours live in theme attributes and colour resources, often with a separate night version, and on Android 12 and later an app using dynamic colour takes its palette from the user's wallpaper.
  • Fonts may be bundled in the package, downloaded at run time, or set in code.
  • Jetpack Compose, Flutter and game engines draw their own UI, so there's often no tree of named views with styles attached.
  • Motion is spread across animation XML, Lottie files and code, and the only way to see the real timing is to watch the screen frame by frame.

How do I inspect an app's layout in Android Studio?

Use the Layout Inspector. Android's docs say it "lets you inspect and debug the layout inside a running app in an emulator or physical device", and "all the layout attributes for the selected component appear in the Attributes panel".

  1. 1Connect a device or start an emulator, and run the app.
  2. 2Open the Layout Inspector in Android Studio. It "automatically connects to the debuggable processes running in the foreground".
  3. 3Select a component in the tree to see its attributes, for Compose, View or hybrid layouts.
  4. 4Export a snapshot to keep the rendering, the component tree and every component's attributes for later.

It's the most precise manual method, but it's built for apps you are developing: it connects to debuggable processes, and it shows one component at a time rather than a summary of the whole palette, type scale and motion.

Can UI Automator read another app's screen?

Yes, its layout tree. UI Automator is Android's framework for "cross-app functional UI testing across system and installed apps", and it can dump what's on screen.

The uiautomatorviewer tool gives "a convenient visual interface to inspect the layout hierarchy and view the properties of UI components that are visible on the foreground of the device". In code, UiDevice.dumpWindowHierarchy "dumps every window's layout hierarchy" to a file "in XML format".

What you get is structure: each element's class, resource id, text, content description, and whether it's clickable. You don't get colours, font families, text styles or motion, and apps that draw their own UI may expose little. The docs warn that for components that aren't accessible to UI Automator "only limited information might be available".

How does Material Design 3 map to design tokens?

Material 3 already organises an Android design into tokens: colour roles, a type scale and shape sizes. If an app is built on it, extracting its design system is mostly a matter of reading those values.

Android's Compose docs say "an M3 theme contains the following subsystems: color scheme, typography and shapes". The colour scheme is a set of roles: primary for "main components like prominent buttons, active states", secondary and tertiary for less prominent and contrasting accents, surface and background for neutrals, each with an "on" colour for content on top of it (on-primary on primary). The type scale is display, headline, title, body and label, "with large, medium, and small sizes for each", 15 styles in all. Shapes come in five sizes, from Extra Small to Extra Large.

Two things to watch. Dynamic colour, available on Android 12 and above, derives a palette from the user's wallpaper, so the colours you see on your phone may not be the app's brand colours. And View-based apps keep the same roles as theme attributes (colorPrimary, colorSurface, colorOnSurface and so on), which you only see by resolving the app's theme.

Which method should I use?

Use the Android Studio tools for apps you build, UI Automator for structure, and a dedicated extractor when you want the whole design system of an app you didn't build.

Ways to extract an Android app's design system. Manual tools from Android's developer docs; Applivery from its README.
MethodAny installed app?ColoursTypeMotionOutput
Screenshots and a colour pickerYesSampled pixels, by handGuessed by eyeNoImages
Layout Inspector (Android Studio)Debuggable processesPer component, where its attributes show itPer component, where its attributes show itNoSnapshot in Android Studio
UI Automator (uiautomatorviewer, dumpWindowHierarchy)Yes, what's on screenNoText only, no stylesNoXML layout hierarchy
AppliveryYes, on the phoneTheme and every colour resource, light and night, with roles and contrastBundled fonts, Google Fonts families, declared sizesAnimation files, Lottie, and measured transitions fitted to cubic-bezierA kit: SKILL.md, tokens.json, fonts.json, motion.md and more

What does Applivery extract and export?

Applivery is the Android sibling of Livery. Pick an installed app and it reads the package on the phone, then optionally records a walkthrough while you use the app, and exports a Livery-format skill.

  • Theme: the launch theme's colour attributes, resolved in light and night configurations (including Material roles such as colorPrimary, colorOnPrimary, colorSurface and colorOutline).
  • Colour: every colour resource, light and night, with roles (background, surface, text, accent), sources and WCAG contrast.
  • Type: bundled fonts (res/font, assets and Flutter's FontManifest.json), downloadable Google Fonts families and declared text sizes.
  • Motion: anim, animator, interpolator and transition XML with durations and cubic control points, plus Lottie files. A walkthrough also times every screen change frame by frame and fits it to an exact cubic-bezier, and sets loading flashes aside.
  • Assets and framework: every image in the package, drawable XML rendered to PNG, and the framework the app uses (Flutter, React Native, Jetpack Compose, Android Views, Unity, .NET or a web view), with the evidence.
  • Screens and layouts: one frame per distinct screen and, with Applivery's optional accessibility service on, each screen's elements with positions in dp, text sizes and sampled colours. Games and 3D apps get a scene mode.

Export kit writes SKILL.md, rules.md, tokens.json, fonts.json, motion.md, layout.md, screens.md, screen layouts, keyframe strips, frames and assets. Share it or save it to Download/Applivery, then give it to Claude Code or any agent and say "apply this kit". Kits can also be sent to Figma. Everything is read on the phone and nothing is uploaded unless you share a kit or send it to Figma.

An app's icons, images, illustrations and fonts belong to its owner, and Applivery includes them in kits by default. For your own product, keep the measured style and turn off Include assets in Export, or replace them with your own.

Questions

Can I use the Layout Inspector on someone else's app?
Android's docs say it connects to debuggable processes, so it's made for apps you build. For other apps, UI Automator can dump the layout hierarchy of what's on screen.
Does Applivery work with Flutter and Jetpack Compose apps?
Yes. It names the framework with its evidence, reads Flutter's FontManifest.json for fonts, and measures screens and motion from the screen itself, which works however the app draws its UI.
What permissions does Applivery need?
It lists installed apps (QUERY_ALL_PACKAGES), asks Android's consent every time it records the screen, and only uses its accessibility service for page layouts if you turn it on; that service never taps or types and skips password fields.
What about apps that block screen recording?
Applivery reports them as blocked instead of producing black frames. Everything read from the package (theme, colours, fonts, motion files, images) still works.
Which Android versions does Applivery support?
Android 8 and later. It's a free download from livery.site/applivery.
Can I get an app's design into Figma?
Yes. Send a kit from Applivery and import it with Applivery for Figma: colours as Light and Dark variables, type as text styles, components, and screens as frames.

Sources

  1. Android Developers: Debug your layout with Layout Inspector
  2. Android Developers: UI Automator (legacy API guide, uiautomatorviewer)
  3. Android Developers: UiDevice reference (dumpWindowHierarchy)
  4. Android Developers: Material Design 3 in Compose

Try it on a site you love

Paste a link and get an installable design kit in about a minute. Free.

More guides