Which Android version supports exFat, if at all? The web seems unclear about that. Thanks!
3 Answers
It seems that, according to plugable - Adding MicroSD and USB Storage Support to Android Devices, it's been supported since KitKat (whether using apps or not) but (as always) it's down to the OEM's discretion if a device can run it.
The several USB OTG apps for Android include various levels of support for different disk formats. Recent Android versions typically support FAT and EXT3/4 out of the box, and may support read-only NTFS mode on some devices. NTFS write, HFS+, or exFAT will require other adding driver support for these additional formats, and may not be supported by all applications.
[...]
On our example Nexus 5 with root access on stock Android 4.4.2, using StickMount (free to try) is easy, and enables access to FAT, exFAT, and NTFS formatted storage, even when all three exist on the same storage device. The Nexus 5 supports USB OTG Host mode without any extra apps or work, as confirmed by USB Host Diagnostics.
Chances are, if a device supports SD cards bigger than 32GB, it supports SDXC, which has an exFAT filesystem
Type of card Max Capacity File System Backwards Compatibility SD 2GB FAT32 SD SDHC 32GB FAT32 SD, SDHC SDXC 2TB exFAT SD, SDHC, SDXC
Table from Android Authority - High capacity microSD cards and Android
-
That makes sense, also the OEM's omission of support if a device does not have an SD card reader. Commented Nov 29, 2016 at 10:23
-
11I have found my Pixel in 2018 on Android 8.1 does not support exFat. Commented Aug 20, 2018 at 22:45
-
From this post it indicates Samsung devices are compatible. Commented Apr 1, 2020 at 23:56
-
@Adam Hurwitz hi there! I'll have to invite you to read the post again; I noted that it's OEM's discretion on whether it's supported or not. Also, your links is about NTFS while this question is about ExFat. Commented Apr 2, 2020 at 20:24
-
Thanks @DanBrown. I was considering NTFS as a potential alternative to exFAT which makes it relative above. After further research, exFAT seems to make the most sense for compatibility across Linux, Mac, Windows, and Android. Here are the steps I used to implement exFAT read/write capability on Android. Commented Apr 2, 2020 at 21:54
As of today (03-Apr-2020), exFAT is not yet officially supported in AOSP.
exFAT
- a filesystem developed by Microsoft - was (is?) not open-source, so it was never a part of Linux (and hence Android) kernel over patent issues. However a FUSE-based driver (exFAT-FUSE) has been around since long. But it's not a proper in-kernel driver, so lags in performance. Also there are properly licensed commercial-grade and for home users exFAT implementations from authorized Microsoft partners like Tuxera and Paragon.
Following a leaked release of exFAT filesystem source code, Samsung properly open-sources an exFAT driver back in 2013. It's available as exFAT-nofuse Linux kernel module. In 2018 another exFAT driver was released as part of Samsung Galaxy S8+ source. It's available as exFAT-Linux out-of-tree kernel module.
However none of the above drivers were ever merged to mainline Linux tree because of license issues. The other answer correctly states that it's up to OEM's discretion if they include exFAT driver in their kernel (and executables in userspace) after having an agreement with Microsoft or their partners. But almost every custom ROM includes one or more of the above drivers. exFAT-FUSE
support is also available as a Magisk module: vold-posix
which can be used almost with any ROM (at least after some modifications). With Android 9, a very basic support was also added to AOSP:
"Android doesn't natively support exFAT, but we're at least willing to try mounting an exFAT filesystem if we detect the Linux kernel supports it, and if helper binaries are present."
There came a big news from MS in 2019:
"Microsoft ♥ Linux – we say that a lot, and we mean it! Today we’re pleased to announce that Microsoft is supporting the addition of Microsoft’s exFAT technology to the Linux kernel."
And with that a community user (who already developed an exFAT driver for Linux based on 2013 release) made the initial commits to staging (unofficial, going to be part of mainline kernel) tree. After getting into "real" shape, it's being merged to Linux kernel v5.7-rc1 (test release). Hopefully exFAT
is going to be a part of future Linux/Android kernel stable/LTS releases. It can possibly be backported to current Android LTS releases (3.18 or 4.*) but there can be license issues, I'm not sure of, as Paragon states: "Microsoft’s statement is related to future versions of the Linux Kernel."
As this article explains, exFAT has been natively supported since Android 13:
Why not earlier?
In August of 2019, Microsoft published the technical specification for exFAT and endorsed its addition to the Linux kernel. While Microsoft still holds patents on exFAT, its announcement means that the thousands of members of the free-to-join Open Invention Network — of which Microsoft is a part of — can freely use the technology in their Linux-based products as it’s covered under the OIN’s Linux System definition.
Immediately following Microsoft’s announcement, an old version of Samsung’s exFAT Linux driver that was in legal limbo for years was submitted to the staging area of Linux 5.4. Many kernel maintainers were unhappy with the code quality of the old driver, however, so several alternative implementations started to pop up, one of which was from Paragon Software. Eventually, though, the Linux kernel community settled on a newer exFAT driver developed by Samsung, the same one they’ve been shipping on their own products already. Samsung’s implementation of Microsoft’s exFAT officially landed in Linux 5.7.
How?
With a Microsoft-endorsed exFAT driver finally available in the upstream Linux kernel, shipping exFAT support in Android became a lot less complicated for Google and OEMs. Since an Android Common Kernel fork of Linux kernel 5.7 doesn’t exist, the first ACK branch to include the new exFAT driver was based on Linux 5.10, hence the line mentioned at the beginning of the article about exFAT being supported in kernel 5.10 and later.
CONFIG_EXFAT_FS
has been set in GKI builds for over a year now, including kernels based on the android12-5.10 branch, which is why the kernel on my Pixel 6 Pro running Android 12L reports support for exFAT. However, there’s one missing piece of the puzzle to actually get Android to mount exFAT drives, and it involves Vold.Vold is short for “volume daemon”, and it’s the service that handles the mounting and unmounting of storage media. Vold actually added basic support for exFAT all the way back in early 2018, provided it detects that the kernel supports it and “helper binaries” are present. Those “helper binaries” are mkfs.exfat and fsck.exfat, tools that respectively build and check the consistency of exFAT file systems. They’re included as part of exfatprogs, a set of userspace utilities for creating, fixing, and debugging exFAT file systems. If those helper binaries aren’t detected, then the file system check will fail, and the volume won’t be mounted.
Why not A12?
If you haven’t guessed by now, those helper binaries aren’t present in any stable Android 12L builds for the Pixel 6 Pro, but they are present in the Android 13 beta builds.
The Android Platform Manifest, which Google’s repo tool uses to find the various repositories in AOSP when checking out a specific branch, added
external/exfatprogs
to the default manifest in the AOSP master branch last year. This means that anyone checking out the AOSPmaster
branch during their build process will have included the necessary helper binaries to pass vold’s file system check for exFAT. The default manifest in theandroid-12.1.0_r8
branch, however, does not pullexternal/exfatprogs
, so those builds will lack the helper binaries.