JSI 기반 React Native 라이브러리에 전처리기 플래그를 지정하는 방법
React Native를 사용하여 모바일용 Inkdrop이라는 메모 작성 앱을 만들고 있습니다.
이 앱은 SQLite의 빠른 래퍼인 react-native-quick-sqlite를 사용합니다.
오스프랑코 / react-native-quick-sqlite
react-native를 위한 빠른 SQLite.
yarn add react-native-quick-sqlite npx pod-install
Quick SQLite embeds the latest version of SQLite and provides a low-level JSI-backed API to execute SQL queries. By using an embedded SQLite you get access the latest security patches and latest features.
Performance metrics are intentionally not posted, suggest anywhere between 2x and 5x speed improvement.
잡았다
- Javascript cannot represent integers larger than 53 bits, be careful when loading data if it came from other systems. Read more.
- It's not possible to use a browser to debug a JSI app, use Flipper (for android Flipper also has SQLite Database explorer).
API
/**
* All SQLite command results will have at least this status definition:
* Specific statements or actions can bring more data, relative to its context
* status: 0 or undefined for correct execution, 1 for error
* message: if status === 1, here you will find error
…
It embeds the latest version of SQLite in C/C++.
That means that you build SQLite from source in your RN project on Xcode and Android Studio (CMake).
It doesn't enable any compile-time options by default, and I needed to enable FTS5 for full-text search in my app.
It can be enabled by specifying a SQLITE_ENABLE_FTS5
pre-processor flag when compiling.
I've managed to enable FTS5 and I'd like to share how to do that in your project.
For Android, the library needs to make some changes. So, it'd be helpful for library maintainers who would support accepting custom build flags.
아이폰 OS
Fortunately, CocoaPods allows you to customize the pods project settings via Podfile
:
Add a post_install
block to your <PROJECT_ROOT>/ios/Podfile
like so:
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는
add_definitions
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): sqlite에 전처리기 플래그 지정 지원
#86
craftzdog
에 게시됨
전처리기 플래그를 지정하여 iOS와 Android 모두에서 FTS5를 활성화했습니다.
Android에서는 상위 프로젝트의 설정을 수락해야 합니다.
이 PR을 사용하면 android/gradle.properties
를 통해 SQLite 플래그를 지정할 수 있습니다.
또한 iOS 및 Android에서 이를 수행하는 방법에 대한 지침을 추가했습니다.
문법이 개선될 수도 있습니다.
수정 #37
View on GitHub
도움이 되길 바랍니다.
온라인으로 저를 팔로우하세요
Reference
이 문제에 관하여(JSI 기반 React Native 라이브러리에 전처리기 플래그를 지정하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/craftzdog/how-to-specify-pre-processor-flags-to-the-jsi-based-react-native-libraries-51m5텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)