I reverse-engineered my $20 smartwatch to sync it with Google Health Connect
I have a Green Lion GL-SWUL49, a smartwatch I bought for about $20. For the price it does a lot. It counts my steps, tracks my sleep and reads my heart rate.
The problem was the app. The only way to see any of that data was GreenLion's own app, and honestly, it was ugly. Generic screens, confusing flows, the kind of app you only open because you have to.
What bugged me more was the data. The app wanted access to just about everything on my phone, and I had no idea where my heart rate and sleep were ending up. The company behind it is registered in Dubai and makes the watches in China, and it just felt like my data was going somewhere I couldn't see.
And it doesn't sync with Google Health Connect either, the place on Android where health apps share their data, so my steps and sleep never showed up anywhere else on my phone.
So I decided to build my own app for it. I called it Tether.
Reverse engineering the watch's Bluetooth
The first thing I checked was Gadgetbridge, the open-source app that already talks to a lot of watches. No luck, it has no driver for this one. The watch is made by a company called NJJ, and it speaks its own language over Bluetooth.
Next I looked inside the GreenLion app, hoping to read how it talks to the watch. Dead end. It's wrapped in a packer, so the real code only shows up in memory while the app runs. To get it out I would have had to root my phone, and I didn't want to go there.
So I listened instead. Android can record every Bluetooth packet your phone sends and receives. It's called the Bluetooth HCI snoop log, and it's a switch in developer options. I used the GreenLion app as normal, pulled the log off my phone, and read the conversation between the app and the watch. It turned out to be a simple Bluetooth Low Energy protocol: a start byte, a command, a length, the data and a checksum. Once I could read that, a small debug app could connect, ask for the battery and send any command I wanted to try.
For the digging I used REA: Reverse Engineer Anything, an open-source MCP for reverse engineering binaries, apps and how they behave at runtime.
The breakthrough came from an older app by the same maker, M Active Pro, which ships its code without the packer, so it decompiles cleanly. Reading it gave me the layouts for history, settings, watch faces and more. I checked every one against captures from my own watch before trusting it, because I didn't want a single wrong number going into a health record.
Everything the watch can do, now in Google Health Connect
Once the watch was talking, the list grew quickly. Steps, sleep stages, heart rate, blood oxygen, blood pressure and workouts now go to Health Connect. From the phone I can set the step goal, reminders, alarms and the watch's language. Notifications and calls reach my wrist, and I can hang up from the watch. There's find my watch, find my phone, a camera shutter, weather, GPS workouts that use the phone's GPS, and two little motion games where the watch is the controller.
And the crazy part is that the watch could do all of this from day one. Every one of these features was sitting right there on my wrist the whole time, buried under an app I never enjoyed opening. Finally getting to use them properly felt like unboxing the watch for a second time!

Some things I chose not to build. Updating the watch's firmware over Bluetooth can turn a working watch into a brick, and the maker's server already lists my version as the latest, so that code came out.
I did ask myself whether to put it on the Play Store. I looked at the numbers first, and they said no. None of the top ten smartwatch apps make money, most people searching use other brands, and most of the demand for NJJ watches is outside the US. So for now Tether lives on my phone.
Designing it with Material 3 Expressive
The design follows Google's Material 3 Expressive. The watch is the biggest shape on the home screen, a puffy green shape that springs into a twelve-sided cookie when it connects, with the battery as a wavy ring around it. Reaching my step goal grows a little sun badge with one buzz, once a day.

One bug could have wiped all the contacts on my watch. With an empty contacts list in the app, the main button read "Clear contacts on the watch" and wiped the watch in one tap! Now the empty screen helps you add a contact, and clearing asks first.
A health coach built on Claude
Then I wanted to ask questions about my health, not just look at charts. But first the data had to be safe, because health data is far too useful to risk losing. So the history moved into a proper database on the phone, kept for good instead of trimmed.
I added a coach, a chat built on the Claude API with Anthropic's Java SDK that runs on my own Anthropic key and can read the health data Tether keeps on the phone. Ask it how you slept this week and it looks at your actual nights before it answers, and it shows you which data it read. It can also set a new step goal or a reminder on the watch.
It also costs me nothing extra. A Claude Max subscription now comes with free API credits every month, and I wasn't using mine for anything else, so the coach runs on those.

Your health data stays on your phone unless you ask the coach something. Then the question and the data it reads go to Anthropic, and the app tells you so. The coach remembers things you tell it about yourself, like a weight goal, and you can see and delete every memory. And if you type something that sounds like an emergency, a card with Uganda's emergency numbers comes up, whatever the model says.
Where it is now
Today Tether syncs my watch and sends my data to Health Connect. When I turn on Do not disturb on my phone, the watch goes quiet too, and it goes back to normal when I turn it off. It also draws its own watch faces. They're inspired by the Apple Watch but they're my own designs, and since the watch can only draw the time by itself, Tether draws the rest on the phone and sends it over.

This afternoon I deleted my test build and installed the real one, to use every day.
It started as "why can't my $20 watch talk to Health Connect?" What a time to be alive. You can now reverse engineer just about anything you own, and make the software and hardware in your life truly personal.
Thank you for reading. Tschüss 🤓