Extend VHAL property descriptions in the emulator  |  Android Open Source Project Skip to main content Docs What's new? Release notes Latest security bulletins Latest Compatibility Definition Document (CDD) Site updates Getting Started About Start Download Builds Test Create Contribute Community Tools, build, and related reference Security Overview Bulletins Features Testing Best Practices Core Topics Architecture Audio Camera Connectivity Data Display Fonts Graphics Interaction Media Performance Permissions Power Runtime Settings Storage Tests Updates Virtualization Compatibility Compatibility Definition Document (CDD) Compatibility Test Suite (CTS) Android Devices Cuttlefish Enterprise TV Automotive Overview Software Defined Vehicle In-vehicle Infotainment Release Details Reference HIDL HAL Trade Federation Security Test Suite Android Code Search / English Deutsch Español – América Latina Français Indonesia Italiano Polski Português – Brasil Tiếng Việt Türkçe Русский עברית العربيّة فارسی हिंदी বাংলা ภาษาไทย 中文 – 简体 中文 – 繁體 日本語 한국어 Sign in Documentation What's New? Getting Started Security Core Topics Compatibility Android Devices Automotive Reference Docs More What's New? Getting Started Security Core Topics Compatibility Android Devices Automotive Reference Android Code Search Overview What's new? What is Android Automotive? Terminology Software defined vehicle Overview Terminology Get started Overview Development environment Local development Cloud development Overview Organization setup Code location Download, build, and run IDE setup Access GitHub repositories Understand AAOS SDV System architecture SDV architecture Key concepts Logical architecture Service bundle naming conventions Configure the Orchestrator Service bundle identity Time sync Health monitoring Quality of service scheduling Control vehicle and power management Security concepts Authorization Overview Deployment Authorization policy Enforcement Debug permissions violations VM-level authorization policy VM identity and attestation Overview SDV profile for DICE vvmconfig and vvmtruststore Mesh status and provisioning Device trust Update concepts Service bundle updates A/B system updates Update Manager OEM AB partition updates Develop SDV services Quick start: Create and execute SDV service bundles Vehicle Services IDL (VSIDL) Overview Define messages and RPC services Define service architecture Generate middleware Implement business logic Build and deploy service bundles Automatic catalog updates and LSP integration Language specification SDV VSIDL compatibility guidelines VSIDL Provider for reflection Service bundle metadata Core code samples Handle suspend and resume Work with Automotive Services Overview Configuration and calibration Diagnostics User preferences architecture and implementation guide Asynchronous Rust Platform integration guides SDV Core integration Integration guide Guest system (VM image) requirements SDV Core bootloader APEX signing SDV Media integration Overview SDV Media requirements Graphics rendering on SDV Media SDV Media: Manage displays Use cameras SDV on hardware SDV on QNX QVM sample configurations QVM sample configuration for SDV Core QVM sample configuration for SDV Media QVM sample configuration for SDV IVI VM identity and attestation SDV bootloader Android HLOS CDI handover Configure identity for native services SOME/IP integration guide Overview Write a SOME/IP mapping file Write a SOME/IP type definition Implement the SOME/IP stack Integrate SOME/IP with SDV Optimize performance Use the SDV Gateway on IVI The Generic Kernel Image (GKI) project Partition layout Test, debug, and verify performance Debug SDV Troubleshoot middleware API failures Use tracing to gain insights into system performance SELinux policies for device tests Detect security violations SDV system tests SDV Test Framework library SDV system test creation Solution guides Display Safety Overview Get started Code structure DriverUI HAR camera view HAR platform abstraction layer HAR graphics pipeline Audio chimes Performance tracing for HAR Safety design toolchain Telemetry Overview SDK Overview Rust telemetry client library Overview Rust telemetry client library API Configurable Publisher Registry library Java protobuf descriptor generator tool Metrics Configuration Generator Overview Deployment Vehicle signal catalogs API reference Metrics configuration concepts Data sources Configurable Publisher Registry Metrics configuration generation request JSON format Cloud Telemetry Simulation Overview Deployment guide User guide In-vehicle Infotainment Overview Guidelines for development Car service feature control App compat Car display compatibility Audio Overview Audio focus Car audio configuration Configurable audio policy engine Audio control HAL Multi-zone audio routing Car audio plugin service Volume management Connect an input device in AAOS Microphone input Audio power management Manage audio resources during suspend Audio configuration AAOS flags Windowing with Scalable UI Overview Implement advanced windowing Consider the app ecosystem Maximize test compliance with WindowManager invariants Configure advanced windowing Configure a panel Configure a variant Configure a transition Configure an event Configure an action Implement heads up notification panels Customize system bars Integrate Setup Wizard Camera Overview Android Camera Service Overview Enable multi-client cameras Extended View System Overview Event and frame notification mechanism Program camera control parameters Changes to camera and system configuration Frame metadata Automotive display proxy service Multi-camera support Vehicle camera HAL Migrate to Camera2 Overview Migrate to Camera2 Camera2 API mapping Car framework core Car Settings Overview Add Car Settings Rearrange Car Settings Distraction optimization in Car Settings Car Settings search indexing Dual pane customization Preference subtitles Customize status bar system icons Connectivity Configure internal Ethernet networks Bluetooth Per-application network selection (PANS) Maintain hotspots between driving sessions Device management for Automotive Displays and input Overview Monitor status Key input Instrument Cluster API OEM custom inputs Multi-Display Communications API Automotive Window Layering Driver distraction Driver distraction guidelines Car User Experience Restrictions rules Consume car driving state and UX restrictions Flash wear management Location Automotive location bypass allowlist policy Automotive Location Bypass API Get coarse location Notifications Overview Set up notifications Heads-up notifications Notification access and notification listener policy Throttle and suppress notifications Performance analysis Power Overview Power policy Power management Manage boot time Garage Mode Radio Overview Broadcast radio HAL Radio control implementation Set up remote access Rotary controller Overview Develop apps Develop apps without the Car UI library Integration guide for OEMs Security Overview Secure developer options Enable MACsec for Ethernet features Debug Restriction Controller integration guide Use vehicle bound file encryption Manufacturer guide for long-term Android security Vehicle system isolation OTA updates System UI Implement the System UI SystemUIOverlayWindow management system SystemUIOverlayWindow codelab Time Overview Configure AAOS time sources Automatic time detection Time zone options Location time zone detection Unbundled apps Overview Release notes Integrate unbundled apps AOSP host integration guide Integrate the AOSP host Media apps with Car App Library OEM design tokens Control Center reference app Overview Customize the reference app Technical details Integrate AppCards Overview Create an AppCard Configure an AppCard host Try the AppCard codelab App Lock Car Messenger Car UI library Overview Integrate the Car UI library into apps Customize apps Car UI plugins List of packages containing car-ui-lib Add custom fonts Customize Car UI preferences Customize the toolbar with runtime resource overlays Customization options for CarUiListItem Customize CarUiRecyclerView Car UI library release notes Appendix A, work with RROs Appendix B, customization Appendix C, minimum compatible version for Car UI Plugin API Dashcam Dialer Overview Technical details Customization guidelines Global configurable values Toolbar Debug and test Media Overview System components and user flows Implement radio with Media Customize media Implement a media card Integrate deep links to Media apps Users and accounts Multi-user support Foreground and background user system handling Manage users and accounts Remove packages for the system user User HAL properties Vehicle hardware abstraction layer (VHAL) Overview VHAL interface Property configurations Supported system properties Special properties SEAT and STEERING_WHEEL properties ADAS vehicle properties Reference implementation Debug VHAL Use VHAL with the native client HIDL VHAL HIDL VHAL migration guide HIDL VHAL interface Virtualization Overview Architecture Tools Reference platform Voice Voice assistant Tap-to-Read OEM custom inputs Voice interaction integration guide About voice interaction Integration flows App development Fulfill commands Test and debug Watchdog Overview Monitor flash memory usage Collect performance data Monitor system health Development tools Overview Android Virtual Device Android Virtual Device as a development platform Build your own cloud emulator Extend VHAL property descriptions in the emulator Emulator USB passthrough integration guide USB Port Reset API Pixel devices as development platforms System performance tools Testing tools and infrastructure Overview System performance tools User interface frameworks Network simulation Complete Automotive Tests in a Box (CATBox) Enable fuzzers Spectatio Torq Release details Overview Android Automotive 26Q2 Android Automotive 25Q4 Android Automotive 25Q2 Android Automotive 25Q1 Android Automotive 24Q4 Android Automotive 15 Android Automotive 14 QPR1 Android Automotive 14 Android Automotive 13 QPR3 Android Automotive 13 QPR2 Android Automotive 13 QPR1 Android Automotive 13 Android Automotive 12L Android Automotive 12 QPR3 Android Automotive 11 Unbundled apps What's new? Release notes Latest security bulletins Latest Compatibility Definition Document (CDD) Site updates Getting Started About Start Download Builds Test Create Contribute Community Tools, build, and related reference Security Overview Bulletins Features Testing Best Practices Core Topics Architecture Audio Camera Connectivity Data Display Fonts Graphics Interaction Media Performance Permissions Power Runtime Settings Storage Tests Updates Virtualization Compatibility Compatibility Definition Document (CDD) Compatibility Test Suite (CTS) Android Devices Cuttlefish Enterprise TV Automotive Overview Software Defined Vehicle In-vehicle Infotainment Release Details Reference HIDL HAL Trade Federation Security Test Suite Effective in 2026, to align with our trunk stable development model and ensure platform stability for the ecosystem, we will publish source code to AOSP in Q2 and Q4. For building and contributing to AOSP, use android-latest-release. The android-latest-release manifest branch will always reference the most recent release pushed to AOSP. For more information, see Changes to AOSP. AOSP Docs Automotive Extend VHAL property descriptions in the emulator Stay organized with collections Save and categorize content based on your preferences. The Android Automotive OS (AAOS) contains common VHAL properties that can be viewed in an emulator's VHAL window. As a result, you can view an abundance of information about VHALs including names, descriptions, and the meaning of the values. The information is extracted from the metadata of VHAL properties, which is hard-coded into the QEMU emulator. When you add your own VHAL properties for exclusive use on your devices, viewing VHAL metadata in the VHAL window requires you to modify the code and build a customized QEMU emulator. To work around this, you can write your own descriptions in JSON format and them to your system image. Overview This page details how you can extend VHAL properties descriptions in an AAOS emulator. Create JSON metadata to extend VHAL properties The emulator looks for additional metadata in all files ending with -types-meta.json in the Android Virtual Device (AVD) path. JSON files are expected to consist of an array of Enum objects as shown below. Enum object The Enum object with the name VehicleProperty is a special case in That you can consider it as a root. Its contents are added to the vehicle properties map. Other Enums (with a name other than VehicleProperty) define maps of the names of the custom values. Enum: { "name" : String, "values" : Array of { ValueObject } } ValueObject ValueObject: { "name" : String, "value" : Integer, "data_enum" : String, VehicleProperty only, optional, } For VehicleProperty, the Enum name describes how this property is displayed in the VHAL window of the emulator. The value is the property_id of the property described by the ValueObject. data_enum associates ValueObject with another Enum. This association is used to map a value into a human readable string and exists only for ValueObjects in the Enum for the VehicleProperty. An example of VehicleProperty is shown below: [ { "name": "VehicleProperty", "values": [ { "name": "CURRENT_GEAR", "value": 289408001 } ] } ] In this example, a property_id with a value of 289408001 is provided as a name for CURRENT_GEAR. In the emulator, this property is already hard-coded as a name, Current Gear. (You can't reproduce this scenario as this page was authored after removing all the hard-coded properties for demonstration purposes.) Figure 1. VehicleProperty defined with name and value. In the emulator's VHAL Properties tab, the name is refreshed to read CURRENT_GEAR as expected. data_enum In the above example, the displayed value is 4 when the gear is set to P. Figure 2. Value displayed as 4. As intended, on the VHAL Properties tab in the emulator, the name appears as CURRENT_GEAR. This is in contrast to the existing emulator, where it's displayed as P. enum VehicleGear { GEAR_UNKNOWN = 0x0000, GEAR_NEUTRAL = 0x0001, GEAR_REVERSE = 0x0002, GEAR_PARK = 0x0004, GEAR_DRIVE = 0x0008, GEAR_1 = 0x0010, GEAR_2 = 0x0020, GEAR_3 = 0x0040, GEAR_4 = 0x0080, GEAR_5 = 0x0100, GEAR_6 = 0x0200, GEAR_7 = 0x0400, GEAR_8 = 0x0800, GEAR_9 = 0x1000, } To learn more, see the AIDL definition. As defined in the AIDL, the value of the Park gear is 4, which means you need to translate the value 4 into P. This is when you use data_enum, which maps this property value to a human readable string in another Enum. The emulator uses this map to translate property values. For example: [ { "name": "VehicleProperty", "values": [ { "name": "CURRENT_GEAR", "value": 289408001, "data_enum": "VehicleGear" } ] }, { "name": "VehicleGear", "values": [ { "name": "GEAR_UNKNOWN", "value": 0 }, { "name": "GEAR_PARK", "value": 4 } ] } ] Add "data_enum": "VehicleGear", so the emulator uses an Enum named VehicleGear to translate the property value. Add another Enum named VehicleGear with the value being an array of ValueObject, where the property value (with the value) should be displayed as a name. Figure 3. Value displayed as GEAR_PARK. On the VHAL Properties tab for the emulator, the name is refreshed to read CURRENT_GEAR, as expected. The property value of 4 is displayed as GEAR_PARK. Use JSON metadata to extend VHAL properties To use JSON metadata to extend your VHAL properties, run this Python script (contained in the Android source) to generate the extended property JSON from information in the AIDL. Note: Instructions to run the script are contained in the comments of this file. The resulting JSON includes some redundant values, such as change_mode, access, and unit. Though this information is part of the VHAL property, these JSON values don't affect what's displayed in the emulator's VHAL property window. Add JSON metadata to the system image Be mindful that a filename must end with -types-meta.json. If not, the file is ignored. Add a build target Add the -types-meta.json file to the PRODUCT_COPY_FILE. For example: PRODUCT_COPY_FILES += \ device/generic/car/common/vehicle-types-meta.json:vehicle-types-meta.json This code copies the file into out/target/product/{your_target_path}/, the root of your built target output. Content and code samples on this page are subject to the licenses described in the Content License. Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates. Last updated 2026-06-17 UTC. [[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2026-06-17 UTC."],[],[]] Build Android repository Requirements Downloading Preview binaries Factory images Driver binaries Connect @Android on X @AndroidDev on X Android Blog Google Security Blog Platform on Google Groups Building on Google Groups Porting on Google Groups Get help Android Help Center Pixel Help Center www.android.com Google Mobile Services Stack Overflow Issue Tracker About Android Community Legal License Privacy Site feedback Manage cookies English Deutsch Español – América Latina Français Indonesia Italiano Polski Português – Brasil Tiếng Việt Türkçe Русский עברית العربيّة فارسی हिंदी বাংলা ภาษาไทย 中文 – 简体 中文 – 繁體 日本語 한국어