Background
So I got myself one of the fancy new smart watches, a Fossil Sport.
TBH I'm not a watch wearing person, I have no desire for a tiny smartphone on my wrist throughout the day. This is not gonna be a rant or review of the Fossil Sport, but I want you to understand my use case: I run. In the past, running consisted of having this stupid arm pocket strap on my bicep with my phone zipped up in it, then a heart rate monitor strapped to my forearm, and some wireless headphones. I hate it, i hate having stuff on me. However I'm also a data freak who likes tracking all runs run via GPS, watching heart rate, seeing how interval training affects my HR and overall pace performance over time, etc. So here comes a water proof smart watch where I can do all that (GPS, Heart Rate Monitoring), syncs with Google Fit, listen to my music offline, NFC wallet so I can run down to Lassen's for some alcoholic watermelon kombucha, all while leaving my phone behind. PERFECT. That's all I need it for and I've now reduced my "stuff" to just a smartwatch and BLE headphones.
Well it didn't take long for me to get pissed off about it (I'm never happy...ever). It was laggy at times by 400-600 ms, which is just enough of a delay to make someone like me insane. Then to top if off, I was messing around with the Wear OS companion app that goes on your phone and I saw this when I looked at the Advanced Settings -> Watch Storage (and scrolled down a bit):
DAFUQ?!?
The watch had visibly come with no bloatware (from the Wear OS installed apps POV), but there was obviously hidden/disabled Tic/Mobvi, Ali Express Pay, and a bunch of stuff in Chinese which I sure as hell don't need and cant read anyway. Now if you add all that up, its probably less than 100MB. However this is a smart watch which boasts 2GB of storage....which is already eaten up by Wear OS and other apps. In fact with just factory settings you only have about 1GB free. So were back to the early days of Android with smart watches, every byte counts. Because (remember my use case), those precious megabytes equate to roughly a minute of music each I could be listening to while running. I had a bit of motivation, but not much to do anything other than read at this point.
So I tried googling the interwebs as to WTF this stuff was an why, and you start finding many Reddit posts about most Fossil, Tic/Mobvi, etc watches all having this same crap on them. While I did not see anyone show proof of the "why" (its not lie the OEMs are gonna come out and say it), the crowd sourced consensus was, Fossils manufacturer makes many of the WearOS smartwatches for them and other "competitors" and to simplify configuration management, most watches get the same software load and modifying it with ADB scripts after the fact to enable or disable certain apps. I'm not in China, so all of those Chinese apps are disabled. I don't have a Tic watch, so the Tic apps are disabled. Some people even believe the location service enables them if you show up in China. Who knows. Overall I'm not a big fan of folks on message boards running with theories as fact. I just want to leave those ideas here as being "alright" hypotheses. At the end of the day, Fossil makes the watch and decided to leave it on there, so it's on them for not disclosing the space advertised is taken up by garbage.
I slowly stopped caring about the disabled apps (which you could not uninstall) until something weird happened. I got a notification on my watch from Tic Health that I was only 50 steps away from my goal. WTF? One of those disabled apps went active (possibly sentient too and is currently contributing to the rise of the machines)
Well fuck that, give the machines an inch and they'll take a data mile (possibly enslave or kill us all too). I don't know how Tic Health got enabled (I didn't do it), but now I have no desire to let anything just be. That hidden bloatware had to go and I wanted to speed up the watch if I could, given that bit of lag was driving me nutz.
Personal disclaimer incoming... Its been years since I've hacked my android devices because as soon as the Pixel XL came out, I didn't need to anymore. Before that, I was living a life of Motorola Droid, Turbo, Turbo 2, ASUS Transformer TF101... and would have to go through great lengths to crack the bootloader, root the device, and get something like CyanogenMOD on there (or even just remove bloatware). That being said, I'm rusty with ADB and basically just read through the online manual. If you see me doing something inefficient (or stupid) lemme know in the comments below and I'll gladly update this log. So until Google releases a Pixel Watch which actually comes off the shelf pristine, we'll be having to tweak/hack these 3rd party smart watches...to make them better... (well those of us who choose to live in the Google ecosystem vs the Apple ecosystem, different strokes for different folks).
At the time of writing this, I have a stock Fossil Sport, Running Wear OS 2.2, no update H. The packages I end up removing are specific to my watch, but there is no reason these instructions shouldn't work for most Wear OS watches (especially most Fossil brand smart watches). Also this goes without saying...but if you mess your device(s) up, not my fault. Your fault. You are taking the leap of faith in modifying your device beyond OEM intentions, meaning you should feel comfortable owning it this way. I don't believe this has any adverse affects and it hasn't for the couple of days I've been running it this way now.
Performance Boost
This first modification is actually the easiest and can be done on the watch itself without any extra tools, debuggers, etc.
- Enable developer settings on your watch
- Open the watch's Settings.
- Tap System > About.
- Scroll to Build number and tap the build number seven times.
- A dialog will appear confirming that you are now a developer.
- Swipe back to the main settings menu and scroll to the bottom and select "Developer Options"
- There's a whole lot of really nice options you can tweak in here. I recommend that you do not...unless you really understand what you are doing
- Scroll down to Transition Animation Scale
- Change it to Animation Off
- Swipe back
- Scroll down to Animator Duration Scale
- Change it to Animation Off
- Swipe back to main watch face
- Have a beer
What you just did is nullify the delay which is inserted in to the various UI animations. If you find that it messes with anything, you can always go back and change the delay to "Scale 0.5x" (by default it was set to scale 2x). I don't what the hold up is, many with beta versions claim H update or 2.3 made things better... but until it does get rolled out, eliminating the aesthetic delays on a watch that already has some lag really brings some performance improvements. I have no complaints now with the responsiveness.
Remove Bloatware
The second modification is going to be a bit more involved, but well worth it.
- Hardware Requirements: Watch, Paired Android Phone, Computer, USB Cable
- Software Requirements: Linux OS, Android Debug Bridge (ADB),
Okay you technically don't need Linux, you can do this from Windows but I am not going to list instructions for how to install, setup, and use ADB from Windows. If you run Windows, its honestly faster and easier to spin up an Linux VM and install ADB than to do it natively. So my OS of choice is Ubuntu 18.04 LTS, lets go with that.
Install ADB & Start The Server
From the magic of your Ubuntu command line...
//Install Android Tools
$ sudo apt-get install android-tools-adb android-tools-fastboot
//Start the ADB Server
$ sudo adb start-server
//If you have issues, try stopping then starting the server again. To stop...
$ sudo adb kill-server
Enable Developer Mode & Debugging on Watch/Phone over Bluetooth
Google made it very clear how to do enable debugging and developer options and it would be a waste of my time and yours to copy and paste all of it: https://developer.android.com/training/wearables/apps/debugging
Follow the instructions in the Debug Over Bluetooth section to...
- Enable developer options on your watch
- Enable developer options on your phone
- Enable USB Debugging on the phone
- Enable ADB/Bluetooth debugging on the watch
- Enable Bluetooth Debugging on the phone
- Connect the debugger to the watch
- Don't be confused by the step earlier when you started the ADB server. On mine it was running on port 5037. That is fine. Starting the service informs you just what port ADB is running on. Continue with the adb forwarding steps because we are going to use port 4444 as a TCP to Bluetooth port forwarding service to the watch.
- Go ahead and confirm debugging request on your watch and on your phone
$ adb forward tcp:4444 localabstract:/adb-hub
$ adb connect 127.0.0.1:4444
Now even though debug over WiFi is an option, I don't recommend doing it. Chicken and the egg problem. You don't have full control of the watch yet, so it's going to manage the radios for battery performance however it so damn well pleases. If you connect over WiFi, it may decide it wants to turn WiFi off and only use BT. That could be really annoying. Lets avoid that and just debug "through" the phone and over the BT radio instead since it will always maintain that interface between the phone and watch. So we are trading off an easier setup for interface reliability.
If you did everything as the steps told you, your Wear OS companion app will now show...
Host: connected Target: connected
Uninstall Bloatware Without Having Root Privleges
First things first, I'm not a big fan of YOLO. Do recon on your watch first, google the packages to ensure they are truely something you want to get rid of. So lets start by getting a list of those packages, however I want them sorted out by which are enabled (-e flag) and disabled (-d flag) and output them to a file. If you are curious about the different filtering options go here and CTRL-F "list packages"
hax0r@ubuntu:~/Desktop$ adb -s 127.0.0.1:4444 shell pm list packages -e > enabled_packages.txt
hax0r@ubuntu:~/Desktop$ adb -s 127.0.0.1:4444 shell pm list packages -d > disabled_packages.txt
So combing through here's what I found...
Enabled Packages
package:com.android.cts.priv.ctsshim
package:com.google.android.ext.services
package:com.google.android.googlequicksearchbox
package:com.android.providers.calendar
package:com.android.providers.media
package:com.fossil.twm
package:com.google.android.ext.shared
package:com.google.android.clockwork.flashlight
package:com.fossil.wearables.watchfaces
package:com.fossil.charge.darter
package:com.google.android.wearable.setupwizard
package:com.android.providers.downloads
package:com.google.android.wearable.overlay.gms
package:com.fossil.elabel
package:com.qualcomm.qti.auth.fidocryptoservice
package:com.android.defcontainer
package:com.android.vending
package:android.autoinstalls.config.google.wear
package:com.google.android.clockwork.nfc
package:com.google.android.clockwork.twm
package:com.android.certinstaller
package:android
package:com.google.android.apps.wearable.settings
package:com.android.nfc
package:com.android.backupconfirm
package:com.google.android.deskclock
package:com.google.android.wearable.overlay.home
package:com.google.android.theme.darter.fossil
package:com.android.statementservice
package:com.android.providers.settings
package:com.google.android.apps.wearable.bluetooth
package:com.google.android.music
package:com.google.android.apps.wearable.systemui
package:com.google.android.clockwork.gestures.tutorial
package:com.android.inputdevices
package:com.google.android.clockwork.brightness
package:com.fossil.wearable.pay
package:com.google.android.apps.maps
package:com.google.android.apps.fitness
package:com.android.server.telecom
package:com.android.keychain
package:com.google.android.packageinstaller
package:com.google.android.gms
package:com.google.android.gsf
package:com.google.android.partnersetup
package:com.google.android.apps.wearable.bugreportsender
package:com.google.android.wearable.ambient
package:com.android.managedprovisioning
package:com.mobvoi.wear.health.aw
package:com.google.android.buttons.darter.fossil
package:com.google.android.clockworkicons
package:com.google.android.clockwork.leswitch
package:com.google.android.apps.wearable.retailattractloop
package:com.google.android.apps.wearable.phone
package:com.google.android.apps.translate
package:com.fossil.wearables.tos
package:com.cei.servicetool
package:com.fossil.oemsetup.darter
package:com.google.android.wearable.app
package:com.android.cts.ctsshim
package:com.google.android.apps.handwriting.ime
package:com.google.android.keep
package:com.android.shell
package:com.android.wallpaperbackup
package:com.android.providers.blockednumber
package:com.android.providers.userdictionary
package:com.android.location.fused
package:com.android.bluetooth
package:com.qualcomm.timeservice
package:com.android.providers.contacts
package:com.google.android.wearable.frameworkpackagestubs
package:com.android.connectivity.metrics
package:com.google.android.inputmethod.latin
Remember that Tic Health which Skynet enabled?
package:com.mobvoi.wear.health.aw
Yeah, that one's on the shit list now (Tic is really Mobvoi).
In addition, lets look at the disabled packages, because many of those are too...
package:com.google.android.wearable.smarthome
package:com.dianping.v1
package:com.sogou.map.android.maps
package:com.sdu.didi.psnger
package:com.mobvoi.wear.fitness.aw
package:com.mobvoi.ticwear.sidewearvoicesearch
package:com.mobvoi.wear.social.aw
package:com.mobvoi.wear.account.aw
package:com.google.android.apps.walletnfcrel
package:com.mobvoi.wear.appsservice
package:com.google.android.clockwork.remindersle
package:com.google.android.clockwork.hotwordle
package:com.google.android.wearable.reminders
package:com.mobvoi.wear.neteasemusic.aw
package:com.google.android.inputmethod.pinyin
package:com.mobvoi.ticwear.aw.appstore
package:ctrip.android.view
package:com.gotokeep.androidwear
package:com.amberweather.watch
package:com.eg.android.AlipayGphone
So I'm gonna play it safe and say even though there are disabled packages from Google, we're gonna leave those alone and just deal with all 3rd party disabled packages. This brings the final list of bloatware down to...
package:com.mobvoi.wear.health.aw
package:com.dianping.v1
package:com.sogou.map.android.maps
package:com.sdu.didi.psnger
package:com.mobvoi.wear.fitness.aw
package:com.mobvoi.ticwear.sidewearvoicesearch
package:com.mobvoi.wear.social.aw
package:com.mobvoi.wear.account.aw
package:com.mobvoi.wear.appsservice
package:com.mobvoi.wear.neteasemusic.aw
package:com.google.android.inputmethod.pinyin
package:com.mobvoi.ticwear.aw.appstore
package:ctrip.android.view
package:com.gotokeep.androidwear
package:com.amberweather.watch
package:com.eg.android.AlipayGphone
Here's my tale of caution because if you've never messed around in ADB and shot yourself in the foot, then you haven't lived. You may be tempted to clean house in your active / enabled packages too. DONT. They're enabled because your watch needs them to operate, there's always going to be some 3rd party stuff from Fossil in there for it to function properly. Given there are disabled 3rd party packages, they obviously aren't needed. However the way we are going to uninstall them is the safe route.
I say the "safer" route, in that I come from a time when removing bloatware would cause a CRC to fail and future updates would stop from the OEM, also sometimes your device is locked and you would need true root access. I don't want to chance this or go through the trouble of rooting the device. Remember you have developer debug access through ADB, its privileged access, not true root control of the device. So we're gonna compromise and keep the cache and package remnants there after install. This means we'll free up about 70-80% of the space from removing the package, but if the OEM does any kind of remote integrity check before pushing a firmware update it will appear the disabled apps are still there (but barely taking up space). ;)
With that said, lets open a shell.
hax0r@ubuntu:~/Desktop$ adb -s 127.0.0.1:4444 shell
darter:/
"darter" is the internal development name of the device, just like AND!XOR has internal device names such as ManBearPig, Jerry, ScarryTerry, PickleRick, etc. If you see that, you are now have a shell on the watch and no longer have to keep typing the "-s 127.0.0.1:4444 COMMAND". So lets get to uninstalling those bloaty packages but were going to use the "-k" switch in order to keep the data and cache directories. Each uninstall command can take anywhere from 30 seconds to a couple minutes. I recommend having a beer or two handy.
darter:/ $ pm uninstall -k --user 0 com.sogou.map.android.maps
Success
darter:/ $ pm uninstall -k --user 0 com.dianping.v1
Success
darter:/ $ pm uninstall -k --user 0 com.sdu.didi.psnger
Success
darter:/ $ pm uninstall -k --user 0 com.mobvoi.wear.fitness.aw
Success
darter:/ $ pm uninstall -k --user 0 com.mobvoi.wear.health.aw
Success
darter:/ $ pm uninstall -k --user 0 com.mobvoi.ticwear.sidewearvoicesearch
Success
darter:/ $ pm uninstall -k --user 0 com.mobvoi.wear.social.aw
Success
darter:/ $ pm uninstall -k --user 0 com.mobvoi.wear.account.aw
Success
darter:/ $ pm uninstall -k --user 0 com.mobvoi.wear.appsservice
Success
darter:/ $ pm uninstall -k --user 0 com.mobvoi.wear.neteasemusic.aw
Success
darter:/ $ pm uninstall -k --user 0 com.mobvoi.ticwear.aw.appstore
Success
darter:/ $ pm uninstall -k --user 0 ctrip.android.view
Success
darter:/ $ pm uninstall -k --user 0 com.gotokeep.androidwear
Success
darter:/ $ pm uninstall -k --user 0 com.amberweather.watch
Success
darter:/ $ pm uninstall -k --user 0 com.eg.android.AlipayGphone
Success
So I tried to get clever and failed when I attempted to use the wildcard * for all of the mobvoi packages... I have no idea why it doesn't work. Someone who is smarter on ADB could explain, but I can't. It was also late and only 16 packages, not really a huge deal. Figured I'd let you know that.
darter:/ $ pm uninstall -k --user 0 com.mobvoi.*
Failure [not installed for 0]
So now that the uninstall is complete, we need verify our mission was successful before backing out and shutting everything down.
darter:/ $ exit
hax0r@ubuntu:~/Desktop$ adb -s 127.0.0.1:4444 shell pm list packages -d
package:com.google.android.wearable.smarthome
package:com.google.android.apps.walletnfcrel
package:com.google.android.clockwork.remindersle
package:com.google.android.clockwork.hotwordle
package:com.google.android.wearable.reminders
package:com.google.android.inputmethod.pinyin
Woot! Alright now lets get to the most important part, undoing what we did to get back to normalcy.
Clean Up
Shut Down ADB
$ sudo adb kill-server
- Just as you followed the Android guide for enabling USB and Bluetooth debugging, go back and untoggle those items. You do NOT want to leave USB and Bluetooth debugging enabled on either your watch or phone.
- You can't undo developer options, you've walked out of the cave, there's no going back. But its just an extra menu which sits there now.
- Hold down the crown button on your watch for 15 seconds to reboot. You have to do this to remove some of the stuff which occurred during uninstallation.
- Once its back online, use your WearOS Companion App and take a look at the Watch Storage again. In my case i freed up about 57 MB. That's at least another offline album of running music (like Weezer's new awesome Teal Album). Also those apps don't appear anymore (because their size is zero). On your watch if you look at all apps installed (not through Play Store, but through Settings App Info) they will appear but with size zero bytes and if you expand detail it will say App Is Not Installed. I call this Friday night hack a success. If this write up helped others in any way with their Wear OS frustrations please lemme know. Also by all means I hope this doesn't give the impression the Fossil Sport is in anyway a bad watch, its really good. Especially if you are getting it as a fitness wearable. Some of us just like to hack things and make them better.
Discussions
Become a Hackaday.io Member
Create an account to leave a comment. Already have an account? Log In.
So I have an 8 gig fossil Carlyle. I've done the animation thing. I can usually get ADB working. I'm wondering if I will notice a performance boost with debloating or just free up some memory?
What I'd really like is to get phone calls working on my watch, make the notifications more attention getting, and get the google assistant working fully. Does anyone know why "OK Google" works once and then you have to press buttons from then on? I want to like the device. It is beautiful, but it works poorly enough that I'm wondering if I should go back to Samsung.
Are you sure? yes | no
Interestingly I can see the bloatware apps in the watch in the "appinfo" but when I run the adb command to see disabled apps - it shows me only the android.clockwork.gestures.tutorial which I really disabled... hmm... (those other apps are not between the enabled apps either)
Anyone with similar experience? Can we somehow get rid of these? Since they are not disabled or enabled...?
Are you sure? yes | no
I have just bought the Fossil Gen 5. I have the same thing. Looks like those packages are not disabled. They are listed as "uninstalled packages" instead. From the link provided in the post, i could list those apps with the command: adb -s 127.0.0.1:4444 shell pm list packages -u
From google's page: -u: Also include uninstalled package
So if you want to filter, you can use grep: "adb -s 127.0.0.1:4444 shell pm list packages -u | grep mobvoi" for instance, and now they are displayed.
But, from this point I dont know how to remove them. Since they are "uninstalled" the uninstall command makes no effect. I would like to get rid of it anyways.
Let me know if you guys know how to do it. Because these apps are still listed in Apps info, although they have 0KB of storage.
Are you sure? yes | no
HOW can this be undone? Will a hard reset set it back to normal?
Are you sure? yes | no
Thanks Hyr0n! It worked for me the first time, and unfortunately i had to reset my phone and watch. Now it never is able to connect to the adb server. Tried clearing data, revoking adb permissions, it always says unable to connect/ device not found.
thanks in advance. please help
Are you sure? yes | no
Thank you Hyr0n! This was very useful and worked perfectly on Fossil Carlyle HR
Are you sure? yes | no
Worked great. Thanks a lot!
Are you sure? yes | no
Worked perfectly. Thanks!
Are you sure? yes | no
This command works on linux
adb -s 127.0.0.1:4444 shell pm list packages com.mobvoi | cut -d ':' -f 2 | tr -d '\r' | xargs -L1 -t adb -s 127.0.0.1:4444 shell pm uninstall -k --user 0
you just need to change com.mobvoi to whatever you want it to search for
here is the stack overflow thread that I used to make this snippet of code
https://stackoverflow.com/questions/44973594/uninstall-multiple-android-packages-using-adb
Are you sure? yes | no
After running these commands, my watch did feel a lot snappier, however, I found that the apps were still installed in the Settings -> Apps & Notifications -> App info -> System apps (all the way down). From there I found out the apps were still there and I disabled them from the ui. I think this is also possible to do without doing any ADB stuff, simply disabling the system apps. Fully uninstalling will never work as they're system apps, but disabling removes the part of the app stored on /data and only leaves the apk in /system.
Are you sure? yes | no
I removed com.fossil.charge.darter and for the first time battery stats in WearOs App seem to work properly and the massive battery drain seems to be gone for now.
Are you sure? yes | no
Here's a workaround for uninstalling all packages matching a substring:
for P in `pm list packages | grep mobvoi | sed -e 's/package://g'`; do pm uninstall -k --user 0 $P; done
Replace 'mobvoi' in the grep with whatever substring you want to match.
Are you sure? yes | no
Got same watch. Also unistalled fossil packages which greatly improved responsiveness. Please try and reply.
Uninstalled:
com.fossil.twm
com.fossil.wearables.watchfaces
com.fossil.wearables.mk
com.fossil.wearables.ms
P.S.: Opening settings and going to installed system apps goes instantaneous now.
Are you sure? yes | no
Commands run faster if screen is on; best combined with keep screen on when charging option.
Are you sure? yes | no
After I did this, the Wear OS app on my phone crashes whenever I go to "Watch Storage" under "Advanced Settings". Any idea why that might be? I tried rebooting both my watch and my iPhone but it still happens
Are you sure? yes | no
Wow, impressive due diligence on ensuring the stuff you're removing is actually bloatware. Like you I haven't had to go digging so far under the Android hood in a few years but may make the trip for a Fire tablet following this example Thanks for posting!
Are you sure? yes | no