Android library to allow read-only access to sqlite databases contained in an applications .apk file. This is ideal for apps which need to ship with a large quantity of static data (e.g. an offline Wikipedia reader). Due to the way that the SQLiteDatabase class has been implemented in Android, it cannot be extended or subclassed. So what we do is register a new "virtual filesystem" layer with the sqlite library from native C code, which is able to intercept the filesystem calls that sqlite makes. (Because there is only one copy of the sqlite library per VM process, we actually end up intercepting any sqlite calls made by *any* application in the same process as us!) In normal operation, our VFS layer simply proxies all calls to the "default" VFS, which just uses open() and read() to access regular database files. But when a special filename matching the "*.apk!filename" pattern is encountered, our VFS grabs control. Using zlib and minizip, it opens the .apk file and looks inside for the database file; it will then read chunks of this file to satisfy any read() requests from sqlite. By doing this in this manner, applications can continue to use the standard Android database APIs. Special thanks to Krystian Bigaj for his sqlite-ndk project, which showed me how to use the sqlite VFS layer.