How WeChat Solved Android Storage Challenges with a Virtual File System
This article examines WeChat's approach to Android data storage issues, detailing the limitations of internal and external storage, the gradual migration strategy, and the design of the wechat‑vfs component that provides abstracted file migration, encryption, and cleanup capabilities.
Introduction
Android data storage has been a long‑standing issue since the platform’s inception, and many problems remain unsolved in recent Android versions. WeChat also faced numerous storage design challenges.
Problems and Considerations
1. Limited internal storage – Early devices had only small internal storage, forcing apps to place media files on SD cards.
2. Insecure external (private) storage – Permissions allow most apps to read/write external storage, so sensitive files must be encrypted or obfuscated.
3. Feasibility of migrating to internal storage – Although internal storage has grown, wholesale migration is hindered by compatibility, file‑system differences, large user data, and risk of database corruption.
We therefore adopted a gradual migration strategy combined with encryption, moving data to internal storage when appropriate and deferring the rest to external private storage until Android 11 improves isolation.
How to migrate massive files without hurting performance or user experience.
How to let many development teams implement migration and encryption with minimal burden.
How to support diverse storage requirements such as different encryption needs and retention policies.
The wechat‑vfs Universal Storage Component
wechat‑vfs (WeChat Virtual File System) provides high‑efficiency, highly available data migration.
1. File Migration
Key questions include when to perform migration. Doing it at app launch is simple but can take minutes for gigabytes of data, leading to a poor user experience. Performing migration in the background after launch requires the app to handle both old and new paths.
VFS abstracts path mapping so that business code can use a single logical path regardless of the file’s physical location. It registers source and target paths and automatically handles:
Instant directory moves at startup when possible.
Path dispatch that tries both old and new locations during access.
Background migration during idle, screen‑off, charging states.
Graceful interruption and resumption of migration.
2. Abstract File System
VFS offers an abstract file system with operations like
open,
list,
exists. Write operations target the migration destination, while reads first check the destination then fall back to sources.
Path abstraction uses URI‑like identifiers, allowing business code to access files without knowing their actual location.
3. File Encryption
By installing an encrypted file system layer on top of VFS, any file can be transparently encrypted without code changes.
<code>// Create an encrypted file system
FileSystem fs = new EncryptedFileSystem(
new NativeFileSystem("/path/to/encrypt"));
FileSystemManager.instance().edit()
.install("encryption", fs)
.mount("/path/to/encrypt", "encryption")
.commit();</code>4. Cleanup and Statistics
VFS can also perform automatic cleanup based on time‑based or LRU policies, and collect statistics such as file count, size, and migration success rate during idle charging periods.
<code>// Quota‑based cleanup
FileSystem fs = new QuotaFileSystem(
new NativeFileSystem("/path/to/cleanup"),
8 * 1024 * 1024, // target size 8 MB
16 * 1024 * 1024); // threshold 16 MB
FileSystemManager.instance().edit()
.install("cleanup", fs)
.mount("/path/to/cleanup", "cleanup")
.commit();</code>Conclusion
wechat‑vfs was created to enable safe migration of files to internal storage and to provide flexible encryption on Android. Its virtual file system design offers great flexibility, allowing custom storage strategies such as bundling many small files into a large container.
WeChat Client Technology Team
Official account of the WeChat mobile client development team, sharing development experience, cutting‑edge tech, and little‑known stories across Android, iOS, macOS, Windows Phone, and Windows.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.