嗨,是takuya。
我正在构建一个名为Inkdrop的笔记应用程序,用于使用React Native。
该应用程序使用React-Native-Quick-Sqlite,Sqlite的快速包装器:
ospfranco / react-native-quick-sqlite
快速SQLITE用于反应。
Quick Sqlite嵌入了最新版本的SQLite,并提供了低级JSI支持的API来执行SQL查询。通过使用嵌入式SQLITE,您可以访问最新的安全补丁和最新功能。
性能指标没有故意发布,anecdotic testimonies建议在2倍至5倍的速度提高之间。
Gotchas
- JavaScript不能表示大于53位的整数,如果数据来自其他系统,请在加载数据时小心。 Read more。
- 不可能使用浏览器调试JSI应用程序,使用Flipper(对于Android Flipper也有SQLite数据库Explorer)。
火
/**
*所有sqlite命令结果至少将具有此状态定义:
*特定的语句或动作可以带来更多数据,相对于其上下文
*状态:0或未定义以进行正确执行,1对于错误
*消息:如果status === 1,您将在这里找到错误
â€
它嵌入了C/C ++中的最新版本。
这意味着您在Xcode和Android Studio(CMake)上的RN项目中的源构建了SQLite。
它默认不启用任何编译时间选项,我需要在我的应用中启用FTS5以进行全文搜索。
它可以通过specifying a koude0 pre-processor flag when compiling启用。
我设法启用了fts5,我想在您的项目中分享如何做到这一点。
对于Android,图书馆需要进行一些更改。因此,这对于支持接受自定义构建标志的图书馆维护者会有所帮助。
ios
幸运的是,Cocoapods允许您通过Podfile
自定义PODS项目设置:
在您的<PROJECT_ROOT>/ios/Podfile
上添加一个post_install
块:
post_install do |installer|
installer.pods_project.targets.each do |target|
if target.name == "react-native-quick-sqlite" then
target.build_configurations.each do |config|
config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)', '<SQLITE_FLAGS>']
end
end
end
end
用要添加的标志替换<SQLITE_FLAGS>
零件。
例如,您可以将SQLITE_ENABLE_FTS5=1
添加到GCC_PREPROCESSOR_DEFINITIONS
中以在iOS项目中启用fts5。
安卓
本机模块与读取CMakeLists.txt
的cmake编辑。
cmake支持使用koude8 command添加标志。
在库的cmakelists.txt中添加以下几行:
add_definitions(
${SQLITE_FLAGS}
)
它通过变量SQLITE_FLAGS
指定标志,需要在react-native-quick-sqlite/android/build.gradle
中指定这样的标志:
def SQLITE_FLAGS = rootProject.properties['quickSqliteFlags']
android {
defaultConfig {
externalNativeBuild {
cmake {
arguments '-DANDROID_STL=c++_shared',
"-DREACT_NATIVE_VERSION=${REACT_NATIVE_VERSION}",
"-DNODE_MODULES_DIR=${nodeModules}",
"-DSQLITE_FLAGS='${SQLITE_FLAGS ? SQLITE_FLAGS : ''}'"
}
}
现在,您可以像这样定义<PROJECT_ROOT>/android/gradle.properties
中的标志:
quickSqliteFlags="<SQLITE_FLAGS>"
就是这样!
我已向快速SQLITE存储库发送了拉动请求:
feat(ios&android): Support specifying pre-processor flags to sqlite #86
我通过指定预处理器标志来设法在iOS和Android上启用FTS5。
在Android上,我们需要接受父项目的设置。
该公关使通过android/gradle.properties
指定sqlite标志。
另外,我添加了有关如何为iOS和Android做到这一点的说明。 也许语法可以改善。
修复#37
希望会有所帮助。
在线关注我
- 查看我叫Inkdrop — A Markdown note-taking app的应用程序
- Twitterâhttps://twitter.com/inkdrop_app
- Blog https://blog.inkdrop.app/
- youtubeâhttps://www.youtube.com/devaslife
- Instagram https://instagram.com/craftzdog