The second half is simple but requires a change on the device side - if an application needs feature X, Y and Z, then the choices shouldn't be limited to grant access or not install the application, but there should be a third choice per each feature called "fake that access being granted".
If an app claims to need access to my SMS messages, then there are two reasonable options:
1. I want the app to read my SMS, as it does something that I want with them; so I enable that feature.
2. I don't want the app to read my SMS for whatever arbitrary reason that doesn't matter and doesn't need to be justified to anyone. If the app cooperates with the refusal, then it stops at that, but if the app wants to read my SMS against my will (and, say, tests this ability to enable some unrelated feature) then that's hostile behavior and all of my hardware and software should assist me in thwarting that hostile behavior - e.g. by simulating fake data to the app, by falsely claiming to have sent SMS / made a call, etc.
The other options (including the current scenario where my device cooperates with the app developer against me) aren't reasonable and should be eliminated.