是否有可能在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