In Android API 11 we obtained android.database.DatabaseUtils#blobFileDescriptorForQuery() and it appears that SQLCipher does not have it. Is there an alternative that can be used or will SQLCipher be updated with newer Android APIs?
The current SQLCipher for Android java API is based on a snapshot of
android.database.sqlite package that contains support down to Android 2.1. We have been reticent about merging in upstream (i.e., Google) API changes as we wish to maintain backwards compatibility with the native interfaces found within 2.1. We have received a few pull requests that extend the API by introducing net.sqlcipher.database specific interfaces, so should you wish to prepare a pull request for a missing feature, we would be glad to review it for further inclusion of the project.
Just based on market share, if you had to support an ancient version of Android then the oldest would be Android 2.3.3 (0.7% market share). Most app developers are now supporting at minimum Android 4.0 especially in the MDM space which is where libraries like SQLCipher have the biggest impact. It would be ideal to drop support for 2.1 as no one uses it anymore. Not enough to make a difference. Everyone is on 4.x nowadays.
It isn’t just a process of dropping support for anything below 2.3.3, the Java library has changed, along with the JNI layer quite substantially at this point. Are you unable to retrieve the data that you need from the database through an alternative query method?
Ah. I was more speaking out loud on what would be the ideal minimum support version and not saying it should be done immediately/easily. Very understandable that there will be difficulties with rebasing on a newer android.database.sqlite snapshot.
Regarding your question, I haven’t found an alternative to that missing method yet. I’m going to keep hacking away at it though.