ReactNative: 8081 port 서버 없이 빌드하기 (react-native bundle)



(글 작성한 시점의 최신 ReactNative ver: 0.40)

일반적으로 ReactNative를 사용하며 개발 시에는 react-native run-android 명령어로 빌드하며 8081 포트를 띄우거나 react-native start 명령어로 바로 포트를 띄워서, script 파일을 인터넷 연결을 통해 가져오게 되어있다.
5.0 버전 이상에서는 adb reverse tcp:8081 tcp:8081 명령어로 붙고 5.0 미만 버전에서는 pc와 동일한 wifi에 붙은 뒤 ip 설정을 해주는 방식으로 서버에 붙는다.

- 해당 내용에 대한 ReactNative doc의 설명
On Android 5.0+ devices connected via USB, you can use the adb command line tool to setup port forwarding from the device to your computer:
adb reverse tcp:8081 tcp:8081
Alternatively, select "Dev Settings" from the Developer Menu, then update the "Debug server host for device" setting to match the IP address of your computer.



그러나 릴리즈 할 때는 이 방법을 사용할 수 없기 때문에 script 파일을 ①외부 server에 업로드하여 접근하거나 ②프로젝트 내부에 ReactNative bundle을 포함시켜야 한다.

이 포스팅에서는 ②프로젝트 내부에 ReactNative bundle을 포함시키는 방법으로 빌드할 것이다.

  1. 일단 curl 명령어를 사용해야 하기 때문에 cURL이 설치가 되어있어야 한다. (다운로드 페이지) 일반적으로는 다운로드 페이지에서 curl executable > OS 선택 > Generic 선택 > Unspecified 선택 > (Win64라면 이 단계에서 cpu도 선택한다. x86_64 선택) > 그리고 나오는 다운로드 페이지에서 선택해서 다운 받으면 된다. (최상위 .7z 선택)
  2. cmd를 켜서 cd 프로젝트_루트 명령어로 프로젝트로 이동한 뒤, 만약 8081 포트가 실행되고 있지 않으면 react-native start 명령어를 통해 가동시켜 준다.
  3. app/src/main 위치에 assets 폴더를 생성해준다. : app/src/maih/assets 
  4. cmd에서 curl "http://localhost:8081/index.android.bundle?platform=android" -o "app/src/main/assets/index.android.bundle" 명령어를 통해 assets 폴더에 index.android.bundle을 다운 받아 준다. (나같은 경우엔 프로젝트 루트에 바로 app 폴더가 있었지만  android/app/... 으로 들어가는 경우도 있으니 assets 폴더 경로 입력에 주의해서 써야함.

그 뒤로는 그냥 빌드든, 릴리즈 apk 생성이든 원래 방식대로 자유롭게 하면 된다. 포트 연결을 해제하거나 network 유실 여부에 상관없이 script가 뜨는 것을 볼 수 있다.


현재 최신인 4.0 기준으로는 해당 방법이 ReactNative Doc 에 잘 나와있지 않은 관계로 (...) 매우 쉬운 절차임에도 불구하고 많은 개발자들이 헤매고 있다. ㅠㅠ 심지어 찾아보면 2015년 하반기가 되어서야 ReactNative 개발자들이 android 에도 오프라인 번들 사용을 지원하고 doc을 만들어줘야겠다며 생각하고 있다. (그러나 그 doc은 아직도 만들어지지 않았다고한다..)

댓글

이 블로그의 인기 게시물

5년차의 슬럼프

10대 여고생이 만난 프로그래밍 - 마이크로소프트웨어 31주년 컨퍼런스

About Me