728x90
반응형
좋은 기회로 현재 프로젝트를 처음부터 끝까지 새로 리팩토링 하는 기회를 얻게되었다.
0.79.2 버전으로 새로 버전업을해서 개발중인데, TurboModule 을 사용해보기로 했다.
TurboModle 은 기존 bridge 구조를 사용하지않아 좀더 좋은 퍼포먼스를 보여준다
일단
폴더트리는
android/app 에서
이렇게 구성했고
NativeLocalStorageModule.java 는
package com.공통폴더이름.nativelocalstorage;
import android.content.Context;
import android.content.SharedPreferences;
import com.공통폴더이름.NativeLocalStorageSpec;
import com.facebook.react.bridge.ReactApplicationContext;
public class NativeLocalStorageModule extends NativeLocalStorageSpec {
public static final String NAME = "NativeLocalStorage";
public NativeLocalStorageModule(ReactApplicationContext reactContext) {
super(reactContext);
}
@Override
public String getName() {
return NAME;
}
@Override
public void setItem(String value, String key) {
SharedPreferences sharedPref = getReactApplicationContext().getSharedPreferences("my_prefs", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putString(key, value);
editor.apply();
}
@Override
public String getItem(String key) {
SharedPreferences sharedPref = getReactApplicationContext().getSharedPreferences("my_prefs", Context.MODE_PRIVATE);
String username = sharedPref.getString(key, null);
return username;
}
@Override
public void removeItem(String key) {
SharedPreferences sharedPref = getReactApplicationContext().getSharedPreferences("my_prefs", Context.MODE_PRIVATE);
sharedPref.edit().remove(key).apply();
}
@Override
public void clear() {
SharedPreferences sharedPref = getReactApplicationContext().getSharedPreferences("my_prefs", Context.MODE_PRIVATE);
sharedPref.edit().clear().apply();
}
}
NativeLocalStoragePackage.java
package com.공통폴더이름.nativelocalstorage;
import com.facebook.react.BaseReactPackage;
import com.facebook.react.bridge.NativeModule;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.module.model.ReactModuleInfo;
import com.facebook.react.module.model.ReactModuleInfoProvider;
import java.util.HashMap;
import java.util.Map;
public class NativeLocalStoragePackage extends BaseReactPackage {
@Override
public NativeModule getModule(String name, ReactApplicationContext reactContext) {
if (name.equals(NativeLocalStorageModule.NAME)) {
return new NativeLocalStorageModule(reactContext);
} else {
return null;
}
}
@Override
public ReactModuleInfoProvider getReactModuleInfoProvider() {
return new ReactModuleInfoProvider() {
@Override
public Map<String, ReactModuleInfo> getReactModuleInfos() {
Map<String, ReactModuleInfo> map = new HashMap<>();
map.put(NativeLocalStorageModule.NAME, new ReactModuleInfo(
NativeLocalStorageModule.NAME, // name
NativeLocalStorageModule.NAME, // className
false, // canOverrideExistingModule
false, // needsEagerInit
false, // isCXXModule
true // isTurboModule
));
return map;
}
};
}
}
이렇게 구성했다.
또한 codegen 을 사용하기 위해서는 root/specs 에
NativeLocalStorage.ts 가
import type {TurboModule} from 'react-native';
import {TurboModuleRegistry} from 'react-native';
export interface Spec extends TurboModule {
setItem(value: string, key: string): void;
getItem(key: string): string | null;
removeItem(key: string): void;
clear(): void;
}
export default TurboModuleRegistry.getEnforcing<Spec>(
'NativeLocalStorage',
);
이렇게 들어가야있어야한다.
마지막으로, package.json 에
"codegenConfig": {
"name": "MyTurboModules",
"type": "modules",
"jsSrcsDir": "specs",
"android": {
"javaPackageName": "com.공통폴더이름"
}
},
이렇게 세팅하면된다.
"codegen": "cd android && ./gradlew :app:generateCodegenArtifactsFromSchema && cd .."
해당 명령어로, 먼저 codegen 을통해,
app/build/generated/codegen 폴더에 NativeSystemModuleSpec 를 생성해주고 해당 파일을
import com.공통폴더이름.NativeSystemModuleSpec;
public class NativeSystemModule extends NativeSystemModuleSpec {
이렇게 사용하는 원리다.
728x90
반응형
'ReactNative' 카테고리의 다른 글
[ React Native ] 키보드로 조작가능한 앱 만들기 (0) | 2025.03.26 |
---|---|
[ React Native ] android device 전원끄기 (1) | 2024.12.20 |
[ React Native ] Memory Leak / Memory 초기 사용량 낮추기 (0) | 2024.12.18 |
[ React Native ] Android debugging Deep dive ! (2) | 2024.11.30 |
[ React Native ] Dynamic splash screen by url (서버에서 받아오는 URL 로 스플래시 스크린 세팅하기 ) (1) | 2024.09.05 |