SharedPreferences has been in the framework and recommended since day 1. However, it has some hidden nuances and pitfalls that can lead to flakiness in production.
Learn when you should use it and how to write robust APIs with it.
Unlike an old Linux kernel running the same software on an unchanging metal machine somewhere, new devices are being shipped running old Android. Google Glass EE still runs KitKat. Even if you are aggressive, you probably still have a minSDK of 21/Lollipop.
be widely available for a year or two. Hardware is hard and inflexible once shipped, you are building software that is sold on a shelf in a store. Your job is to calculate all the possible tradeoffs to solving a problem, and then make a decision on behalf of all of your users forever.
the user while being versatile enough for many use cases. Silently handle as many failure modes as you can while informing your consumer when things do go wrong. Be at least as performant but hopefully better than a naive hand-rolled solution. Operate safely in a shared environment. Make hard engineering decisions on behalf of your user.
on probably has better than average flash. The store is serialized and written as a whole. Any single successful write will persist any pending changes. SharedPreferences (especially in Pie) tries to do the right thing and tell you when things fail.
offline storage of transaction data. Just use java.io.File for authentication tokens and such. Okio is nice for bigger files, streaming and/or partial reads. The major image libraries all have great caching layers. If you like being sad, take a look at the source code for AtomicFile!