External Storage Moved. Again.

For those of you still in the habit of hard-coding in root paths like /sdcard and /mnt/sdcard , please be advised that on Jelly Bean devices, external storage is now at /storage/sdcard0 . Links (not sure if they are symlinks or hardlinks) are set up so the legacy paths still work.

Of course, using the methods on Environment are the preferred way of dealing with this in production apps. However, if you are scripting anything (e.g., automated adb push from your desktop), you will need to take this into account. Notably, adb push does not seem to follow the links, so you will need to actually change the adb push commands (and, presumably, adb pull as well).

On the bright side, the fact that there is actually a digit in the name suggests that in some future Android release (K?), multiple volumes of external storage will be officially supported by the SDK, much to the delight of developers who have been hacking workarounds for getting at alternate data stores (e.g., USB thumb drives).

Learn second-generation Android app development — with Kotlin and the Android Jetpack — through CommonsWare’s Android app development training!

— Jul 30, 2012