Free BYD dashcam & sentry mode

BladeWatch for BYD: dashcam & sentry mode

BladeWatch is a free, open-source dashcam and Tesla-style sentry mode app built for BYD cars with DiLink v3 — the Seal, Seal U, Dolphin, Atto 3, Han, Tang, and more. It records the 360° panoramic camera, runs 24/7 surveillance while parked, and keeps every recording on your own head unit. No cloud, no account, no subscription. This guide shows you how to install it over wireless ADB — updated for v1.3.2.0, which splits BladeWatch into two APKs you sign yourself.

Published · Updated

Only enable debugging on a vehicle and head unit you own or are authorized to manage. Wireless ADB can expose powerful device controls, so disable it once BladeWatch is installed.

What is BladeWatch?

BladeWatch turns your BYD's built-in panoramic camera into a full dashcam and Tesla-style sentry mode — without any cloud service or subscription. It installs directly onto the car's DiLink v3 head unit and runs in the background, recording while you drive and watching over the car while it's parked. Everything stays on the device; you own your footage.

Panoramic dashcam

Records the BYD 360° panoramic camera through a GPU pipeline (H.264/H.265), split into clips with a calendar library for browsing footage.

Sentry mode surveillance

24/7 monitoring with GPU motion detection, per-quadrant tracking, and an optional on-device AI object-recognition gate. Safe-location zones and schedules included.

Proximity recording

Uses BYD's parking radar sensors to start recording only when something approaches the parked car — with a pre-event buffer so you never miss the moment.

Vehicle control & 3D hero

Operate climate, windows, and seats, and view an interactive 3D model of your BYD with live battery, range, tyre pressure, and door state.

Trips & analytics

Trip history with route maps, telemetry, and driving insights, plus a real-time performance and diagnostics dashboard.

Remote web app

A full web UI served by the on-device daemon, reachable through your own Tor onion service — no account, no invite token, permanent address. Password-protected, with web push alerts and 17 languages.

  • 100% local storage
  • No account
  • No cloud
  • Open source (MIT)
  • Free

BYD compatibility

BladeWatch is built for BYD vehicles running the DiLink v3 Android head unit (arm64-v8a, Android 10+) with the 360° panoramic camera system. It has been used on models including:

  • BYD Seal and Seal 5 DM-i
  • BYD Seal U
  • BYD Dolphin
  • BYD Atto 3
  • BYD Han and Tang

If your BYD has DiLink v3 and the panoramic camera, BladeWatch should work even if your exact model isn't listed above. The install steps below apply to any DiLink v3 head unit.

Downgrade the firmware first (if ADB is blocked)

On newer global firmware the engineer code shows a QR code instead of the IMEI prompt, so wireless ADB can't be enabled. The fix is to flash an older build that still has the ADB-accessible engineer menu, unlock it, install BladeWatch, and then update back. Skip this section if dialling *#91532547# already gives you an IMEI.

These steps are adapted from the community BYD unlocking guide by DeBondor, which covers the Han, Atto 2, Atto 2 DM-i, Seal, Seal U, Seal U DM-i, and Sealion 5 DM-i.

Do this at your own risk. Flashing head unit firmware can void the infotainment warranty and, if interrupted, leave the unit unusable. Keep the traction battery above 30%, don't switch the car off mid-update, and never install APKs from sources you don't trust.

Check your version

Go to SettingsSystemVersion. This method only works if your version starts with 13.1.33. — for example 13.1.33.2511. If it starts with anything else, stop here; the downgrade package is not for your unit.

Prepare the USB drive

  1. Get the package. Download firmware 13.1.33.2404 — the build that still allows ADB access.
  2. Format the drive. Use an 8/16/32 GB USB drive formatted FAT32. Larger drives should be exFAT.
  3. Create the folder structure. On the root of the drive, create BYDUpdatePackage/msm8953_64/ and place the downloaded file inside it, renamed to UpdateFull.zip.
  4. Remove the SD card. If an SD card is in the head unit, take it out — leaving it in makes the update throw an error.

Flash the older build

  1. Insert the drive. With the car switched on, plug in the USB drive (use a USB-A to USB-C adapter if the car only has USB-C ports).
  2. Trigger the update. When the QR code appears on screen, press and hold both the left arrow (Back) button on the steering wheel and the volume roller next to the gear selector for about 10 seconds.
  3. Wait it out. The flash takes 10–20 minutes. Don't press anything and don't turn the car off. When the screen reboots, remove the USB drive.

Unlock native APK installs (optional)

Once you are on 13.1.33.2404, enable wireless ADB with the steps in the next section. If you would rather install BladeWatch from the car's own File Manager instead of over ADB, install PackageInstallerUnlocker.apk once over ADB — after that the head unit accepts APKs copied to a USB drive.

Update back afterwards

After BladeWatch is installed and running, you can go back to newer firmware and your installed apps stay put. Prepare the USB drive exactly as above with 13.1.33.2511 (the most stable build), then pick Upgrade OTG on screen and leave it alone for roughly 15 minutes.

A newer 13.1.33.2602 build exists, but the community guide advises against it: the GPS sensor stops working on that version, which crashes apps that rely on location.

Install with an AI agent (the short way)

Don't fancy doing any of this by hand? Paste the prompt below into an agentic coding assistant — Claude Code, Codex, Gemini CLI, Cursor, and the like — running on a computer that is on the same Wi-Fi network as the car. It fetches both APKs, signs them with one key, installs them over ADB, and walks you through the on-screen steps. If the car isn't reachable it stops and tells you how to switch ADB on in the head unit.

The agent runs real commands on your computer and installs software on your car, so read what it proposes before you approve each step. The prompt deliberately tells it to stop and ask rather than guess, and never to uninstall anything without your say-so. You still need the firmware downgrade first if your engineer code shows a QR code.

Install BladeWatch (https://github.com/andrewloable/BladeWatch) on my BYD DiLink v3 head unit
over ADB. Run the commands yourself, one step at a time, and stop to ask me only where a step
says so.

Facts:
- BladeWatch is TWO APKs and both must be installed: the service host (package
  net.bladewatch.app, file bladewatch-service-host-*.apk) and the in-car UI (package
  net.bladewatch.flutter, file bladewatch-ui-*.apk). They share one Android UID, so both MUST
  be signed with the same key.
- The head unit is reached with ADB over Wi-Fi: adb connect <car-ip>:5555. It is arm64-v8a,
  Android 10 (API 29), reports manufacturer "BYD AUTO", and is not rooted (it does not need
  to be). Always pass -s <car-ip>:5555 to every adb command.

1. Tools. Make sure adb (Android platform-tools), apksigner (Android build-tools) and keytool
   (a JDK) are on PATH; install whatever is missing with this OS's package manager (macOS:
   brew install --cask android-platform-tools android-commandlinetools, then sdkmanager
   "build-tools;35.0.0"; Debian/Ubuntu: apt install adb apksigner default-jdk-headless).

2. APKs. If two already-signed BladeWatch APKs are in the current directory, use them.
   Otherwise download the two *-unsigned.apk assets of the latest release from
   https://github.com/andrewloable/BladeWatch/releases/latest (gh release download
   --repo andrewloable/BladeWatch --pattern '*.apk', or the GitHub releases API), then sign
   BOTH with the same key:
   - Ask me whether I have a keystore. If yes, ask for its path, alias and password. If not,
     create one: keytool -genkeypair -keystore bladewatch.jks -alias bladewatch -keyalg RSA
     -keysize 2048 -validity 10000 -dname "CN=BladeWatch" -storepass <password you choose>,
     then tell me to back that file up: every future update must be signed with this same
     key, or both packages have to be uninstalled first.
   - For each file: apksigner sign --ks <keystore> --ks-key-alias <alias>
     --ks-pass pass:<password> --out <name>.apk <name>-unsigned.apk
   - Then apksigner verify --print-certs on both signed APKs and confirm the SHA-256
     certificate digests are identical. Stop if they differ.

3. Connect. Run adb devices. If the car is already listed, use it. Otherwise ask me for the
   car's IP address and run adb connect <car-ip>:5555. If that fails (including "no route to
   host"), run adb kill-server && adb start-server and try once more: the local adb server
   gets stuck like this while the car is up. If it still fails, show me these instructions
   and wait for me:

   How to switch ADB on in the car:
   a) Put the car and this computer on the same Wi-Fi network, e.g. connect both to a phone
      hotspot.
   b) On the head unit open Settings, find Developer options (usually by tapping the version
      number under About several times) and switch on USB debugging.
   c) That alone is NOT enough on BYD: also switch on the head unit's own Wireless ADB /
      network debugging setting. A BYD system update can silently turn it back off.
   d) Read the car's IP address in the head unit's Wi-Fi settings and tell me.
   e) When the computer connects, the car's screen asks "Allow USB debugging?": tick
      "Always allow" and tap OK.

   Once connected, confirm it really is the car before installing anything:
   getprop ro.product.manufacturer must contain BYD, getprop ro.product.cpu.abi must be
   arm64-v8a and getprop ro.build.version.sdk must be 29 or higher. If not, stop and ask me.

4. Install. adb install -r the service host APK first, then the UI APK. If an install is
   rejected with INSTALL_FAILED_UPDATE_INCOMPATIBLE, INSTALL_FAILED_SHARED_USER_INCOMPATIBLE
   or INSTALL_FAILED_UID_CHANGED, an older BladeWatch signed with a different key is on the
   car: tell me, and only with my OK run adb uninstall net.bladewatch.flutter and
   adb uninstall net.bladewatch.app, ask me to hard-reboot the head unit (hold Volume Down
   for 5 seconds) so its old background daemons die, reconnect, and install again. Never
   uninstall anything without asking, and never touch /data/local/tmp/tor (it holds the
   car's permanent Tor address).

5. Verify. adb shell 'dumpsys package net.bladewatch.app | grep userId' and the same for
   net.bladewatch.flutter must print the same userId; if they differ the APKs were signed with
   different keys, go back to step 2. Then launch the UI:
   adb shell am start -n net.bladewatch.flutter/net.bladewatch.bladewatch_ui.MainActivity

6. Tell me what to do on the car's screen, in this order:
   - Accept the "Allow USB debugging?" prompt that appears on first launch. The app uses its
     own ADB key to start its background daemons; nothing works until this is accepted.
   - In the head unit's BYD Auto-Start settings, UNCHECK BOTH "BladeWatch" and
     "BladeWatch Service". That list restricts auto-start, so unchecking is what allows them
     to start; otherwise nothing runs when the car is switched on. BYD resets this on every
     install, so it must be redone after each update.
   - Hard-reboot the head unit: hold Volume Down for 5 seconds and wait for it to restart.

Report each step's result as you go. Do not make mistakes: read every command's output before
moving on, never guess an IP address or a package name, and if anything is ambiguous, stop
and ask me instead of guessing.

Prefer to understand every step? The manual route is below and takes about fifteen minutes: enable wireless debug mode, connect with ADB, then install both APKs.

Enable wireless debug mode

Follow these steps from inside the car's infotainment system. Keep the phone hotspot active until the APK installation is complete.

  1. Establish connectivity. Connect your car's DiLink v3 head unit to your mobile phone's Wi-Fi hotspot.
  2. Access the engineer menu. Open the native Phone app in your car and dial *#91532547#.
  3. Retrieve identification. The screen will display an IMEI and Chinese text. Note down the IMEI.
  4. Generate the bypass code. On your mobile phone, visit ahmada3mar.github.io/BYD, paste your IMEI, and generate your unique bypass code.
  5. Authenticate. Enter the generated code into the car's dialer, then tap 进入 (Enter).
  6. Configure debugging. Scroll down to TestTools and select it. Enable Debug mode when USB connected, which is usually required as a prerequisite.
  7. Enable wireless ADB. Locate and enable Wireless adb debug switch. If a prompt appears asking whether to allow ADB debugging from your computer or device, select Always allow from this device.
  8. Identify the network address. Go to the car's WLAN settings, tap your connected hotspot name, and open the info icon. Write down the car's IP address, for example 192.168.x.x.

Connect to the head unit with wireless ADB

Make sure your computer is on the same Wi-Fi network as the car. Then run the wireless ADB connection command using the IP address shown in the car's WLAN settings.

adb connect <IP_ADDRESS>:5555

If the connection succeeds, check that the head unit appears in your device list:

adb devices

The device may appear as an IP address followed by :5555. If it says unauthorized, look for an authorization prompt on the head unit and allow the connection.

Install BladeWatch

Skipping the manual route? An AI agent can do all of this for you.

From v1.3.2.0 BladeWatch ships as two arm64-v8a APKs, and you need both:

  • Service host (net.bladewatch.app) — the daemons, recording, surveillance, and BYD integration. No launcher icon.
  • In-car UI (net.bladewatch.flutter) — everything you see and tap. This is the only launcher icon.

The two packages share a single Android UID, which is what lets the UI talk to the daemons over loopback IPC. That only resolves when both are signed with the same key, so always install them as a pair from the same release.

Download both APKs

Install ADB if needed

If your computer does not already have ADB, install Android Platform Tools first. After installation, confirm ADB is available:

adb version

Sign both APKs first

Release builds are published unsigned on purpose, so the signing key never touches CI — Android will refuse to install them as-is. Create a keystore once with keytool, then sign both files with that same key using apksigner from the Android build tools:

keytool -genkey -v -keystore release.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key0

for f in bladewatch-*-unsigned.apk; do
  apksigner sign --ks release.jks --ks-key-alias key0 \
    --out "${f%-unsigned.apk}.apk" "$f"
done

Confirm the two digests match before installing. If they differ, the UI installs but never reaches the daemons:

apksigner verify --print-certs bladewatch-*-arm64-v8a.apk | grep 'SHA-256 digest'

Install both APKs

adb install bladewatch-service-host-*-arm64-v8a.apk
adb install bladewatch-ui-*-arm64-v8a.apk

If you are updating an existing install signed with the same key, add -r to both commands.

Coming from a version before 1.3.2.0, or switching signing keys? The shared UID changes the app's Android UID, so the first install afterwards has to be a clean one — uninstall net.bladewatch.app and net.bladewatch.flutter rather than upgrading over the top.

First-run setup

BladeWatch runs background daemons to keep recording and surveillance alive on the head unit, so the first launch needs two extra steps.

  1. Authorize ADB on the screen. On first launch, accept the ADB authentication prompt that appears on the car's display.
  2. Clear the auto-start restriction for both entries. Open BYD Auto-Start (BladeWatch's setup screen has an Open BYD Auto-Start button) and uncheck BOTH BladeWatch and BladeWatch Service. Two entries appear because BladeWatch is now two APKs, and clearing only the UI leaves the daemons dead. Without this, recording does not start when you switch the car on — you have to open the app every time.
  3. Redo it after every update. BYD wipes the auto-start list on every install, so repeat the step above each time you update BladeWatch.
  4. Hard reboot the head unit. After the first install and run, press and hold the Volume Down button for about 5 seconds and wait for the system to fully restart. This finalizes the installation.

Optional: to view BladeWatch remotely, turn on the Tor Tunnel under Settings → Services. That is the whole setup — no account, no invite token, and the .onion address is permanent across reboots. The first start takes about 80 seconds, then the dashboard shows a QR code. A .onion address needs Tor Browser (or Onion Browser on iOS) — Chrome and Safari cannot open it. The address is not a password, so keep an app password set as well.

Frequently asked questions

Which BYD cars does BladeWatch work on?

BladeWatch is built for BYD vehicles with the DiLink v3 head unit and the panoramic camera system — including the Seal, Seal 5 DM-i, Seal U, Dolphin, Atto 3, Han, and Tang. If your BYD runs DiLink v3 (Android, arm64) and has the 360° panoramic camera, BladeWatch should work.

Is BladeWatch free?

Yes. BladeWatch is completely free and open source under the MIT License. There are no accounts, subscriptions, or in-app purchases.

Does BladeWatch upload my recordings to the cloud?

No. All recordings and data stay on your BYD head unit — there is no cloud upload and no account. Optional remote viewing is direct and peer-to-peer through a tunnel you control.

Is BladeWatch a dashcam, a sentry mode app, or both?

Both. BladeWatch records the BYD panoramic camera as a dashcam while you drive and runs 24/7 sentry-style surveillance with motion and proximity detection while the car is parked.

Can I install BladeWatch with an AI agent?

Yes — see Install with an AI agent. Paste the published prompt into an agentic coding assistant (Claude Code, Codex, Gemini CLI, Cursor) on a computer sharing the car's Wi-Fi network. It downloads both APKs, signs them with one key, installs them over ADB, checks that both packages share a UID, and tells you what to tap on the car's screen. It is told to stop and ask rather than guess, and never to uninstall without your approval.

Why does BladeWatch ship as two APKs?

Since v1.3.2.0 the app is split into a service host (net.bladewatch.app) that runs the daemons, recording, surveillance, and BYD integration, and an in-car UI (net.bladewatch.flutter) that is the only launcher icon. Install both. They share one Android UID so the UI can reach the daemons over loopback IPC, and that only works when both APKs are signed with the same key.

Why are the APKs unsigned?

So the signing key never has to live in CI. Sign both yourself with the same key using apksigner before installing — see Install BladeWatch. Android will not install an unsigned APK.

Is BladeWatch like Tesla Sentry Mode?

BladeWatch brings the same idea as Tesla's Sentry Mode to BYD: 24/7 surveillance that watches the parked car and records when something gets close, with motion and proximity detection. The difference is it runs natively on the BYD DiLink v3 head unit and its 360° panoramic camera, and also works as a dashcam while you drive. BladeWatch is an independent open-source project and is not affiliated with Tesla.

Troubleshooting

ADB cannot connect

  • Confirm the car and computer are on the same hotspot or Wi-Fi network.
  • Confirm Wireless adb debug switch is still enabled.
  • Check that the IP address has not changed after reconnecting to the hotspot.
  • Try running adb kill-server, then adb start-server, then reconnect.

Device is unauthorized

Watch the head unit for an ADB authorization prompt. Choose Always allow from this device, then run adb devices again.

APK install fails

  • INSTALL_PARSE_FAILED_NO_CERTIFICATES means the APK is still unsigned — sign it with apksigner first.
  • INSTALL_FAILED_SHARED_USER_INCOMPATIBLE or INSTALL_FAILED_UPDATE_INCOMPATIBLE means an existing install has a different UID or signature. Uninstall net.bladewatch.app and net.bladewatch.flutter, then install the fresh pair.
  • Make sure both files came from the same release and were signed with the same key.
  • Reconnect ADB and try again if the wireless session drops during install.

The UI opens but everything is empty or disconnected

The UI is running but cannot reach the service host — usually a signing mismatch between the two APKs, or the service host was never installed. Check both are present and share a UID:

adb shell 'dumpsys package net.bladewatch.app | grep userId'
adb shell 'dumpsys package net.bladewatch.flutter | grep userId'

Different values mean the certificates differ. Re-sign both with one key, uninstall both packages, then install the pair again.

Recording or sentry mode stops in the background

  • Open BYD Auto-Start and confirm both BladeWatch and BladeWatch Service are unchecked. BYD re-applies the restriction on every install, so check this again after each update.
  • Hard reboot the head unit by holding Volume Down for 5 seconds after the first install.

After install

Once BladeWatch is installed and set up, disconnect ADB and disable wireless debugging in the engineer menu unless you need it again.

adb disconnect <IP_ADDRESS>:5555

Leaving wireless debugging enabled can make the head unit easier to access from other devices on the same network.