Android Storage Strangeness

Background

My current Android phone has some hardware issues with the connector to the GPS antenna so it is a bit marginal in on satellite based location in general. In addition, the ROM I am running is derived from LineageOS which has apparently disabled the use of GLONASS satellites when computing location. So the overall effect is very poor satellite based location in terms of both time to first fix and overall accuracy after first fix.

I thought I’d try another non-LineageOS based ROM that supports the microG replacement for Google services to see if it did any better with respect to GLONASS support. But I ran into issues that made me back off.

And then I found those same issues when I re-installed my old ROM.

So the issues were in setup (operator error) more than in the ROM. But it has taken me a while to figure out what I was doing wrong (some required watching logcat for errors which I suspect an average user won’t be doing). I thought I’d document it so I would be less likely to make the same mistake again. And maybe help someone else who wondering what the heck is happening on their phone (I think this can happen even with a factory stock ROM).

Android Storage

“Internal Storage” is what is built into the phone at the factory and can’t be upgraded. It is partitioned into various functional areas with a data partition that holds the user’s data (apps, settings, app storage, etc.).

Many phones have a slot for a microSD memory chip. Android can use this in two different ways:

  1. As “shareable” or “portable” storage it gets formatted as DOS FAT32. Android does not trust this as secure so you pretty much have to manually set things to use it. Typically this will be for things like photos, music and videos.
  2. As “adopted” or “internal” storage it gets formatted as F2FS (at least on my phone) and has full disk encryption with key specific to the phone. Since it is encrypted and paired to the phone Android trusts it more and tries to automatically use it to spare the limited internal storage. Specifically it will default to installing new apps on the microSD card.

A Problem With Adopted Storage

For security and privacy reasons, I like to have the microSD card “adopted”. When you do this, as mentioned above, the default app install location changes to the microSD card. This is great if you are trying to save space on internal storage. But. . .

The problem is that any widgets or apps that need to have administrative privileges need to be on real internal storage.

So the lock checking app that I install to erase my phone if someone fails to guess the correct password too many times failed its setup with no error message. I had to use logcat to see the system error message to figure that out.

And none of the widgets I installed were visible to select when arranging the various launcher screens. I spent a good deal of time trying to make sure that I had actually installed the widgets and that they were stated to be compatible with my version of Android before I figured this out. There were no error messages that I could see for any of the widgets, either on install or when trying to configure them.

In addition, the launcher was forgetting many/most of the apps and groups of apps I had arranged my screens with. I think this is a timing issue as the launcher is obviously up and running before the microSD card adopted storage is properly decrypted and mounted. So the launcher was trying to access things that were not yet accessible and the obvious choice from a programmer’s point of view would be to remove them from the display. Nonetheless, it seems that if you want to have an app, or group of apps, you place on a launcher screen survive a reboot you better make sure they are installed on internal storage and not on adopted storage.

No Normal User Control?

Now my issue is that I do not see a place in the Launcher or system settings to set the default install location. So I am reduced to moving each app or widget that I care about from the microSD card to internal storage. And I am likely to forget all about this when I install some other app or widget six months from now.

And, finally, I guess I should spend another day or two going back and retrying the other ROM to see if it helps my satellite based positioning by actually using the GLONASS satellites like the factory ROM did. But I just don’t have the time or motivation to do that now.