Skip to content
wheregoesPublic

About

Custom Android apps for BYD electric vehicles — door sounds, CAN bus tools, and more. No root needed.

Topics

Resources

Stars

52 stars

Watchers

3 watching

Forks

Latest commit

 

History

46 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BYD Apps

Disclaimer: This is an unofficial, community-driven project with no affiliation, endorsement, or sponsorship from BYD or any of its subsidiaries. It involves reverse engineering of BYD's internal Android services for educational and interoperability purposes only. Use at your own risk — modifying vehicle software may void your warranty or violate BYD's terms of service. The authors assume no liability for any damage to your vehicle, software, or data.

Open-source Android apps for BYD electric vehicles.

Built on reverse-engineered BYD APIs — these apps interact directly with the vehicle's CAN bus through BYD's internal Android services. Not available on Google Play.

Apps

App Description Download
Door Sound Custom interior sounds on door, hood, trunk, lock/unlock, alarm and window events; AVAS tone patterns on the exterior speaker; parked-watch window and deep-sleep diagnostics door-sound.apk
Engine Sound Select the vehicle's built-in engine voice simulator presets (readback-verified; which speaker the MCU routes them to is unverified) engine-sound.apk
Cabin Keep pets safe — AC monitoring, temperature display, always-on screen, plus a high-contrast Outside view readable through tinted glass pet-mode.apk
BYD Probe Diagnostic tool — enumerates all BYD Auto API methods via reflection byd-probe.apk

All versions are on the releases page. You do not need to build anything — download the APK and install it.

Quick start: copy the APK to Third Party Apps <countryCode>/ on a USB stick (55 Brazil, 52 Mexico, 91 India …; the suffix is your car's sys.byd.countrycode) → plug in → password BYD6125F (130820 in India).

Signing keys. Releases before September 2026 each used a throwaway key. Door Sound 1.3.0 changes the key once more — the 1.2.0 key is no longer available — so upgrading from 1.2.0 needs an uninstall first and loses the selected sound files and per-event settings. From 1.3.0 on the key is stable (67397b8ca97a25fa0de930c9c08e0e4a05fcf2b3a0f4e810146dd8ac34a6db32) and upgrades install over the top. Engine Sound, Cabin and BYD Probe still carry their earlier key; their next release will need the same one-time uninstall.

Compatibility

Property Value
Vehicles BYD Dolphin 25/26 (likely works on other DiLink 3 models)
Known incompatible DiLink 5 — see #3
Platform DiLink 3.0 (global version)
Android 10 (API 29)
Architecture ARM64 (Qualcomm QCM6125)
Tested Firmware 13.1.32.2507250.1 (Jul 25 2025)

Tested on firmware 13.1.32.2507250.1. Older versions likely work. Newer firmware updates from BYD may change or break things — no guarantees.

Installing Apps on Your BYD

No root required. Two methods:

USB Drive (Easiest)

  1. Create a folder named Third Party Apps <countryCode> on a USB drive, where <countryCode> is your car's sys.byd.countrycode (55 Brazil, 52 Mexico, 62 Indonesia, 66 Thailand, 91 India, 966 Saudi Arabia, 971 UAE, 997 Kazakhstan, 998 Uzbekistan). Europe, Australia and Japan units use Application Installation <countryCode> with no password instead.
  2. Copy the APK into that folder
  3. Plug USB into the car
  4. Enter password: BYD6125F (India uses 130820)
  5. Tap the APK to install

ADB over WiFi

Requires enabling USB debugging first — see the full Sideloading Guide.

adb connect 192.168.10.10:5555
adb install build/door-sound.apk

Exterior audio: what is and is not possible

A recurring question (#4): a custom audio file cannot be routed to the exterior AVAS speaker on this platform. If you lock the car and walk away, your own audio file will never be what you hear from outside.

Measured on a Dolphin:

  • the AVAS custom-source feature ids 0x35201036 and 0x35201040 both return -10011;
  • 0x1C10000E, 0x32B1C042 and 0x1B100043 are not accepted at all;
  • the AVAS sounds live in MCU flash and are not reachable from Android;
  • setBuffer caps at 128 bytes, roughly 8 ms of 8 kHz audio.

So there are exactly two audio routes:

Route What can play Used by
Interior speakers any audio file you choose Door Sound, "Inside speaker" tab
Exterior AVAS speaker the vehicle's own two tones (0xAA000104) and its built-in engine presets Door Sound "Outside speaker" tab, Engine Sound

Note also that a successful setInt proves nothing on this platform — it returns success even for values the MCU ignores. Every write in these apps is read back and verified.

Building from Source

# one-time: fetch android.jar for API 29
mkdir -p "$HOME/.local/share/android/platform-29"
curl -fsSL -o /tmp/platform-29.zip \
  https://dl.google.com/android/repository/platform-29_r05.zip
unzip -oj /tmp/platform-29.zip android-10/android.jar \
  -d "$HOME/.local/share/android/platform-29"

# then, per app
cd apps/door-sound && ./build.sh

All four apps share apps/common/build-common.sh, the BYD API stubs in apps/common/stubs/ and apps/common/libs/byd_sdk.dex. Each app's build.sh only sets its output name and package.

Requirements:

  • JDK 11+
  • Android SDK build-tools (aapt2, d8, apksigner, zipalign)
  • android.jar for API 29 (the command above, or set ANDROID_JAR)

Signing uses one repo-wide keystore at keystore/byd-apps.keystore, generated on first build and gitignored. It lives outside build/ on purpose: when the key was regenerated per build, every reinstall was a signature mismatch and in-place upgrades were impossible.

Toolchain limit: d8 8.2.2 cannot dex Java enums or anonymous inner classes — both fail with NullPointerException: Cannot invoke "String.length()". Use this::method references and final classes of static constants instead. Details in apps/common/build-common.sh.

UI work without the car

tools/emu.sh runs the apps on an AVD with the head unit's geometry (1920x1080 at 240dpi, landscape, the car's [0,84][1920,990] stable frame) and an emulator-only fake vehicle (apps/common/fake/) in place of the BYD SDK, so layout, states and copy can be iterated without powering the car on:

tools/emu.sh setup                  # one-time: SDK, API 29 image, "dilink3" AVD
tools/emu.sh start
tools/emu.sh install pet-mode       # BYD_FAKE=1 build, install, launch
tools/emu.sh vehicle lock=1 ac=0    # drive the fake vehicle (run bare for all keys)
tools/emu.sh shot /tmp/cabin.png

The fake answers instantly and never fails a write, so it proves nothing about CAN timing, readback or MCU behaviour — those stay car-only. Fake builds are written to build/fake-*.apk, their versionName ends in +fake, and the fake throws on real hardware; never install one on a car.

Research

Detailed API reference in research/byd-auto-api-reference.md — covers AC, door lock, panorama, bodywork, and cloud communication APIs with live-verified values.

These apps are based on findings from the byd-dolphin-hacking research repo — CAN bus protocol documentation, BYD API reverse engineering, and audio architecture analysis.

Contributing

Every modification, finding, discovery, or change made to the BYD Dolphin must be committed and pushed. See CLAUDE.md.

Troubleshooting

  • App killed after minutes, or dead after a reboot? → Settings → Apps → Auto-start Management. That screen is a block list and its switches read backwards: a row switched ON means auto-start is disabled for that app, OFF means it is allowed. Measured on a DiLink 3 unit: with the row ON a background app never received BOOT_COMPLETED at all. The list is keyed by the APK directory, so re-check it after every install and every upgrade — Door Sound marks its BYD auto-start pill amber until you have.
  • Nothing happens when you lock the car minutes after switching it off? → switching the car off does not reboot the head unit, it lets the SoC suspend. Door Sound keeps a wake lock and a 10-second poll alive for the Watch parked duration (10 min by default; 30/60/always in the tab row), and its Diagnostics screen prints the suspend gaps it saw.
  • Temperature shows "--"? → either the AC signals are unavailable on your firmware, or the climate feed went stale: Cabin withdraws readings older than 120 s rather than leaving a stale number on screen, and shows "Climate signal lost" when it does.
  • Door Sound logs the event but plays nothing? → playback needs the master switch and that event's own switch and a selected file. Each card states which one is missing. Note that Preview deliberately bypasses the switches.
  • Engine Sound shows 20 presets but only one or two make a sound? → expected. The MCU stores and echoes back any preset number you write (verified up to 200 on a Dolphin), so the vehicle cannot be asked how many sounds it actually has. The app offers a fixed range of 20 and lets you rename the ones you can hear — long-press a preset chip to name it.
  • New firmware broke things? → Report in issues; no guarantees on updates.

License

MIT License

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

About

Custom Android apps for BYD electric vehicles — door sounds, CAN bus tools, and more. No root needed.

Topics

Resources

Stars

52 stars

Watchers

3 watching

Forks

Releases

Packages

Contributors

Languages