Apple/Google could end this tomorrow by implementing permission systems that allowed users to change the data received by apps. A workable user friendly interface might be "location pinning", where you could check a box to store your current location and keep reporting that location until you said otherwise. And if app developers insisted on fighting back and inferring whether data wasn't noisy enough, the OS could easily step up its game by adding in synthesized drift, even across multiple users.
The problem is that smartphone OS developers are trying to serve two masters - their users, but also the surveillance-minded app developers. They're pretending it's possible to remain neutral in the face of a huge power disparity, but what they're actually doing is forcing the user to remain open to inspection by hostile code. Even LineageOS stonewalled the patches to support microG instead of simply accepting them into the state of the art and moving on!
If we as users want to be in control of our own devices (and for our society to not turn into a totalitarian shithole, we really do!), then we need to accept the worthiness of lying. No matter who it was written by, the code on a user's device should be working for the interests of the user. App developers already have a place to run the code that represents them - on their own servers.