是否有可能在Android手机上使用SQLite与C++?我还没有找到任何有关这可能的文档。SQLite与Android NDK
回答
不可能通过NDK使用内置的SQLite(或者在六个月前,当我研究这个时),只能用Java访问。然而,它可能会链接到你自己完全独立的SQLite的C++版本。
不仅“可能”它的工作,但它确实。我简单地将“sqlite.c”添加到我的项目中:它包含整个数据库 – 2011-04-04 13:38:48
@bitbox:我对这个解决方案很感兴趣,可以提供关于如何处理它的更多细节? – 2011-07-12 05:36:15
声明:我只使用这种方法的独立可执行文件,而不是实现JNI函数的库。它可能适用于.so或不适用。另外,我正在使用自定义Android设备,而不是手机。
您可以通过NDK使用内置的SQLite,但它比支持的东西更像是一种破解。您需要从android源码分发中剔除sqlite3.h和libsqlite.so,并使用它们进行编译。将sqlite3.h放入你的应用程序源代码目录中,并且你需要将.so放在out/yourapp目录下,或者在build/platform/android-x/arch-arm/usr/lib目录下完成链接步骤。我在两个地方都有,但我不确定哪一个是真正需要的。
您将最终链接到您提供的libsqlite.so,但二进制将在目标设备上使用系统libsqlite.so正常运行。
单从下载SQLite3的合并源文件: http://www.sqlite.org/download.html
然后在Android.mk
添加sqlite3.c
您LOCAL_SRC_FILES
变量。
简单但准确的答案。谢谢! – 2011-11-09 17:49:30
嗨gabor,我只是想在我的android应用程序中使用sqlite3库。我将sqlite3.c和sqlite3.h导入到我的项目中的jni文件夹中。接下来我应该做什么? – idish 2012-12-09 08:13:27
哇140+线,C是最好的 – user457015 2013-08-02 21:18:24
请参阅SQLite Android绑定http://www.sqlite.org/android/doc/trunk/www/index.wiki,其中描述了如何为Android目标15(4.0.3)和更高版本包含sqlite3。它在下面复制。
的SQLite的Android绑定
SQLite库是Android环境的核心部分。 Java 应用程序和内容提供者使用android.database.sqlite命名空间中的接口 访问SQLite。使用Android的内置的SQLite支持
一个缺点是, 应用程序被强制使用的SQLite版本的Android 当前版本发生一起出货。如果您的应用程序 恰巧需要更新版本的SQLite,或者安装了自定义 扩展或VFS的版本,那么您运气不好。
此项目中的代码允许使用Android NDK 打造的SQLite的一个定制版本的应用程序与应用程序 运,同时仍继续使用标准的Java接口。
正常使用
安装
的Android API等级15(安卓4.0.3),和更大的支持。如果目标API级别为16或更高的 ,请使用此项目的默认“中继”分支 。或者,对于API级别15,请使用“api-level-15”分支。它不可能以 为目标的API级别低于15。
从这个项目将下列文件复制到应用程序项目中的等价 位置。
jni/Android.mk jni/Application.mk jni/sqlite/* (copy contents of directory recursively) src/org/sqlite/database/* (copy contents of directory recursively)
在此之后,目录结构应包含 这些文件。
对于API级别15只,也复制以下:
src/org/sqlite/os/* (copy contents of directory recursively)
目录 “JNI /源码/” 包含sqlite3.h 和sqlite3.c源文件的副本。在它们之间,它们包含SQLite库的源代码 。如有必要,请将其替换为源 以获取所需的特定版本的SQLite。如果SQLite是要 与定义任何特殊的预处理器宏编译,将它们添加到 的“JNI /源码/ Android.mk”文件(没有JNI/Android.mk)。
一旦文件被添加到项目,跑项目的根目录下的命令 “NDK建造”。这将编译在JNI /目录(包括自定义的SQLite 版本),以将与该应用程序被部署到该设备沿 共享库 本地代码。假设它是成功的,除非你修改JNI /目录结构中的 来源或makefile文件,你应该 并不需要再次运行“NDK建造”。
应用程序编程
组成的“android.database.sqlite”命名空间中的内置Android SQLite的接口位于 的类。该接口提供 所有相同的类时,除了 “org.sqlite.database.sqlite”命名空间内。这意味着要修改 应用程序使用SQLite的定制版本,所有通常需要 是全部替换“android.database.sqlite” 在源代码中有“org.sqlite.database.sqlite”。
例如,以下内容:
import android.database.sqlite.SQLiteDatabase;
应替换:
import org.sqlite.database.sqlite.SQLiteDatabase;
除了代替在android.database.sqlite的类的所有用途。* 命名空间,应用程序还必须确保使用以下两种:
org.sqlite.database.SQLException
org.sqlite.database.DatabaseErrorHandler
代替:
android.database.SQLException
android.database.DatabaseErrorHandler
除了命名空间的变化, 有是从股票Android界面其他差异应用程序需要注意:
SQLiteStatement.simpleQueryForBlobFileDescriptor()API不是 可用。 排序顺序“UNICODE”不可用。 排序顺序“LOCALIZED”通常与 系统的当前语言环境一致,总是等同于SQLite内置的 排序规则BINARY。
- 1. SQLite android NDK
- 2. Android NDK写入SQLite
- 3. libxml2与Android NDK
- 4. Android NDK与Visual Studio
- 5. android ndk的ndk-gdb与emacs的整合?
- 6. 在Android上使用NDK连接SQLite库
- 7. 的Android NDK - 错误与建设ICU支持sqlite的时候
- 8. NDK,建立与SQLite库错误
- 9. 使用Android的自定义SQLite NDK,SQLite源代码
- 10. 使用C与Android ndk
- 11. 使用minizip与android ndk
- 12. ANDROID NDK错误与OPENCV
- 13. Android Tesseract OCR与NDK(C++)
- 14. C++ android ndk与数组
- 15. Android NDK,与其他库CMake
- 16. 继续与Android NDK和GDB
- 17. 建筑Tesseract与Android NDK
- 18. 使用STL与Android NDK C++
- 19. NDK与Android Studio的集成
- 20. cmake失败与Android ndk
- 21. GoogleTest for Android NDK C++与CMake
- 22. 的Android NDK:碰撞与GetIntArrayElements
- 23. Android ListView与SQLite
- 24. SQlite与Android
- 25. iOS SQLite与Android SQLite等价
- 26. Android NDK ndk-build helloJni错误
- 27. 在android ndk编译fftw3 ndk
- 28. 的Android NDK:通过NDK
- 29. 与NDK
- 30. Android:与SQLite查询
http://code.google.com/p/sqlite-ndk/ - 它包括小例子如何使用SQLite,也sqlite3ndk,您可以访问存储在“资产”目录(2.3+)数据库。您可以直接从sqlite.org使用SQLite,因为源文件没有变化。 – kibab 2011-09-29 15:19:22