As Sid encouraged, I'll convert my comment to an answer -- while merging in details from the other comments:
There are mainly two ways the SDCard is addressed from within apps:
- hardcoded path (e.g.
/sdcard/funnyapp
)
- using Androids API, i.e.
getExternalStorageDirectory()
While 1. might fail if the SDCard is mounted to a different place, 2. would lead the app to store things in the "first" SDCard (on devices with internal SDCard, that means internal SDCard, on others external). But both cases share the fact: if the app doesn't offer a configuration option, there's nothing you can do to change that. Android does not offer a corresponding setting, and Symlinks don't work on SDCards (due to file system limitations).
Same applies to the storage used for the app itself, as Sid wrote pointing to Android support documents (see also the developers documentation on App Install Location for this). While in most cases one can move an app using the App2SD feature built into Android, the developer can overrule this so his app cannot be moved.
As for John's comment, this wouldn't really work. Still a little explanation on what he most likely meant: Using "root powers", you could change ownership of all files and directories. So his idea probably was to make all things on your SDCard owned by root, and only readable to others. This wouldn't work for multiple reasons:
- This would make things even more complicated to you (as you couldn't write either without becoming root before, every single time).
- You could not do that on directory level (e.g. doing it for every single directory except for one with a "fantasy name" like e.g. "MyOwnDocs", where you could store your stuff without the trouble from the previous argument), as the file system on the card (FAT) does not support that.
- It could somehow if you use a script to remount the card read-write each time when you want to write to it, and make it read-only again once you're done. But again, this complication most likely isn't worth it. In addition, some apps might crash with a read-only SDCard, as they (for good reasons) don't expect an SDCard present but not writable.
TL;DR
So in short: If the apps cannot be configured such themselves, there's no way to accomplish this (except for re-writing those apps).
/sdcard/funnyapp
, or usinggetExternalStorageDirectory()
(which is how it should be done) and appends/funnyapp
(or whatever directory), you could play with symlinks (linking that location to internal storage) -- but even that will most likely fail, as symlinks will be "not supported" by the "sdcard's" file system.