logo
|
Blog

    React Native TurboModule 연결기 - Android

    “연결됨” 하나 찍기까지의 긴 여정 (RN New Architecture)
    김보람's avatar
    김보람
    Dec 21, 2025
    React Native TurboModule 연결기 - Android
    Contents
    1. TurboModule의 JS Spec 정의2. 프로젝트 package.json에 “codegenConfig“ 추가3. 명령어로 코드젠 실행4. 네이티브 모듈 작성5. 모듈 실행! 끝

    1. TurboModule의 JS Spec 정의

    2. 프로젝트 package.json에 “codegenConfig“ 추가

    이 부분들은 ios와 다를게 없으므로 이미 작성된 포스팅을 참고한다

    👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻👇🏻

    React Native TurboModule 연결기 - iOS


    3. 명령어로 코드젠 실행

    💡

    ./gradlew generateCodegenArtifactsFromSchema

    위 명령어를 실행하면 “android/app/build/generated/source/codesen/java/com/프로젝트명” 경로에 *Spec.java가 생성된다

    4. 네이티브 모듈 작성

    “android/app/src/main/java/com/streakly” 이 경로에
    구현체(NativeCameraModule.kt)와, 등록체(NativeCameraPackage.kt) 파일을 만들면 된다

    //NativeCameraModule.kt
    
    package com.streakly
    
    import com.facebook.react.bridge.Promise
    import com.facebook.react.bridge.ReactApplicationContext
    
    class NativeCameraModule(
      context: ReactApplicationContext
    ) : NativeCameraSpec(context) {
    
      override fun getStatus(promise: Promise) {
        promise.resolve("연결됨")
      }
    }
    //NativeCameraPackage.kt
    
    package com.streakly
    
    import com.facebook.react.TurboReactPackage
    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
    
    class NativeCameraPackage : TurboReactPackage() {
    
      override fun getModule(
        name: String,
        reactContext: ReactApplicationContext
      ): NativeModule? {
        return if (name == "NativeCamera") {
          NativeCameraModule(reactContext)
        } else {
          null
        }
      }
    
      override fun getReactModuleInfoProvider(): ReactModuleInfoProvider {
        return ReactModuleInfoProvider {
          mapOf(
            "NativeCamera" to ReactModuleInfo(
              "NativeCamera",
              "NativeCamera",
              false, // canOverrideExistingModule
              false, // needsEagerInit
              true,  // hasConstants 
              false, // isCxxModule -> JS와 네이티브의 연결을 직접 만든 c++코드로 연결하니? - RNCore를 사용한다면 false
              true   // isTurboModule -> 뉴 아키텍처인 터보모듈을 사용하니? - 이전 아키텍처인 브릿지를 사용한다면 false
            )
          )
        }
      }
    }

    5. 모듈 실행! 끝

    import { Button, View } from 'react-native';
    import NativeCamera from '../../../specs/NativeCamera';
    
    export const RecordScreen: React.FC = () => {
      const onPressGallery = async () => {
        try {
          const res = await NativeCamera.getStatus();
          console.log(res);
        } catch (e) {
          console.error(e);
        }
      };
      return (
        <View>
          <Button title="갤러리에서 가져오기" onPress={onPressGallery} />
          <Button title="사진 찍기" onPress={() => {}} />
        </View>
      );
    };
    Share article

    김보람 | 930802qhfka@gmail.com

    RSS·Powered by Inblog