React-native: Android ์—๋ฎฌ๋ ˆ์ดํ„ฐ ๋ฐ ์‹ค์ œ ์žฅ์น˜์—์„œ ๊ฐœ๋ฐœ ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2017๋…„ 08์›” 06์ผ  ยท  139์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: facebook/react-native

์ฒซ ๋ฒˆ์งธ ์„น์…˜์„ ์ฝ์„ ๋•Œ๊นŒ์ง€ ์ด ํ…œํ”Œ๋ฆฟ์„ ์‚ญ์ œํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

์ด๊ฒƒ์€ ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ์ž…๋‹ˆ๊นŒ?

๋‚ด ์‹œ์Šคํ…œ์—์„œ ์ผ๋ฐ˜ Awesome Project๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋™์•ˆ ์ง๋ฉดํ•œ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

"์˜ˆ"๋ผ๊ณ  ๋‹ตํ•œ ๊ฒฝ์šฐ: ๊ณ ํ’ˆ์งˆ ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์•ฝ 30๋ถ„์ด ์†Œ์š”๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค. ๋งŽ์€ ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜ ์žˆ์ง€๋งŒ ๋ฌธ์ œ์— ์ฃผ์˜๋ฅผ ๊ธฐ์šธ์ด๋ฉด ๋ฌธ์ œ๋ฅผ ๋” ๋นจ๋ฆฌ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„๊ทธ ๋ณด๊ณ ์„œ์˜ ๊ฒฝ์šฐ ์ด ํ…œํ”Œ๋ฆฟ์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์„ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ฌธ์ œ๊ฐ€ ์ข…๋ฃŒ๋ฉ๋‹ˆ๋‹ค. "์•„๋‹ˆ์š”"๋ผ๊ณ  ๋‹ตํ•œ ๊ฒฝ์šฐ: React Native์˜ ๋ฒ„๊ทธ ์ถ”์ ์—๋งŒ GitHub ๋ฌธ์ œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋„์›€์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ปค๋ฎค๋‹ˆํ‹ฐ ํŽ˜์ด์ง€(http://facebook.github.io/react-native/support.html)์— ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋Š” ๋‹ค์–‘ํ•œ ๋ฆฌ์†Œ์Šค๊ฐ€ ๋‚˜์—ด๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์•„๋ž˜๋กœ ์Šคํฌ๋กคํ•˜์‹ญ์‹œ์˜ค!

๊ธฐ์—ฌ ์ง€์นจ ์„ ์ฝ์—ˆ์Šต๋‹ˆ๊นŒ?

๋„ค

ํ™˜๊ฒฝ

ํ„ฐ๋ฏธ๋„์—์„œ ์ด ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์—ฌ ๋ชจ๋“  ๊ด€๋ จ ํ•„๋“œ๋ฅผ ์ฑ„์šฐ์‹ญ์‹œ์˜ค.
  1. react-native -v : 0.47.1
  2. node -v :8.2.1
  3. npm -v :4.1.2
  4. yarn --version:

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‹ค์Œ์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

  • ๋Œ€์ƒ ํ”Œ๋žซํผ:
    ๊ธฐ๊ณ„์  ์ธ์กฐ ์ธ๊ฐ„
  • ๊ฐœ๋ฐœ ์šด์˜ ์ฒด์ œ:
    ์œˆ๋„์šฐ 7
  • ๋นŒ๋“œ ๋„๊ตฌ:26.0.0-rc2

๋ฒˆ์‹ ๋‹จ๊ณ„

(์—ฌ๊ธฐ์— ๋‹จ๊ณ„๋ฅผ ๊ธฐ๋กํ•˜์„ธ์š”.)

1. ๊ด€๋ฆฌ์ž ๋ชจ๋“œ์—์„œ ๋ช…๋ น ํ”„๋กฌํ”„ํŠธ ์—ด๊ธฐ
2. ์‹คํ–‰ ๋ช…๋ น: cd
3.run ๋ช…๋ น: react-native init
4. ์‹คํ–‰ ๋ช…๋ น: cd
5.run ๋ช…๋ น์–ด: react-native run-android
์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํŒจํ‚ค์ง€ ์„œ๋ฒ„๊ฐ€ ํฌํŠธ 8081์—์„œ ์ž๋™์œผ๋กœ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ปดํ“จํ„ฐ์™€ ๋ชจ๋ฐ”์ผ์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ ํŒจํ‚ค์ง€ ์„œ๋ฒ„์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
๋‚˜๋Š” http://๋ฅผ ์‚ฌ์šฉํ•ด ๋ณด์•˜๋‹ค.:port/index.android.js
http://localhost :ํฌํŠธ
http://127.0.0.1 : ํฌํŠธ

=> ๋ชจ๋ฐ”์ผ๊ณผ ์—๋ฎฌ๋ ˆ์ดํ„ฐ ๋ชจ๋‘์—์„œ ๋‹ค์Œ ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ ๋นจ๊ฐ„์ƒ‰ ํ™”๋ฉด์ด ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค.
์‹ค์ œ ์žฅ์น˜์™€ ์—๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹คํ–‰ํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. "์ž์‚ฐ 'index.android.bundle'์—์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋กœ๋“œํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ฒˆ๋“ค์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ํŒจํ‚ค์ง•๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ฑฐ๋‚˜ ํŒจํ‚ค์ง€ ์„œ๋ฒ„๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.'

screenshot-1502041340496
screenshot-1502041361543
screenshot-1502041433294

๋‹ค์‹œ ๋กœ๋“œํ•˜๋ฉด "๊ฐœ๋ฐœ ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค." ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‘˜ ๋‹ค์˜ ๊ฐœ๋ฐœ ์„ค์ •์—์„œ ํ˜ธ์ŠคํŠธ์™€ ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ์„ค์ •ํ–ˆ๋Š”๋ฐ "๊ฐœ๋ฐœ ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค."๋ผ๋Š” ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์˜ˆ์ƒ๋˜๋Š” ๋™์ž‘

ํ”„๋กœ์ ํŠธ๋Š” ์˜ค๋ฅ˜ ์—†์ด ์—๋ฎฌ๋ ˆ์ดํ„ฐ์™€ ์ „ํ™”์—์„œ ์‹คํ–‰๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋Œ€์‹  ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๊ณ  ์—ฌ๋Ÿฌ ๋ฒˆ ์‹œ๋„ํ–ˆ์ง€๋งŒ ๋™์ผํ•œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋™์ผํ•œ ํŒจํ„ด์œผ๋กœ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

์žฌํ˜„ ๊ฐ€๋Šฅํ•œ ๋ฐ๋ชจ

(๋ฌธ์ œ๋ฅผ ์žฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์˜ˆ์ œ ํ”„๋กœ์ ํŠธ์— ๋Œ€ํ•œ ๋งํฌ์™€ ์ •ํ™•ํ•œ ์ง€์นจ์„ ๋ถ™์—ฌ๋„ฃ์Šต๋‹ˆ๋‹ค.)

Ran Commands Locked

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋‹ค์Œ์„ ์‹คํ–‰ํ•ด ๋ณด์‹ญ์‹œ์˜ค.
adb reverse tcp:8081 tcp:8081
๋ช…๋ น ํ”„๋กฌํ”„ํŠธ์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค.

๋ชจ๋“  139 ๋Œ“๊ธ€

์—ฌ์ „ํžˆ ๋ฌธ์ œ:
๋ฐ˜์‘ 16.0.0-alpha.6
RN 0.44.3
๋…ธ๋“œ 8.2.1
npm 5.3.0
์—‘์Šค์ฝ”๋“œ 8.3.3
iOS 10.3 ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ

๊ทธ๋ ‡๋‹ค๋ฉด ์ด์ „ ๋ฒ„์ „์—์„œ ์ž‘์—…ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?

์ด๊ฑธ ๋งŒ๋‚˜๋‹ˆ ๊ฐ๋‹น์ด ์•ˆ ๋œ๋‹ค....

์ตœ์‹  ๋ฒ„์ „์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

ํŒจํ‚ค์ง€ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๊นŒ? react-native run-android ์‹คํ–‰ํ•  ๋•Œ ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. react-native start ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž์ฒด์ ์œผ๋กœ ์‹œ์ž‘ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๊ฐ€ ํŒจํ‚ค์ง€ ํ”„๋กœ๊ทธ๋žจ์ด ์ „ํ˜€ ์‹œ์ž‘๋˜์ง€ ์•Š๋Š” ๊ฒƒ์ธ์ง€ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์˜ˆ, ํฌ์žฅ๊ธฐ๊ฐ€ ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค. react-native run-android ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด packager๊ฐ€ 8081์—์„œ ์‹คํ–‰ ์ค‘์ด๊ณ  "Loading Dependency Graph. Done"์ด๋ผ๋Š” ๋…ธ๋“œ js ์ฐฝ์ด ์—ด๋ฆฝ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ์‹œ์Šคํ…œ ๋ธŒ๋ผ์šฐ์ €์—์„œ " localhost:8081/index.android.js "๋ฅผ ์‹œ๋„ํ•˜๋ฉด "์ด ์‚ฌ์ดํŠธ์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค"๋ผ๋Š” ์˜ค๋ฅ˜๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ผ๋ฐ˜ nodejs API๋ฅผ ๋งŒ๋“ค๊ณ  ๋ธŒ๋ผ์šฐ์ €์—์„œ ํ…Œ์ŠคํŠธํ•˜๋ฉด ์„ฑ๊ณต์ ์œผ๋กœ ์—ด๋ฆฝ๋‹ˆ๋‹ค.

๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. iOS ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๋Š” ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

RN์—์„œ ์ƒˆ ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๋ ค๊ณ  ํ•  ๋•Œ๋งˆ๋‹ค ๋งค๋ฒˆ ์ƒˆ๋กœ์šด ๋ฒ„๊ทธ์˜ ๋ฒฝ์— ๋ถ€๋”ชํžˆ๋Š” ๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
๋‹ค์Œ๋‹ฌ์— ๋˜ ๋„์ „ํ•ด ๋ด์•ผ์ง€...

๊ฐ™์€ ๋ฌธ์ œ. ๋ˆ„๊ตฌ๋“ ์ง€ ๊ทธ๊ฒƒ์„ ํ•ด๊ฒฐ?

๋‹ค์Œ์„ ์‹คํ–‰ํ•ด ๋ณด์‹ญ์‹œ์˜ค.
adb reverse tcp:8081 tcp:8081
๋ช…๋ น ํ”„๋กฌํ”„ํŠธ์—์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค.

@ashafizullah : ์ €๋„ ์‹œ๋„ํ•ด ๋ดค์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ์ „ํžˆ ์šด์ด ์—†์Šต๋‹ˆ๋‹ค.

๋‚ด ์žฅ์น˜์—์„œ๋„ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

USB๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ณ  adb๊ฐ€ ๋ฐ˜๋Œ€๋กœ ๋˜์–ด ์žˆ๊ณ  ํŒจํ‚ค์ง€ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค.

์žฅ์น˜์˜ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋‹ค์Œ ๋งํฌ๋ฅผ ์—ด๋ฉด ๋ฒˆ๋“ค์ด ์„ฑ๊ณต์ ์œผ๋กœ ๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค.

http://localhost:8081/index.android.bundle?platform=android&dev=true&hot=false&minify=false

๋”ฐ๋ผ์„œ Java ์ฝ”๋“œ ์ž์ฒด์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์ด ์žˆ์Šต๋‹ˆ๊นŒ? ์ €๋„ ์—ฌ๊ธฐ์„œ ๋ง‰ํ˜”์Šต๋‹ˆ๋‹ค. IOS ํ”„๋กœ์ ํŠธ์—์„œ ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”๋ฐ Android ์•ฑ์— ๋‹ค์Œ ๊ถŒํ•œ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

<uses-permission android:name="android.permission.INTERNET" />

๋”ฐ๋ผ์„œ Android ์ฝ”๋“œ๊ฐ€ ์•ฑ์—์„œ ์›๊ฒฉ URL์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”๋ฐ ์•„๋ฌด๋„ ๊ทธ๊ฒƒ์„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๊นŒ?

์ €๋„ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ  ์žˆ๋Š”๋ฐ ํ˜น์‹œ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์œผ์‹œ๋ฉด ์˜ฌ๋ ค์ฃผ์„ธ์š”. ๊ฐ์‚ฌ ํ•ด์š”.

๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. adb ์˜ˆ์•ฝ tcp:8081 tcp:8081 ์„ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ ๋™์ผํ•œ ๋„คํŠธ์›Œํฌ ์ปดํ“จํ„ฐ์™€ ๋ชจ๋ฐ”์ผ์„ ํ™•์ธํ•˜๊ณ  ๊ฐœ๋ฐœ ์„ค์ • IP:8081์„ ์ˆ˜ํ–‰ํ•˜์ง€๋งŒ ๊ฐœ๋ฐœ ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ฐ€ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋Š”์ง€, ๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๋„ˆ

์•ˆ๋…• ์‚ฌ๋žŒ๋“ค. ๋‚˜๋Š” react-native์—์„œ console.dir()์„ ์‚ฌ์šฉํ–ˆ๊ณ  ์ด ๋™์ž‘์„ ์–ป์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜๋Š” console.dir()์ด browser.window ํ•จ์ˆ˜์ด๊ณ  ๋ฐ˜์‘ ๋„ค์ดํ‹ฐ๋ธŒ์— ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๊ฒƒ์ด ์ •์ƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. console.dir()์„ ์ œ๊ฑฐํ•œ ํ›„ - ๋‚ด ์•ฑ์ด ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

Mac์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์†Œ์‹์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ์žฅ์น˜ ํ…Œ์ŠคํŠธ์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋“œ๋กœ์ด๋“œ 4.1.2

์•ผ. ์•ˆ๋“œ๋กœ์ด๋“œ ๋ฒ„์ „์ด 5.0 ๋ฏธ๋งŒ์ธ ๋ถ„๋“ค์€ USB ๋Œ€์‹  ์™€์ดํŒŒ์ด ์—ฐ๊ฒฐ์„ ์‹œ๋„ํ•ด ๋ณด์…จ๋‚˜์š”? ๋‚ด ์•ฑ์€ Wi-Fi๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ๋œ ํ›„ Android 4.3(Huawei mediapad T1 8.0)์—์„œ ์ •์ƒ์ ์œผ๋กœ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ ๋‚˜์—๊ฒŒ ๊ทธ๊ฒƒ์€ postgresSQL์—์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋˜ ํฌํŠธ 8081๋กœ ๋ฐํ˜€์กŒ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ์˜ค๋Š˜ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.
์•ˆ๋“œ๋กœ์ด๋“œ 4.4.2 ๋ฐ 6.

์—ฌ๊ธฐ์—์„œ๋„ ๊ฐ™์€ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์งง์€ ์ž ์ž๊ธฐ ์‹œ๊ฐ„ ํ›„์— Mac์„ ๋‹ค์‹œ ์—ด ๋•Œ๋งˆ๋‹ค ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์•„๋ฌด๋„ ์ด๊ฒƒ์„ ํ•ด๊ฒฐ ํ–ˆ์Šต๋‹ˆ๊นŒ?
adb reverse tcp:8081 tcp:8081 - ์ด๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค

screen shot 2017-10-17 at 8 20 03 am

๋‚ด ์˜ค๋ฅ˜๋Š” inotify limits๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์ด ๋งํฌ๋Š” https://github.com/guard/listen/wiki/Increasing-the-amount-of-inotify-watchers ๋ฅผ ๋„์™”์Šต๋‹ˆ๋‹ค.

๊ฐ™์€์ด ๋ฌธ์ œ, ๋„์™€์ฃผ์„ธ์š”

๋‚˜๋Š” ๋˜ํ•œ localhost์—์„œ ๊ทธ๊ฒƒ์„ ์‹คํ–‰ํ•˜๋ ค๊ณ  ์‹œ๋„ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €์™€ ์—๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€๋งŒ ๋ฌผ๋ฆฌ์  ์žฅ์น˜์—์„œ๋Š” ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์žฅ์น˜์™€ ์—๋ฎฌ๋ ˆ์ดํ„ฐ ๋ชจ๋‘์—์„œ Android์— ๋Œ€ํ•ด ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํฌ์žฅ๊ธฐ์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ฆฌ์  ์žฅ์น˜์— ๋Œ€ํ•ด "adb reverse ..."๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ์‚ฌ์šฉ์ž ์ง€์ • ํฌํŠธ์—์„œ ์‹คํ–‰ํ•˜์—ฌ "react-native start --port 8088"์„ ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ ์•ฑ์˜ dev ์„ค์ •์—์„œ IPaddress:8088 ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์งˆ๋ฌธ: ์•ฑ(๋‚ด Android ์žฅ์น˜์—์„œ)๊ณผ Windows PC์—์„œ ์‹คํ–‰๋˜๋Š” ํฌ์žฅ๊ธฐ ๊ฐ„์˜ ์—ฐ๊ฒฐ์„ ์ž˜๋ชป ์ฐพ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๋‚ด๊ฐ€ ๋ณด๋Š” ๊ฒƒ์€ "์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†์Œ" ์œ ํ˜•์˜ ์˜ค๋ฅ˜ ํ‘œ์‹œ๋ฟ์ด๋ฉฐ ํฌ์žฅ๊ธฐ์—๋Š” ๋กœ๊ทธ ๋ฉ”์‹œ์ง€๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. \

์—…๋ฐ์ดํŠธ: "adb reverse --list"๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ๋‘ ๊ฐœ์˜ ์—ญ ํ•ญ๋ชฉ์ด ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ•œ ํ›„ ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚˜๋Š” ์—ฌ์ „ํžˆ "ํ™”์ดํŠธ ํŽ˜์ด์ง€"๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ ๊ทธ๊ฒƒ์€ ๋‹ค๋ฅธ ๋ฌธ์ œ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

Android์—์„œ๋„ ๋™์ผํ•œ ๋ฌธ์ œ, iOS๋Š” ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค...

์–ด๋–ป๊ฒŒ ์ด๋Ÿฐ ์ผ์ด ์ผ์–ด๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ
๋‚˜๋„ ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค
๊ทธ๋Ÿฌ๋‚˜ ์ด์ „์—๋Š” ๋ชจ๋“  ๊ฒƒ์ด ๋‚˜์—๊ฒŒ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋Ÿฐ ๋‹ค์Œ ๋‚ด ๋ฐ์Šคํฌํƒ‘์„ ๋งค์šฐ ๋Š๋ฆฌ๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฌดํ•œ ๋ฃจํ”„๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ๋‚˜๋Š” ๋ฐ˜์‘ ๋„ค์ดํ‹ฐ๋ธŒ ์‹œ์ž‘์—์„œ ์–ป์€ ์—๋ฎฌ๋ ˆ์ดํ„ฐ์™€ ๋ฉ”ํŠธ๋กœ ๋ฒˆ๋“ค๋Ÿฌ๋ฅผ ๋‹ซ๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค.
๋‚˜๋Š” ์•„๋ž˜์—์„œ์ด ์ฝ”๋“œ๋ฅผ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ „ํ˜€ ์šด์ด ์—†์—ˆ์Šต๋‹ˆ๋‹ค.
react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res

๊ฐ™์€ ๋ฌธ์ œ์— ์ง๋ฉดํ–ˆ๊ณ  ์ด๊ฒƒ์œผ๋กœ ๋ฉฐ์น ์„ ๋‚ญ๋น„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์ปดํ“จํ„ฐ์—์„œ ๊ธฐ๋ณธ ํฌํŠธ 8081์ด ์ฐจ๋‹จ๋œ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. https://github.com/facebook/react-native/issues/10715 ์˜ ์ง€์นจ์— ๋”ฐ๋ผ ํฌํŠธ๋ฅผ ๋ณ€๊ฒฝํ–ˆ์œผ๋ฉฐ ์ด์ œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๊ธฐ์˜ ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ด URL์„ ์—ด์–ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

http://localhost:8081/index.android.bundle?platform=android&dev=true&hot=false&minify=false

@kevinresol , ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ์ž๊ฐ€ ํฌํŠธ 8081์—์„œ ์‹œ์ž‘๋˜์—ˆ๋‹ค๊ณ  ๋งํ•˜๊ณ  ๋ธŒ๋ผ์šฐ์ €์—์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์—†์œผ๋ฉด ํฌํŠธ๊ฐ€ ๋ฐฉํ™”๋ฒฝ์— ์˜ํ•ด ์ฐจ๋‹จ๋˜์—ˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ํฝ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ํฌํŠธ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ํฌํŠธ๋ฅผ ์—ด ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

์ด์ „ ๊ฒŒ์‹œ๋ฌผ ์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์žฅ์น˜ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ๋ฒˆ๋“ค์— ์•ก์„ธ์Šค ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@kevinresol๊ณผ ๋˜‘๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ฒˆ๋“ค์„ ๋ณผ ์ˆ˜ ์žˆ์ง€๋งŒ ์˜ค๋ฅ˜๊ฐ€ ์ง€์†๋ฉ๋‹ˆ๋‹ค. ์—๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉ ์ค‘์ด์ง€๋งŒ ์—ฌ์ „ํžˆ adb reverse๋ฅผ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์šด์ด ์—†์Šต๋‹ˆ๋‹ค.

@bruno02100 Windows์—์„œ Wi-Fi๋ฅผ ํ†ตํ•ด ์•ก์„ธ์Šคํ•˜๋Š” ๊ฒฝ์šฐ ๋ฐฉํ™”๋ฒฝ์„ ๋น„ํ™œ์„ฑํ™”ํ•ด ๋ณด์‹ญ์‹œ์˜ค. ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜๋Š”์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

@jerrykurian ์ €๋Š” Android ์—๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ์‹คํ–‰ํ•˜๋Š” Mac์— ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฉํ™”๋ฒฝ์ด ์ด๋ฏธ ๊บผ์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ์ •๋ง ์ด์ƒํ•ฉ๋‹ˆ๋‹ค.

Debug server host & port for device ๋ฅผ $#$ Dev Settings 192.168.x.x:8081 ๋กœ ์„ค์ •ํ•œ ํ›„ (์ „ํ™”๋ฅผ ํ”๋“ค๋ฉด ๋ฉ”๋‰ด๊ฐ€ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค)
๋‚˜๋ฅผ ์œ„ํ•œ ์ผ์ด์•ผ

์ถ”์‹ : ์ˆ˜๋™์œผ๋กœ ๋ฒˆ๋“ค์„ ์ƒ์„ฑํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์„ฑ๊ณต์ ์œผ๋กœ ์—ฐ๊ฒฐ๋˜๋ฉด ์ž๋™์œผ๋กœ ๋นŒ๋“œ๋ฉ๋‹ˆ๋‹ค.

Wi-Fi ๋ฌธ์ œ ๋˜๋Š” Wi-Fi ์†”๋ฃจ์…˜์ด ์ฃผ์ œ์—์„œ ๋ฒ—์–ด๋‚ฌ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. OP๋Š” adb reverse ๋กœ USB๋ฅผ ํ†ตํ•ด localhost ์— ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ด์•ผ๊ธฐํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

์ด ์˜ค๋ฅ˜๋Š” ์—๋ฎฌ๋ ˆ์ดํ„ฐ๊ฐ€ ์ž ์‹œ ๊ฐ€๋™๋œ ํ›„์—๋งŒ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ง€๊ธˆ์€ ์ด ์˜ค๋ฅ˜๊ฐ€ ๋‚˜ํƒ€๋‚  ๋•Œ๋งˆ๋‹ค ์—๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ณ  react-native run-android๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ •๋ง ์งœ์ฆ๋‚˜์ง€๋งŒ ์ด๊ฒƒ์— ๋Œ€ํ•ด ์‚ดํŽด๋ณผ ์‹œ๊ฐ„์ด ๋งŽ์ง€ ์•Š์œผ๋ฏ€๋กœ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Android ์ŠคํŠœ๋””์˜ค๋ฅผ ํ†ตํ•ด ๋นŒ๋“œํ•œ ํ›„ ๊ฐœ๋ฐœ ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ฝ”๋“œ๋ฅผ ํŽธ์ง‘ํ•  ๋•Œ ์ฝ”๋“œ๋ฅผ ์ƒˆ๋กœ ๊ณ ์น˜๋ฉด ๋‚ด ์žฅ์น˜ ๋˜๋Š” ์—๋ฎฌ๋ ˆ์ดํ„ฐ๊ฐ€ ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๋‚ด ์ข…์†์„ฑ
"๋ฐ˜์‘": "16.0.0",
"๋ฐ˜์‘ ๋„ค์ดํ‹ฐ๋ธŒ": "0.50.4",

์žฅ์น˜์—์„œ ๋””๋ฒ„๊ทธ ์„œ๋ฒ„ ํ˜ธ์ŠคํŠธ ๋ฐ ํฌํŠธ๋ฅผ ์ˆ˜๋™์œผ๋กœ ์„ค์ •ํ•˜๋Š” @xlebenny ์˜ ์†”๋ฃจ์…˜์ด ์ƒˆ๋กœ ๊บผ๋‚ธ CRNA ํ”„๋กœ์ ํŠธ์—์„œ ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ž„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Android์—์„œ CRNA๋ฅผ ๊บผ๋‚ด๊ณ  ์‹คํ–‰ํ•˜๋Š” ๋‹จ๊ณ„๋ณ„ ๋ฐฉ๋ฒ•

ํ„ฐ๋ฏธ๋„์—์„œ:

  1. create-react-native-app myApp
  2. cd myApp
  3. yarn run eject (๊ธฐ๋ณธ ์˜ต์…˜์ธ "์ผ๋ฐ˜ React Native ํ”„๋กœ์ ํŠธ"๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค)
  4. react-native run-android

(์ด์ œ ์•ฑ์„ ์ปดํŒŒ์ผํ•˜๊ณ  ์ „ํ™”๊ธฐ์— ์„ค์น˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค)

์ „ํ™”:

  1. ์•ฑ ์‹คํ–‰(๋นจ๊ฐ„์ƒ‰ ์˜ค๋ฅ˜ ํ™”๋ฉด์ด ํ‘œ์‹œ๋  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋ฉ๋‹ˆ๋‹ค! - ์™ผ์ชฝ ํ•˜๋‹จ์˜ ๋‹ซ๊ธฐ ๋ฒ„ํŠผ ํด๋ฆญ)
  2. ์ „ํ™”๋ฅผ ํ”๋“ค๊ณ  ๊ฐœ๋ฐœ์ž ์„ค์ • ์„ ์„ ํƒํ•˜์‹ญ์‹œ์˜ค.
  3. ์žฅ์น˜์— ๋Œ€ํ•œ ๋””๋ฒ„๊ทธ ์„œ๋ฒ„ ํ˜ธ์ŠคํŠธ ๋ฐ ํฌํŠธ๋ฅผ ์„ ํƒํ•˜๊ณ  192.168.xx:8081๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค(๋ฌผ๋ก  ์‹ค์ œ LAN IP๋กœ ์„ค์ •).
  4. ์ „ํ™”์—์„œ ์•ฑ์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ์ƒ๋‹จ์— "192.168.xx:8081์—์„œ ๋กœ๋“œ ์ค‘..." ๋…น์ƒ‰ ๋ง‰๋Œ€๊ฐ€ ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  5. ๋˜ํ•œ Metro Bundler์—์„œ "Bundling index.js " ์ž‘์—…์ด ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค( react-native run-android ๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์—ด๋ฆผ).
  6. ๋ฒˆ๋“ค์ด ์™„๋ฃŒ๋˜๋ฉด Android ๊ธฐ๊ธฐ์—์„œ ์•ฑ์ด ์‹คํ–‰๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค!

Live Reload(์†Œ์Šค ํŒŒ์ผ์ด ๋ณ€๊ฒฝ๋  ๋•Œ)๋Š” ์—ฌ์ „ํžˆ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์ „ํ™”๋ฅผ ํ”๋“ค๊ณ  "Enable Live Reload"๋ฅผ ํ„ฐ์น˜ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

@ashafizullah ๊ทธ ๋ช…๋ น์ด ์–ด๋–ป๊ฒŒ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋Š”์ง€ ์„ค๋ช…ํ•ด ์ฃผ์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ๊ฐ์‚ฌ

@plong0 ์ด ๋‚˜๋ฅผ ์œ„ํ•ด ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค!

@bruno02100 ์—์„œ ์ง€์ ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ์ด ์˜ค๋ฅ˜๋Š” ์žฅ์น˜๋ฅผ ์žฅ๊ธฐ๊ฐ„ ์—ด์—ˆ์„ ๋•Œ ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์—๋ฎฌ๋ ˆ์ดํ„ฐ ์„ค์ •์—์„œ ๋น ๋ฅธ ๋ถ€ํŒ…์„ ๋น„ํ™œ์„ฑํ™”ํ•˜๋ฉด ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค ๐Ÿ‘

adb shell์„ ์ž…๋ ฅํ•˜๊ณ  ๋กœ์ปฌ ์„œ๋ฒ„์—์„œ ์ˆ˜์‹  ์ค‘์ธ์ง€ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค. dev ์„ค์ •์—์„œ ์„œ๋ฒ„์˜ ip์™€ ํฌํŠธ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@plong0 ๋„์›€์„ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•˜์ง€๋งŒ ๋„์›€์ด๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค.
MAC์„ ์‚ฌ์šฉํ•˜์—ฌ Android ๊ธฐ๊ธฐ์—์„œ ๋‚ด ์•ฑ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

@ramintagizade - ์•ฑ์ด ๋‚ด ๋กœ์ปฌ ์„œ๋ฒ„์—์„œ ์ˆ˜์‹  ๋Œ€๊ธฐํ•˜๋Š”์ง€ ์–ด๋–ป๊ฒŒ ํ™•์ธํ•ฉ๋‹ˆ๊นŒ? ๋ช…๋ น์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ:
adb shell [command] ?

์˜ˆ, adb ์…ธ ๋ฐ netstat์ž…๋‹ˆ๋‹ค.

http://facebook.github.io/react-native/docs/running-on-device.html ๊ธฐ๋ฐ˜

๋ธŒ๋ผ์šฐ์ €์—์„œ ๋กœ์ปฌ IP ์ฃผ์†Œ(์˜ˆ: http://192.168.43.188:8081/)์— ์•ก์„ธ์Šคํ•˜์—ฌ ํ‘œ์‹œ๋˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

React Native Packager๊ฐ€ ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๋‹ค.
๋ฌธ์„œ ๋ฐฉ๋ฌธ

๊ทธ๋Ÿฐ ๋‹ค์Œ ์—๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ ๊ฐœ๋ฐœ์ž ์„ค์ •์— ์•ก์„ธ์Šคํ•ฉ๋‹ˆ๋‹ค.
dev-settings

Mac ์‚ฌ์šฉ์ž์˜ ๊ฒฝ์šฐ ์•„๋ž˜ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
1๋‹จ๊ณ„: "adb reverse tcp:8081 tcp:8081 " ์‹คํ–‰
2๋‹จ๊ณ„: "๋ช…๋ น m"์„ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.
3๋‹จ๊ณ„: "๊ฐœ๋ฐœ์ž ์„ค์ •"์„ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.
4๋‹จ๊ณ„: "๋””๋ฒ„๊ทธ ์„œ๋ฒ„ ํ˜ธ์ŠคํŠธ ๋ฐ ์žฅ์น˜ ํฌํŠธ"๋ฅผ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.
5๋‹จ๊ณ„: ํŒ์—…์—์„œ 'port_id' ์„น์…˜์— "10.0.2.2:${port_id}"๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ ์ค‘์ธ ํฌํŠธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
6๋‹จ๊ณ„: ์ด์ œ "react-native run-android"๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

Windows ์ปดํ“จํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ Wi-Fi๋ฅผ ํ†ตํ•ด ์‹ค์ œ Android ์žฅ์น˜์—์„œ ์•ฑ์„ ๋””๋ฒ„๊ทธํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์žฅ์น˜๊ฐ€ PC ๋˜๋Š” ๋žฉํ†ฑ์˜ ํฌํŠธ์— ์•ก์„ธ์Šคํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
ํฌํŠธ์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์—๋Š” ๋‘ ๋‹จ๊ณ„๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

1. ๋จผ์ € ๋ฐฉํ™”๋ฒฝ์—์„œ ๊ทœ์น™์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.

```
์‹คํ–‰ ๋Œ€ํ™” ์ƒ์ž ์—ด๊ธฐ
-์œ ํ˜• wf.msc
- ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™ ํด๋ฆญ
-์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ์ƒˆ ๊ทœ์น™์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
-ํŒ์—… ๋ฉ”๋‰ด์—์„œ ํฌํŠธ๋ฅผ ์„ ํƒํ•˜๊ณ  ๋‹ค์Œ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.
- tcp ํฌํŠธ์™€ ํŠน์ • ๋กœ์ปฌ ํฌํŠธ๋ฅผ ์„ ํƒํ•˜๊ณ  8081(๊ธฐ๋ณธ๊ฐ’)๊ณผ ๊ฐ™์€ ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
- ์—ฐ๊ฒฐ ํ—ˆ์šฉ
- ํ”„๋กœํ•„ ์„น์…˜์—์„œ ๋ชจ๋‘ ์„ ํƒ
- ์ ์ ˆํ•œ ์ด๋ฆ„๊ณผ ์„ค๋ช…์„ ์ œ๊ณต
-๋งˆ์นจ ํด๋ฆญ

  1. PC๋ฅผ ์™ธ๋ถ€์—์„œ ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด ๋‹ค์Œ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด์„ธ์š”.
    - ์ œ์–ดํŒ์—์„œ ๋„คํŠธ์›Œํฌ ๋ฐ ๊ณต์œ  ์„ผํ„ฐ ์—ด๊ธฐ
    -์–ด๋Œ‘ํ„ฐ ์„ค์ • ๋ณ€๊ฒฝ
    - Wi-Fi ๋„คํŠธ์›Œํฌ ์„ ํƒ
    -์˜ค๋ฅธ์ชฝ ํด๋ฆญ, ์†์„ฑ
    - ๊ณต์œ  ํƒญ ํด๋ฆญ
    - ๋ชจ๋“  ์ฒดํฌ๋ฐ•์Šค๋ฅผ ์ฒดํฌ

์ด์ œ react-native run-android๋ฅผ ์‹คํ–‰ํ•ด ๋ณด์‹ญ์‹œ์˜ค.

๋‚˜์ค‘์— ๋‚ด ์—๋ฎฌ๋ ˆ์ดํŠธ๋œ ์žฅ์น˜(์•ˆ๋“œ๋กœ์ด๋“œ)์— ์ธํ„ฐ๋„ท(๋˜๋Š” ๋„คํŠธ์›Œํฌ) ์—ฐ๊ฒฐ์ด ์ „ํ˜€ ์—†๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜์ง€๋งŒ ๋น„์Šทํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. WiFi ๋˜๋Š” LTE ๊ธฐํ˜ธ๊ฐ€ ์ „ํ˜€ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์—๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด๋„ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์•˜์ง€๋งŒ ํ‰๋ฉด ๋ชจ๋“œ๋กœ ์ „ํ™˜ํ•˜๊ณ  ํ‰๋ฉด ๋ชจ๋“œ๋ฅผ ๋‹ค์‹œ ๋„๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ œ ๊ฒฝ์šฐ์—๋Š” ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง€๋Š” ์ผ๋ฐ˜์ ์ธ Android ๋ฒ„๊ทธ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ์ด ๋ฌธ์ œ์— ์ง๋ฉดํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์†”๋ฃจ์…˜์€ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค.

  1. CTRL + C๋กœ "react-native run-android"์˜ ํ˜„์žฌ ํ”„๋กœ์„ธ์Šค ์ทจ์†Œ
    ๋˜๋Š” CMD + C
  2. ์—ด๋ฆฐ ๋ฉ”ํŠธ๋กœ ๋ฒˆ๋“ค๋Ÿฌ ์ฐฝ ๋ช…๋ น์ค„ ๋‹ซ๊ธฐ
    ์ž๋™์œผ๋กœ.
  3. "react-native run-android" ๋ช…๋ น์„ ๋‹ค์‹œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ์ด ์˜ค๋ฅ˜๋Š” ์ฝ”๋“œ ๋ฌธ์ œ ๋˜๋Š” ์ข…์†์„ฑ ๋ฌธ์ œ์™€ ๊ฐ™์€ ์ด์œ ๋กœ ํ˜„์žฌ ๋นŒ๋“œ๊ฐ€ ์‹คํŒจํ–ˆ์Œ์„ ์•Œ๋ ค์ค๋‹ˆ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ์—ฌ๊ธฐ๋ฅผ ํด๋ฆญํ•˜์‹ญ์‹œ์˜ค

macOS์˜ Android ์—๋ฎฌ๋ ˆ์ดํ„ฐ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ์›์ธ์ด ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด Android AVD๋ฅผ ์„ค์ •ํ•˜๊ฑฐ๋‚˜ ๋‹ค์–‘ํ•œ Android Studio ์—…๋ฐ์ดํŠธ๋ฅผ ์„ค์น˜ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์ด ๋ช…๋ น์ด ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
watchman watch-del-all

์ด๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.
````
์–‘์กฐ ์ œ๊ฑฐ ํŒŒ์ˆ˜๊พผ
์–‘์กฐ ์„ค์น˜ ๊ฒฝ๋น„์›

๊ทธ๋ฆฌ๊ณ  ํŒŒ์ˆ˜๊พผ์ด ๋งค๋‹ฌ๋ ค ์žˆ์ง€ ์•Š์€์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด

watchman watch-del-all
````

๋งˆ์ง€๋ง‰์œผ๋กœ ์—๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์—ฌ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋งˆ์นจ๋‚ด ๋‚ด ๋ฌธ์ œ๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.
์ œ ๊ฒฝ์šฐ์—๋Š” ์—๋ฎฌ๋ ˆ์ดํ„ฐ ํ”„๋ก์‹œ ์„ค์ •์„ ์œ„ํ•œ ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค.
์—๋ฎฌ๋ ˆ์ดํ„ฐ ์„ค์ •์œผ๋กœ ์ด๋™ํ•˜์—ฌ ํ”„๋ก์‹œ๋ฅผ ์„ค์ •ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

๋„์›€์ด ๋  ์ˆ˜ ์žˆ๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

์•ˆ๋…• ๋ชจ๋‘,
Windows ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•˜๊ณ  Android ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ํ•˜๋Š” ๋™์•ˆ ๋™์ผํ•œ ๋ฌธ์ œ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.
์‹œํ–‰ ์ฐฉ์˜ค๋ฅผ ๊ฑฐ์ณ ์•„๋ž˜์™€ ๊ฐ™์€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

1>> ๊ธฐ๋ณธ๊ฐ’์—์„œ "node_modules\react-native\local-cliserverserver.js"์˜ ํฌํŠธ๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

process.env.RCT_METRO_PORT || 8081

์—๊ฒŒ

๊ธฐ๋ณธ๊ฐ’: process.env.RCT_METRO_PORT || 9088

ํฌํŠธ๊ฐ€ ์ฐจ๋‹จ๋˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ๋ฐœ๊ธ‰๋œ ๊ฒฝ์šฐ.
์ฐธ๊ณ  : ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” 9088์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.
2>> react-native run-android --port 9088 ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค(์—ฌ๊ธฐ์— ํฌํŠธ ๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”). ์ด ํฌํŠธ๋Š” ์‹คํ–‰ ์ค‘์ธ adb๋กœ ๋ณด๋‚ด์–ด ์„œ๋ฒ„์™€ adb๊ฐ€ ๊ฐ™์€ ํฌํŠธ์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
3>> ์ด์ œ Android ์ŠคํŠœ๋””์˜ค ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ Ctrl+m์„ ๋ˆŒ๋Ÿฌ " Dev Setting "์œผ๋กœ ์ด๋™ํ•œ ๋‹ค์Œ Debug Server port & host for Device ๋ฅผ ์„ ํƒํ•˜๊ณ  " localhost:9088 "์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
4>> http://localhost :9088/debugger-ui/ URL์„ ์‚ฌ์šฉํ•˜์—ฌ ํฌ๋กฌ์—์„œ ๊ฐœ๋ฐœ์ž ์ฝ˜์†”์„ ์—ฝ๋‹ˆ๋‹ค.

์ด์ œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ณ€๊ฒฝํ•œ ๋‚ด์šฉ์„ ๋กœ๋“œํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

์ง€๊ธˆ ์ฝ”๋”ฉ์„ ์ฆ๊ฒจ๋ณด์„ธ์š” :)

๊ฒŒ์‹œํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! 2018๋…„ 1์›”์— ์ถœ์‹œ๋œ ์ตœ์‹  ๋ฒ„์ „์˜ React Native v0.53.0์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๊ฐ€ ์ตœ์‹  ๋ฒ„์ „์—์„œ ๊ณ„์† ์žฌํ˜„๋˜๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‚˜์š”?

๋‚˜๋Š” ์ด๊ฒƒ์„ ๋‹ซ์„ ๊ฒƒ์ด์ง€๋งŒ ์ด๊ฒƒ์ด v0.53.0 ์ด์ƒ์—์„œ ์—ฌ์ „ํžˆ ๋ฌธ์ œ์ž„์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ž์œ ๋กญ๊ฒŒ ์ƒˆ ๋ฌธ์ œ๋ฅผ ์—ด์–ด์ฃผ์‹ญ์‹œ์˜ค.

๊ธฐ์—ฌ ๋ฐฉ๋ฒ• โ€ข ์œ ์ง€ ๊ด€๋ฆฌ์ž์—๊ฒŒ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ๋Š” ์‚ฌํ•ญ

์˜ˆ, "react-native": "0.53.0"์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜์ด ๋ฌธ์ œ๋Š” ๋‚ด๋ถ€ ํšŒ์‚ฌ ํ”„๋ก์‹œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ํšŒ์‚ฌ์—์„œ ์ผ๋ถ€ ํฌํŠธ๋ฅผ ์ฐจ๋‹จํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ ์ค‘์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ฌ๊ธฐ์— ๊ฒŒ์‹œํ–ˆ์Šต๋‹ˆ๋‹ค.

Android ์‹ค์ œ ๊ธฐ๊ธฐ์—์„œ ๋™์ผํ•œ ๋ฌธ์ œ.. ๋ฒ„์ „ 5.1.1

๋‹จ์ˆœํžˆ ๋ช…๋ น ํ”„๋กฌํ”„ํŠธ๋ฅผ ์—ด๊ณ  ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋กœ ์ด๋™ํ•˜์—ฌ 'yarn'์„ ์ž…๋ ฅํ•˜๊ณ  ์—”ํ„ฐ๋ฅผ ์น˜๋ฉด ๋ชจ๋‘ ํ™•์ธ๋ฉ๋‹ˆ๋‹ค.

@ashafizullah ๊ทธ์˜ ์†”๋ฃจ์…˜์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค!!!!

์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์ด๋“  ์‹ค์ œ ์žฅ์น˜์ด๋“  Android์˜ ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.
image

@Alijaaan ๋ถ„๋ช…ํžˆ ๋˜‘๊ฐ™์€ ๋ฌธ์ œ๊ฐ€์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌ ํ•ด์š”!

๋‚ด๊ฐ€ ์ฐพ์€ ์œ ์ผํ•œ ์†”๋ฃจ์…˜์€ Android ์ŠคํŠœ๋””์˜ค AVD Manager ์—์„œ ํ˜„์žฌ ์—๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์ƒˆ ์—๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ชจ๋‘ ๋‹ค์‹œ ์ž‘์—…์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค @Alijaaan
Android Studio ํ”„๋ก์‹œ ์„ค์ •์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
image
"Android ์ŠคํŠœ๋””์˜ค ํ”„๋ก์‹œ ์„ค์ • ์‚ฌ์šฉ"์„ ์„ ํƒ ์ทจ์†Œํ•œ ๋‹ค์Œ "ํ”„๋ก์‹œ ์—†์Œ"์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์ด์ œ ๋ชจ๋“  ๊ฒƒ์ด ์ •์ƒ์ž…๋‹ˆ๋‹ค.

@esutton ์˜ ์˜๊ฒฌ ์ด ๋‚ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

BTW watchman์€ ๋‚ด๊ฐ€ ๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ž„์˜์˜ RN ๋ฌธ์ œ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด ๋ช‡ ์‹œ๊ฐ„ ๋™์•ˆ ํ•˜๋ฃจ๋ฅผ ์ผ์‹œ ์ค‘์ง€ํ•˜๊ณ  watchman watch-del-all ์‹คํ–‰ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ๊นจ๋‹ซ๊ณ  ํ•ญ์ƒ ๊ธฐ๋ปค์Šต๋‹ˆ๋‹ค. ์ด์ œ ๊ทธ ๋ช…๋ น๋„ ๋ฉˆ์ถ”๊ณ  ๊ฐ€๋” ๋‹ค์‹œ ์„ค์น˜ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋”์šฑ ํ–‰๋ณตํ•œ ๊ฐœ๋ฐœ์ž์ž…๋‹ˆ๋‹ค.

react-native run-android --port 9088์ด ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. @Louies89 ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค

๋‚˜๋Š” ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ๋Š”๋‹ค
1. ๋ฐ”์ด๋Ÿฌ์Šค ๋ฐฑ์‹  ๋„๊ธฐ
2๋ฐฉํ™”๋ฒฝ์„ ๋‹ซ์•„๋ผ

ํŠนํžˆ ๋„ค์ดํ‹ฐ๋ธŒ ๊ธฐ๋ฐ˜๊ณผ ๊ฐ™์€ ํƒ€์‚ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์ฝ”๋“œ์˜ ์ตœ๊ทผ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ํ•œ ์ผ, ๋ช‡ ๋‹จ๊ณ„ ๋’ค๋กœ ์ด๋™ Ctrl + z , ์—๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ ์•ฑ์„ ์ œ๊ฑฐํ•˜๊ณ  ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ react-native run-android ๋ชจ๋“  ๊ฒƒ์ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค! ์•„๋งˆ๋„ ์—๋ฎฌ๋ ˆ์ดํ„ฐ์˜ ์บ์‹ฑ๊ณผ ๊ด€๋ จ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

@pinchez254๋‹˜ ๋ง์”€ ์— ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.์ฒซ ์‹คํ–‰์€ ํ•ญ์ƒ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค.

npm start ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ npm ์„œ๋ฒ„๋ฅผ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค.

์•ˆ๋…•ํ•˜์„ธ์š”, Dev Setting(192.168.1.103:8081)์— ๋‚ด PC IP ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  8081 tcp ํฌํŠธ์— ์•ก์„ธ์Šคํ•˜๊ธฐ ์œ„ํ•ด ๋ฐฉํ™”๋ฒฝ์— ์ธ๋ฐ”์šด๋“œ ๊ทœ์น™์„ ์ƒ์„ฑํ–ˆ์ง€๋งŒ ๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
"could not connect to development serve"
๋˜ํ•œ
๋ธŒ๋ผ์šฐ์ € "http://localhost:8081/index.delta?platform=android&dev=true&minify=false" ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋นŒ๋“œ๊ฐ€ ์‹œ์ž‘๋˜๊ณ  ์„ฑ๊ณต์ ์œผ๋กœ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!

๋‚˜๋ฅผ ์œ„ํ•ด ์‹คํ–‰:

  1. adb reverse tcp:8081 tcp:8081
  2. react-native start --reset-cache
  3. react-native run-android

ํŠธ๋ฆญ์„ ํ–ˆ๋‹ค

๋‘ ๊ฐœ์˜ ํ„ฐ๋ฏธ๋„์„ ์—ด์–ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.
์ฒซ ์‹คํ–‰
sudo npm start
์‹คํ–‰ ํ›„
react-native run-ios

  1. ๋…ธํŠธ๋ถ๊ณผ ํœด๋Œ€ํฐ์ด ๋™์ผํ•œ Wi-Fi ๋„คํŠธ์›Œํฌ์— ์žˆ๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  2. ์…ธ์„ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ ํด๋”๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ react-native run-android , react-native start --port=8088 ์‹คํ–‰
  3. ๊ธฐ๊ธฐ์—์„œ React Native ์•ฑ์„ ์—ฝ๋‹ˆ๋‹ค.
  4. ์ธ์•ฑ ๊ฐœ๋ฐœ์ž ๋ฉ”๋‰ด๋ฅผ ์—ฝ๋‹ˆ๋‹ค. [cmd] + [M] ๋ˆ„๋ฅด๊ธฐ(Windows์˜ ๊ฒฝ์šฐ [Ctrl] + [M])]
  5. ์žฅ์น˜์˜ ๊ฐœ๋ฐœ์ž ์„ค์ • โ†’ ๋””๋ฒ„๊ทธ ์„œ๋ฒ„ ํ˜ธ์ŠคํŠธ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค.
  6. ์ปดํ“จํ„ฐ์˜ IP ์ฃผ์†Œ์™€ ๋กœ์ปฌ ๊ฐœ๋ฐœ ์„œ๋ฒ„์˜ ํฌํŠธ๋ฅผ ์ž…๋ ฅํ•˜์‹ญ์‹œ์˜ค(์˜ˆ: 192.168.1.100:8088).
  7. ๊ฐœ๋ฐœ์ž ๋ฉ”๋‰ด๋กœ ๋Œ์•„๊ฐ€ JS ๋‹ค์‹œ ๋กœ๋“œ๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

react-native run-android --port=8081 :)

๋‚ด๊ฐ€ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ์œ ์ผํ•œ ๋ฐฉ๋ฒ•์€ - ํฌํŠธ 8081์— ๋Œ€ํ•œ ๋ชจ๋“  ์ฐธ์กฐ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ณ  9088(์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ)๋กœ ๋ณ€๊ฒฝํ•˜๊ณ  ํฌํŠธ 9088๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋˜ํ•œ Dev ์„ค์ •์„ ํฌํŠธ 9088๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ์ ์œผ๋กœ ํฌํŠธ 8081์— ๋Œ€ํ•œ ์ฐธ์กฐ๋Š” ๊ฑฐ์˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. node_module/react-native ๋””๋ ‰ํ† ๋ฆฌ. ํฌํŠธ 8081์€ ๋‚ด ํ™˜๊ฒฝ์—์„œ ๋ฐ”์ด๋Ÿฌ์Šค ๊ฐ€๋“œ์— ์˜ํ•ด ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋ฅผ ์œ„ํ•ด Android ํ”Œ๋žซํผ ๋„๊ตฌ๊ฐ€ ์„ค์น˜๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค์Œ ๋ช…๋ น์–ด๋กœ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค.
์–‘์กฐ ํ†ต ์„ค์น˜ android-platform-tools

๊ทธ ํ›„ * react-native run android *๋กœ Android ์ŠคํŠœ๋””์˜ค ๋˜๋Š” ๋ช…๋ น์ค„์—์„œ ์‹คํ–‰

Mac์„ ์žฌ๋ถ€ํŒ…ํ•˜๋ฉด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์œ ๋ฅผ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

์ฒซ์งธ, ํ”„๋กœ์ ํŠธ ํŒŒ์ผ์— ์žˆ๋Š”์ง€ ํ™•์ธํ•œ ํ›„ ์ด ์†”๋ฃจ์…˜์ด ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.
react-native start
์ฝ”๋“œ ENOSPC์™€ ํ•จ๊ป˜ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ํฝ๋‹ˆ๋‹ค.
์ด ๊ฒฝ์šฐ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์‹ญ์‹œ์˜ค.
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
๊ทธ ํ›„ react-native start ๋ฅผ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋ฉด ENOSPC ์˜ค๋ฅ˜๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ํฝ๋‹ˆ๋‹ค.
๋‹ค์Œ์œผ๋กœ react-native run-android ๋ฅผ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค.
๊ฑฐ๊ธฐ์—, ๊ทธ๊ฒƒ์€ ์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค์˜ ์•ˆ๋“œ๋กœ์ด๋“œ ์—๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฆฌ๋ˆ…์Šค์—์„œ ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ž…๋‹ˆ๋‹ค.

์ด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
์ด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ์†”๋ฃจ์…˜์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.
๋จผ์ € ๋ชจ๋“  ๋…ธ๋“œ ๋ชจ๋“ˆ์„ ์‚ญ์ œํ–ˆ์Šต๋‹ˆ๋‹ค.
sudo rm -rf node_modules/
๊ทธ๋Ÿฐ ๋‹ค์Œ npm ํŒจํ‚ค์ง€๋ฅผ ๋‹ค์‹œ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค.
npm install

๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ฐ˜์‘ ํŒจํ‚ค์ง€๊ฐ€ ๊ดœ์ฐฎ์€์ง€ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์ด ๋ช…๋ น์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

react-native start

๊ทธ๊ฒƒ์€ ํŒจํ‚ค์ง€๊ฐ€ ๊ดœ์ฐฎ๋‹ค๋Š” ๊ฒƒ์„ ๋ณด์—ฌ์ฃผ๊ณ  ๋ฃจํŠธ๋กœ ์•ˆ๋“œ๋กœ์ด๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

react-native run-android --root

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด๊ฒƒ์ด ์ž‘๋™ํ•˜๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ Android 9๋ถ€ํ„ฐ ์ผ๋ฐ˜ ํ…์ŠคํŠธ HTTP(๋น„ HTTPS) ์ „์†ก์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ธˆ์ง€๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์•ฑ์„ ์‹คํ–‰ํ•˜๋Š” ๊ธฐ๊ธฐ์—์„œ ๊ฐœ๋ฐœ ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ ค๋ฉด ์ด ์†์„ฑ์„ _AndroidManifest.xml_ ํŒŒ์ผ์˜ application ์š”์†Œ์— ์ถ”๊ฐ€ํ•˜์„ธ์š”.

android:usesCleartextTraffic="true"

์ด Stackoverflow ๋ฌธ์ œ ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ •๋ณด

๊ธฐ๋ณธ ์›น ๋ธŒ๋ผ์šฐ์ €์— URL์„ ์ž…๋ ฅํ•˜์—ฌ ์žฅ์น˜๊ฐ€ ๊ฐœ๋ฐœ ์„œ๋ฒ„์— ์•ก์„ธ์Šคํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ…Œ์ŠคํŠธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ถˆํ–‰ํžˆ๋„ ๋ฐ˜์‘ ๋„ค์ดํ‹ฐ๋ธŒ ๊ฐœ๋ฐœ ๋„๊ตฌ๋Š” ์˜ค๋ฅ˜์˜ ์›์ธ์„ ์‚ผํ‚ค์ง€๋งŒ ์œ ์šฉํ•œ ์Šคํƒ ์ถ”์ ์„ ์–ป์„ ๋Œ€์ƒ ์•ฑ ๋‚ด์—์„œ ์ž์ฒด HTTP ์—ฐ๊ฒฐ์„ ๋งŒ๋“ค๋ ค๊ณ  ํ•˜๋ฉด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

@delj ๋ฐ˜์‘ ๋„ค์ดํ‹ฐ๋ธŒ ๊ฐœ๋ฐœ ๋„๊ตฌ๊ฐ€ ์˜ค๋ฅ˜์˜ ์›์ธ์„ ์‚ผํ‚ค๋Š” ๊ฒƒ์€ ๋ถˆํ–‰ํ•œ ์ผ์ž…๋‹ˆ๋‹ค.

ํŒ: android:usesCleartextTraffic= "true" ๋กœ ๋ฆด๋ฆฌ์Šค๋ฅผ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด manifestPlaceholders ๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.

AndroidManifest.xml
````
android:name= ".MainApplication"

android:usesCleartextTraffic="${isDebug}"
    >

````

์•ˆ๋“œ๋กœ์ด๋“œ/์•ฑ/๋นŒ๋“œ.gradle

 ๋นŒ๋“œ ์œ ํ˜• {
 ๋””๋ฒ„๊ทธ {
 manifestPlaceholders = [isDebug:true]
 }
 ํ’€์–ด ์ฃผ๋‹ค {
 manifestPlaceholders = [isDebug:false]

        minifyEnabled enableProguardInReleaseBuilds
        proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
        signingConfig signingConfigs.release
    }
}

๋‚˜๋Š” ๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๊ณ  Windows 10์—์„œ ๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ•œ ๊ฒƒ์€ ๋ง ๊ทธ๋Œ€๋กœ CMD๋ฅผ ๊ด€๋ฆฌ์ž๋กœ ์—ฌ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‚˜๋Š” ์—ฌ์ „ํžˆ์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๋ฐฑ์—…์„ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ? ์ด๊ฒƒ์€ ์™„์ „ํžˆ ํ„ฐ๋ฌด๋‹ˆ์—†๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํŽธ์ง€์˜ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด๊ณ  ์‹œ์ž‘๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ "์‹œ์ž‘ํ•˜๊ธฐ" ์ž์Šต์„œ๋Š” ์–ด๋–ป์Šต๋‹ˆ๊นŒ? ๋‚˜๋Š” ๋ง ๊ทธ๋Œ€๋กœ ์ด ๋ฒ„๊ทธ์— ๋ช‡ ์‹œ๊ฐ„์„ ๋ณด๋ƒˆ๋‹ค. ํŽ˜์ด์Šค๋ถ์€ ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋“ค์˜ ํŠœํ† ๋ฆฌ์–ผ์€ ์ˆœ์ „ํžˆ ์ž˜๋ชป๋˜์—ˆ๊ฑฐ๋‚˜ ๋งํฌํ•  ์ˆ˜ ์žˆ๋Š” ์ž˜ ์•Œ๋ ค์ง„ ๋ฌธ์ œ ํ•ด๊ฒฐ ์‚ฌ๋ก€์ž…๋‹ˆ๋‹ค.

๋‚ด ๋‹จ๊ณ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  1. ํ„ฐ๋ฏธ๋„ 1: adb ์—ญ๋ฐฉํ–ฅ tcp:8081 tcp:8081
  2. ํ„ฐ๋ฏธ๋„ 1: npm ์‹œ์ž‘
  3. ๋ฐ˜์‘ ๋„ค์ดํ‹ฐ๋ธŒ ์‹คํ–‰ ์•ˆ๋“œ๋กœ์ด๋“œ

์—ฌ์ „ํžˆ ์ด ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ 3๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ ํฌํŠธ ๊ฐ’์„ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋ˆ„๊ตฌ๋“ ์ง€ ๋„์™€์ฃผ์„ธ์š”.

๋‚˜๋Š” ์™„์ „ํžˆ ๋™์ •ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๊ฒƒ์„ ๊ณ ์น˜๋Š” ๋ฐ ํ•œ ์‹œ๊ฐ„์„ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ ์ž‘๋™ํ•˜๋ฉฐ ๊ท€ํ•˜์˜ ์žฅ์น˜์—์„œ๋„ ๋™์ผํ•œ ์ ‘๊ทผ ๋ฐฉ์‹์ด ์ž‘๋™ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—์„œ ์ง„ํ–‰ ์ค‘์ธ ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฉฐ ๊ทธ ์ค‘ ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ์ผ๋ฐ˜ ํ…์ŠคํŠธ ์„ค์ •์ž…๋‹ˆ๋‹ค. ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „์— ์•ฑ์„ ์ตœ์‹  Android SDK๋กœ ์—…๋ฐ์ดํŠธํ•˜์ง€ ์•Š์œผ๋ฉด ์ด๋Ÿฌํ•œ ์„ค์ •์ด ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”์ง€ ํ…Œ์ŠคํŠธํ•˜๋ ค๋ฉด ์ตœ์ƒ์œ„ ๋ Œ๋”๋ง ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜์— ์ด ์ฝ”๋“œ๋ฅผ ์‚ฝ์ž…ํ•˜์‹ญ์‹œ์˜ค. ์˜ˆ: <App

fetch('http://jofarnold.com')
  .then(res => res.text())
  .then(d => alert('ok'))
  .catch(e => {
    console.error(String(e));
});

http ๊ฐ€ ์•„๋‹ˆ๋ผ https ์— ์ฃผ์˜ํ•˜์‹ญ์‹œ์˜ค. ์˜ˆ, ๋‚ด ์‚ฌ์ดํŠธ๋Š” http๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ง€๊ธˆ์€ ํ›„ํšŒ๊ฐ€ ์—†๋‹ค!

์ด์ œ ์‹œ๋„

fetch('https://httpbin.org')
  .then(res => res.text())
  .then(d => alert('ok'))
  .catch(e => {
    console.error(String(e));
});

http ๋ฅผ ์ฐธ๊ณ ํ•˜์‹ญ์‹œ์˜ค.

์–ด๋Š ๊ฒƒ์ด ์‹คํŒจํ•ฉ๋‹ˆ๊นŒ? ๋‘˜ ๋‹ค ์‹คํŒจํ•˜๋ฉด ๋‹ค๋ฅธ ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์ œ๊ฐ€ ๋„์™€๋“œ๋ฆด ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ•ด๋‹น URL์ด ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์˜ Chrome์—์„œ ์ž‘๋™ํ•˜๋Š”์ง€ ํ™•์ธํ•˜์—ฌ ๋„คํŠธ์›Œํฌ๊ฐ€ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์„ ๋ฐฐ์ œํ•˜์‹ญ์‹œ์˜ค. ์ฒซ ๋ฒˆ์งธ๋Š” ์‹คํŒจํ•˜๊ณ (๋ฐ˜์‘ ๊ธฐ๋ณธ ๋ ˆ๋“œ๋ฐ•์Šค ์ œ๊ณต) ๋‘ ๋ฒˆ์งธ๋Š” ์„ฑ๊ณตํ•˜๋ฉด( ok ๊ฒฝ๊ณ ) Android ๋ณด์•ˆ ์„ค์ •์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •ํ•˜์ง€ ์•Š์€ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•ฉ์‹œ๋‹ค.

๋จผ์ € <application ์„น์…˜์˜ android/.../AndroidManifest.xml์— ๋‹ค์Œ์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

<manifest
....
<application
... other settings
    android:usesCleartextTraffic="true"  <---------- this
    android:networkSecurityConfig="@xml/network_security_config" <------- and this
  >
   ... etc

๊ทธ๋Ÿฐ ๋‹ค์Œ android/...res/xml/network_security_config.xml์— ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค(xml ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํŒŒ์ผ ์ด๋ฆ„์€ ํŠน๋ณ„ํ•œ ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์œ„์˜ ์ฐธ์กฐ์™€ ๋™์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค). :

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">jofarnold.com</domain>
    </domain-config>
</network-security-config>

ํ•œ ํ„ฐ๋ฏธ๋„์—์„œ react-native start --reset-cache ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋‹ค๋ฅธ ํ„ฐ๋ฏธ๋„์—์„œ react-native run-android ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋„๋ก ๋‹ค์‹œ ์ปดํŒŒ์ผํ•˜์‹ญ์‹œ์˜ค.

์ด์ œ ์•ฑ์„ ๋กœ๋“œํ•˜๋ฉด ํ™•์ธ ํŒ์—…์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ข‹์€ ๋ฌผ๊ฑด! ๋‚ด ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์‚ฌ์ดํŠธ๋ฅผ fetch ๊ด€๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด์ œ ๋ฐ˜์‘ ๋„ค์ดํ‹ฐ๋ธŒ๋ฅผ ๋ถ„๋ฅ˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋ฅผ ์œ„ํ•ด ์„œ๋ฒ„๋Š” 10.0.2.2์— ์žˆ๊ณ  ๋””๋ฒ„๊ฑฐ๋Š” localhost ๋˜๋Š” ์ด์™€ ์œ ์‚ฌํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค(๊ธฐ์–ต์ด ๋‚˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ถ€๋ถ„์ ์œผ๋กœ ์ด๊ฒƒ์„ ์“ฐ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค). ์–ด๋Š ์ชฝ์ด๋“  ๊ทธ๋“ค์€ ๋‹ค๋ฅด๋ฏ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด ์œ„์˜ jofarnold.com ๋ฅผ localhost ๋กœ ๋ณ€๊ฒฝํ•œ ๋‹ค์Œ ์•ฑ์˜ ์„ค์ • ๋ฉ”๋‰ด(mac์˜ ๊ฒฝ์šฐ cmd-M) > ๊ฐœ๋ฐœ์ž ์„ค์ •์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. "JS Delta ์‚ฌ์šฉ"์„ ๋„๊ณ (์ž˜ ์ž‘๋™ํ•˜์ง€ ์•Š์Œ) ๋””๋ฒ„๊น…์—์„œ ์„œ๋ฒ„ ํ˜ธ์ŠคํŠธ์™€ ํฌํŠธ๋ฅผ localhost:8081 ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

๋ณด์•ˆ ๊ตฌ์„ฑ ํŒŒ์ผ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">localhost</domain>
    </domain-config>
</network-security-config>

๋‹ค์‹œ ์ปดํŒŒ์ผํ•˜๊ณ  react-native start --reset-cache ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด loading... ๋˜๋Š” ๋ฌด์—‡์ด๋“  ๊ฐ„์— ์•ฑ ์ƒ๋‹จ์— ๋…น์ƒ‰ ๋ง‰๋Œ€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ํ„ฐ๋ฏธ๋„์—์„œ Delta, Map ๋“ฑ๊ณผ ๋ฒˆ๋“ค๋กœ ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด ์ƒ๊ฐ์— adb reverse ์„ ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์–ด์จŒ๋“  RN ์Šคํฌ๋ฆฝํŠธ์˜ ์ผ๋ถ€๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค.

ํ–‰์šด์„ ๋น•๋‹ˆ๋‹ค!

๋‚ด ๋ฌธ์ œ๋Š” ๋‚ด Android ์—๋ฎฌ๋ ˆ์ดํ„ฐ๊ฐ€ Wi-Fi ๋ฐ ๋ฐ์ดํ„ฐ์—์„œ ์—ฐ๊ฒฐ ํ•ด์ œ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ๋“ค์„ ์ผœ๊ณ  ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ฐ™์€ ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๋ฉด ๋„์›€์ด๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

image

๋‚ด ๋ฌธ์ œ๋Š” ๋‚ด Android ์—๋ฎฌ๋ ˆ์ดํ„ฐ๊ฐ€ Wi-Fi ๋ฐ ๋ฐ์ดํ„ฐ์—์„œ ์—ฐ๊ฒฐ ํ•ด์ œ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋‚˜๋Š” ๊ทธ๊ฒƒ๋“ค์„ ์ผœ๊ณ  ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋ˆ„๊ตฐ๊ฐ€๊ฐ€ ๊ฐ™์€ ๋ฌธ์ œ์— ์ง๋ฉดํ•˜๋ฉด ๋„์›€์ด๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ Mateo์˜ ์˜๊ฒฌ์— ์ถ”๊ฐ€ํ•ด์•ผ ํ•˜๋Š” ํ•œ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. MacBook์„ ๋‹ซ๊ณ  ๋‹ค๋ฅธ Wi-Fi ๋„คํŠธ์›Œํฌ์—์„œ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๋ฉด ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์˜ "์™€์ดํŒŒ์ด"๊ฐ€ ์‹คํŒจํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ํŠนํžˆ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์˜ ๋ฌธ์ œ๊ฐ€ ์•„๋‹ˆ๋ผ๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์žˆ์ง€๋งŒ ์ด ์ฃผ์ œ์— ๋Œ€ํ•œ ์ข‹์€ SEO๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฏ€๋กœ ์—ฌ๊ธฐ์— ์ด โ€‹โ€‹๋Œ“๊ธ€์„ ๋‚จ๊ธฐ๋Š” ๊ฒƒ์ด ๋‹ค๋ฅธ ์‚ฌ๋žŒ์—๊ฒŒ ๋„์›€์ด ๋˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

Android 5.0 ์ด์ƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ–ˆ์ง€๋งŒ Android 4..4์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

Android 5.0 ์ด์ƒ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๊ฒฐํ–ˆ์ง€๋งŒ Android 4..4์—์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

๋‚˜๋Š” ๋™์˜ํ•œ๋‹ค

Android 9 ์—๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ์‹คํ–‰ ์ค‘์ธ ๊ฒฝ์šฐ @delj ์— ๋ช…์‹œ๋œ ๋Œ€๋กœ manifest.xml์˜ Application ํƒœ๊ทธ์— android:usesCleartextTraffic="true" ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํŒจํ‚ค์ง€ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰ ์ค‘์ž…๋‹ˆ๊นŒ? react-native run-android ์‹คํ–‰ํ•  ๋•Œ ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. react-native start ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž์ฒด์ ์œผ๋กœ ์‹œ์ž‘ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ฌธ์ œ๊ฐ€ ํŒจํ‚ค์ง€ ํ”„๋กœ๊ทธ๋žจ์ด ์ „ํ˜€ ์‹œ์ž‘๋˜์ง€ ์•Š๋Š” ๊ฒƒ์ธ์ง€ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

์™œ ์ด๋Ÿฐ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋‚˜์š”?? OS 10.13.6์ด ์„ค์น˜๋œ Mac์ด ์žˆ๊ณ  ์„œ๋ฒ„๊ฐ€ ์ž๋™์œผ๋กœ ์‹œ์ž‘๋˜๊ธฐ ์ „์—

@JofBigHealth ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์ œ์•ˆํ•œ ๋Œ€๋กœ ์ˆ˜ํ–‰ํ–ˆ์œผ๋ฉฐ ์—๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ ์ž‘๋™ํ•˜๊ณ  ์‹ค์ œ ์žฅ์น˜์— ์—ฐ๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ์•ŒํŒŒ ์ฑ„๋„์—์„œ ์•ฑ์„ ๋‹ค์šด๋กœ๋“œํ•  ๋•Œ ์•ฑ์— ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋””๋ฒ„๊น…ํ•  ์ œ์•ˆ์ด ์žˆ์Šต๋‹ˆ๊นŒ?

@ sheva007 "์•ŒํŒŒ ์ฑ„๋„"์ด ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ตฌ์ฒด์ ์œผ๋กœ ์–ด๋–ค ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š”์ง€ ์„ค๋ช…ํ•˜๊ณ  ๋” ์ž์„ธํžˆ ํฌํ•จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@JofBigHealth ๋ˆ„๋ฝ๋œ ์ •๋ณด์— ๋Œ€ํ•ด ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค.
์—…๋ฐ์ดํŠธ: ์ด์ œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. Google Play์—์„œ ํ…Œ์Šคํ„ฐ๊ฐ€ ์—…๋ฐ์ดํŠธ๋œ ์ž‘์—… ๋ฒ„์ „์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ •๋ง ๊ณ ๋งˆ์›Œ :)
๋‚ด ์›๋ž˜ ๋ฌธ์ œ๋Š” ์•ฑ์ด < Android 9 ์ž˜ ์ž‘๋™ํ•˜์ง€๋งŒ Android 9์™€ ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•  ๋•Œ ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ์„ ํฌํ•จํ•œ ์•ฑ์ด ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ Google Play ์•ŒํŒŒ ์ฑ„๋„์— ์ œ์ถœํ–ˆ์„ ๋•Œ ๋„คํŠธ์›Œํฌ ํ˜ธ์ถœ์„ ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ํฌํŠธ๋ฅผ ๋ฐ˜์ „์‹œํ‚ค๋Š” ๊ฒƒ์ด ๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ–ˆ์Šต๋‹ˆ๋‹ค.
@ashafizullah ๊ฐ€ ์ œ์•ˆํ•œ ๋Œ€๋กœ

๋‚ด๊ฐ€ ์—ด์—ˆ๋˜ Android Studio๋ฅผ ๋‹ซ์œผ๋ฉด ์ด์ƒํ•˜๊ฒŒ ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์œ  ๋ถˆ๋ถ„๋ช…...

์—…๋ฐ์ดํŠธ: 0.57.7๋กœ ์—…๊ทธ๋ ˆ์ด๋“œํ•  ๋•Œ ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์˜ ๊ฒฝ์šฐ adb ์—ญ๋ฐฉํ–ฅ ํ”„๋ก์‹œ ์ˆ˜์ •์„ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜ ๊ฐœ๋ฐœ์ž ๋ฉ”๋‰ด์—์„œ ํฌํŠธ๋ฅผ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ 10.0.1.1:8080(๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ถ”์ธก) ๋ฐ Just Works์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. react-native start ๋˜๋Š” react-native start --reset-cache (ํ•„์š”ํ•œ ๊ฒฝ์šฐ)๋ฅผ ์‹คํ–‰ํ•˜๊ณ  Android Studio์—์„œ ๋นŒ๋“œํ•˜๋ฉด ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ๋””๋ฒ„๊น…์œผ๋กœ ์„ค์ •ํ–ˆ๋‹ค๋ฉด ๋””๋ฒ„๊ฑฐ๋ฅผ ์‹คํ–‰ํ•ด์•ผ ํ•˜๊ณ  Android Studio์—์„œ ๋‹ค์‹œ ๋นŒ๋“œํ•ด์•ผ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋•Œ๋•Œ๋กœ ์ฒ˜์Œ์— ์—ฐ๊ฒฐ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค(๊ฒฝํ•ฉ ์กฐ๊ฑด์œผ๋กœ ์˜์‹ฌ๋˜๋Š” ๊ฒฝ์šฐ). ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ์•ฑ ๋งค๋‹ˆํŽ˜์ŠคํŠธ์—์„œ ๋ณด์•ˆ ์„ค์ •์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์„ ์žŠ์ง€ ๋งˆ์‹ญ์‹œ์˜ค.

์žฅ์น˜๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค.

์žฅ์น˜์—์„œ ์‹คํ–‰ํ•˜๋ ค๊ณ  ํ•  ๋•Œ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์žฅ์น˜์— ๋Œ€ํ•œ ์†”๋ฃจ์…˜์ด ์žˆ์Šต๋‹ˆ๊นŒ?

๊ฐ™์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋„์™€์ฃผ์„ธ์š”.

ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ๊ฒฝ๋กœ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. "adb" ๊ฒฝ๋กœ๋Š” C:Users\user\AppData\Local\Android\Sdk/platformtools์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ Windows 10์—์„œ ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. (๋””๋ฒ„๊ทธ ์„œ๋ฒ„ ํ˜ธ์ŠคํŠธ ๋ฐ ํฌํŠธ๋ฅผ ์„ค์ •ํ•œ ํ›„ .. )
๋ฐฉํ™”๋ฒฝ ์„ค์ •(Windows ๋ฐฉํ™”๋ฒฝ>Windows ๋ฐฉํ™”๋ฒฝ์„ ํ†ตํ•ด ์•ฑ ๋˜๋Š” ๊ธฐ๋Šฅ ํ—ˆ์šฉ)์„ ํ™•์ธํ•˜๊ณ  ๋‘ ๊ฐœ์˜ Node.js ์•ฑ์ด ์žˆ์ง€๋งŒ ๊ทธ ์ค‘ ํ•˜๋‚˜๋Š” ๋ฐฉํ™”๋ฒฝ์„ ํ†ต๊ณผํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค! ์ƒ์ž๋ฅผ ์„ ํƒํ•˜๊ณ  ์ €์žฅํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค!

์ด ์ข‹์€ ์งˆ๋ฌธ .. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์ผ.!

https://stackoverflow.com/questions/37180714/react-native-could-not-connect-to-development-server-android-app

Android 9 ์—๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ์‹คํ–‰ ์ค‘์ธ ๊ฒฝ์šฐ @delj ์— ๋ช…์‹œ๋œ ๋Œ€๋กœ manifest.xml์˜ Application ํƒœ๊ทธ์— android:usesCleartextTraffic="true" ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ถ”์ฒœ

๊ฐ™์€ ์˜ค๋ฅ˜์ž…๋‹ˆ๋‹ค.
windows7+์•ˆ๋“œ๋กœ์ด๋“œ ์ŠคํŠœ๋””์˜ค3.3.2.
๋…ธ๋“œ ์„œ๋ฒ„๊ฐ€ ํ™œ์„ฑํ™”๋˜์–ด ์žˆ๊ณ  ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ํฌ๋กฌ์—์„œ 127.0.0.1์„ vivsitํ•  ์ˆ˜ ์žˆ์ง€๋งŒ Awesome ์•ฑ์€ ๋…ธ๋“œ ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.
AndroidManisfesto.xml์— android:usesCleartextTraffic="true" ๋„ ์ถ”๊ฐ€ํ–ˆ์ง€๋งŒ ์—ฌ์ „ํžˆ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

image
image
image
image
image
image
image
image

@aflext ๋นจ๊ฐ„์ƒ‰ ์ƒ์ž์—์„œ adb reverse tcp:8081 tcp:8081 ๋ช…๋ น์„ ์‹คํ–‰ํ•˜์…จ์Šต๋‹ˆ๊นŒ? ๊ทธ๊ฒƒ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

@JofBigHealth URL์„ 127.0.0.1:8081 ์—์„œ localhost:8081 ๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ํ•ด๊ฒฐํ–ˆ์Šต๋‹ˆ๋‹ค.

์ œ ๊ฒฝ์šฐ ์†”๋ฃจ์…˜์€ "์›๊ฒฉ์œผ๋กœ JS ๋””๋ฒ„๊ทธ" ๋น„ํ™œ์„ฑํ™”/ํ™œ์„ฑํ™”์˜€์Šต๋‹ˆ๋‹ค.

@ashafizullah : ์ €๋„ ์‹œ๋„ํ•ด ๋ดค์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์—ฌ์ „ํžˆ ์šด์ด ์—†์Šต๋‹ˆ๋‹ค.

@ashafizullah ์˜ˆ, ์ €์—๊ฒŒ๋„ ํšจ๊ณผ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

Windows๋ฅผ ํ†ตํ•ด ์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ????

๋‚ด ์˜ค๋ฅ˜๋Š” inotify limits๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์ด ๋งํฌ๋Š” https://github.com/guard/listen/wiki/Increasing-the-amount-of-inotify-watchers ๋ฅผ ๋„์™”์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค! ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!!

๋‚ด ์˜ค๋ฅ˜๋Š” inotify limits๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
์ด ๋งํฌ๋Š” https://github.com/guard/listen/wiki/Increasing-the-amount-of-inotify-watchers ๋ฅผ ๋„์™”์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ผํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ณ ๋งˆ์›Œ.

<application ... ํƒœ๊ทธ์— android:usesCleartextTraffic="true" ๋ฅผ AndroidManifest.xml ์— ์ถ”๊ฐ€ํ•˜๊ณ  ์•ฑ์„ ๋‹ค์‹œ ๋นŒ๋“œํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ํ›„, dev ์„œ๋ฒ„์—์„œ ์ •์ƒ์ ์œผ๋กœ ๋กœ๋“œ๋˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋””๋ฒ„๊ฑฐ๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ๋‹ค๋ฅธ ์žฅ์น˜์— ์—ฐ๊ฒฐํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฐ ์ผ์ด ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋””๋ฒ„๊ฑฐ์— ์—ฐ๊ฒฐ๋œ iOS ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ๋Š” Android ์žฅ์น˜๊ฐ€ ํŒจํ‚ค์ €์— ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์„ ์ฐจ๋‹จํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. iOS ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ ์›๊ฒฉ ๋””๋ฒ„๊น…์„ ์ค‘์ง€ํ•˜๋ฉด Android ์žฅ์น˜๋ฅผ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ Android ์žฅ์น˜์—์„œ๋„ ์›๊ฒฉ์œผ๋กœ ๋””๋ฒ„๊น…์„ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ Windows 10์—์„œ ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. (๋””๋ฒ„๊ทธ ์„œ๋ฒ„ ํ˜ธ์ŠคํŠธ ๋ฐ ํฌํŠธ๋ฅผ ์„ค์ •ํ•œ ํ›„ .. )
๋ฐฉํ™”๋ฒฝ ์„ค์ •(Windows ๋ฐฉํ™”๋ฒฝ>Windows ๋ฐฉํ™”๋ฒฝ์„ ํ†ตํ•ด ์•ฑ ๋˜๋Š” ๊ธฐ๋Šฅ ํ—ˆ์šฉ)์„ ํ™•์ธํ•˜๊ณ  ๋‘ ๊ฐœ์˜ Node.js ์•ฑ์ด ์žˆ์ง€๋งŒ ๊ทธ ์ค‘ ํ•˜๋‚˜๋Š” ๋ฐฉํ™”๋ฒฝ์„ ํ†ต๊ณผํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค! ์ƒ์ž๋ฅผ ์„ ํƒํ•˜๊ณ  ์ €์žฅํ•˜๋ฉด ๋ชจ๋“  ๊ฒƒ์ด ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค!

์ด๊ฒƒ์€ ์ œ ๋ฌธ์ œ์ด๊ธฐ๋„ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๋‚˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•ด๊ฒฐํ–ˆ๋‹ค.

https://www.youtube.com/watch?v=XhiE0HEiYd4

https://stackoverflow.com/questions/44446523/unable-to-load-script-from-assets-index-android-bundle-on-windows

ํ•˜์ง€๋งŒ .... ์—๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ ์•ฑ์„ ๋‹ค์‹œ๋กœ๋“œํ•˜๋ฉด ๋‹ค์‹œ ์ถฉ๋Œํ•˜๊ณ  ๋ฉ”์‹œ์ง€๊ฐ€ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.
๊ฐœ๋ฐœ ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋ฐฉํ™”๋ฒฝ์— node.js์™€ genymotion player.exe๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๋ชจ๋‘ ์žฌ์‹œ์ž‘(geny, react)์„ ํ•ด์„œ ๋‹ค์‹œ ์‹คํ–‰์„ ํ•ด๋ดค๋Š”๋ฐ...

ctrl+Win cmd ๋ช…๋ น์ค„ ipconfig๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ipV4 ์ฃผ์†Œ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค. ๊ด‘์‚ฐ์€ 192.168.0.111์ž…๋‹ˆ๋‹ค.
image
image

์„ฑ๊ณต์ ์œผ๋กœ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!

<application ... ํƒœ๊ทธ์— android:usesCleartextTraffic="true" ๋ฅผ AndroidManifest.xml ์— ์ถ”๊ฐ€ํ•˜๊ณ  ์•ฑ์„ ๋‹ค์‹œ ๋นŒ๋“œํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ํ›„, dev ์„œ๋ฒ„์—์„œ ์ •์ƒ์ ์œผ๋กœ ๋กœ๋“œ๋˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์—„์ฒญ ๊ณ ๋งˆ์›Œ.

์‹ค์ œ Android ๊ธฐ๊ธฐ์—์„œ๋งŒ ๋™์ผํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
ํ•ด๊ฒฐ์ฑ…:
1) android/app/src/main/res/xml/network_security_config.xml ํŒŒ์ผ ์ถ”๊ฐ€

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">localhost</domain>
    </domain-config>
</network-security-config>

2) android/app/src/main/AndroidManifest.xml์— ๋ผ์ธ ์ถ”๊ฐ€

<application
    ...
    android:networkSecurityConfig="@xml/network_security_config"
    ...
>

์น˜๋ฃŒ๋ฒ•์„ ์ฐพ์œผ์‹ญ์‹œ์˜ค.
์ด ๋ฌธ์ œ๋Š” ๋‹ค์Œ ๋‹จ๊ณ„์—์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  1. (ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ) mkdir android/app/src/main/assets
  2. react-native ๋ฒˆ๋“ค --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src /๋ฉ”์ธ/ํ•ด์ƒ๋„
  3. ๋ฐ˜์‘ ๋„ค์ดํ‹ฐ๋ธŒ ์‹คํ–‰ ์•ˆ๋“œ๋กœ์ด๋“œ

https://stackoverflow.com/questions/44446523/unable-to-load-script-from-assets-index-android-bundle-on-windows

adb reverse tcp:8081 tcp:8081 ์„ ์‹คํ–‰ํ•œ ํ›„ ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค. ์ด์ „์—๋Š” ํŒจํ‚ค์ง€ ์„œ๋ฒ„ ์ฐฝ์„ ์—ด์—ˆ์ง€๋งŒ ์ข…์†์„ฑ ๊ทธ๋ž˜ํ”„ ๋กœ๋“œ๊ฐ€ ์™„๋ฃŒ๋œ ํ›„ ์•„๋ฌด ์ผ๋„ ์ผ์–ด๋‚˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ๋ฉ”์„ธ์ง€.
์ด์ œ ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๋ช…๋ น์„ ์‹คํ–‰ํ•œ ํ›„ ๋ชจ๋“  ๊ฒƒ์ด ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ด๋Š” ๋„คํŠธ์›Œํฌ ๋ณด์•ˆ ๊ตฌ์„ฑ ์— ๋”ฐ๋ผ Android 9.0 ์ด์ƒ์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.
๊ทธ๋ž˜์„œ ์›น์—์„œ ์ฐพ์€ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์†”๋ฃจ์…˜์„ ์‹œ๋„ํ•œ ํ›„ ๊ธฐ๋ณธ Android logcat์„ ์ˆ˜๋™์œผ๋กœ ์กฐ์‚ฌํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. android:usesCleartextTraffic="true" ๋ฅผ ์ถ”๊ฐ€ํ•œ ํ›„์—๋„ logcat์—์„œ ์ด๊ฒƒ์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

06-25 02:32:34.561 32001 32001 E unknown:ReactNative: Caused by: java.net.UnknownServiceException: CLEARTEXT communication to 192.168.29.96 not permitted by network security policy

๊ทธ๋ž˜์„œ ๋ฐ˜์‘ ๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ์˜ ์†Œ์Šค๋ฅผ ๊ฒ€์‚ฌํ•˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค. debug ๋ณ€์ข…์—๋Š” main ๋ณ€์ข…๊ณผ ์ถฉ๋Œํ•˜๋Š” react-native์— ์˜ํ•ด ์ •์˜๋œ network-security-config๊ฐ€ ์ด๋ฏธ ์žˆ์Œ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด์— ๋Œ€ํ•œ ์‰ฌ์šด ํ•ด๊ฒฐ์ฑ…์ด ์žˆ์Šต๋‹ˆ๋‹ค.
<app-src>/android/app/src/debug/res/xml/react_native_config.xml ๋กœ ์ด๋™
์ž์‹ ์˜ IP ์ฃผ์†Œ๋กœ ์ƒˆ ์ค„์„ ์ถ”๊ฐ€ํ•˜์‹ญ์‹œ์˜ค.์ฒ˜๋Ÿผ:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
  <domain-config cleartextTrafficPermitted="true">
    <domain includeSubdomains="false">localhost</domain>
    <domain includeSubdomains="false">10.0.2.2</domain>
    <domain includeSubdomains="false">10.0.3.2</domain>
    ***<domain includeSubdomains="false">192.168.29.96</domain>***
  </domain-config>
</network-security-config>

๋‚ด ์ปดํ“จํ„ฐ์˜ ๋กœ์ปฌ IP(Linux์˜ ๊ฒฝ์šฐ ifconfig ์—์„œ ํ™•์ธ)๊ฐ€ 192.168.29.96์ด๋ฏ€๋กœ * ์— ์œ„์˜ ์ค„์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋Ÿฐ ๋‹ค์Œ Android์šฉ์œผ๋กœ ์ •๋ฆฌํ•˜๊ณ  ๋‹ค์‹œ ๋นŒ๋“œํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค!

cd <app-src>/android
./gradlew clean
cd <app-src>
react-native run-android

์ด๊ฒƒ์ด ๋‹น์‹ ์„ ์œ„ํ•ด ์ž‘๋™ํ•˜๊ธฐ๋ฅผ ๋ฐ”๋ž๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ ํ•œ ์ผ: (์—๋ฎฌ๋ ˆ์ดํ„ฐ Android Pie 9์—์„œ ์ž‘์—… ์ค‘)

  1. ์—๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ Ctrl+M ๋ฐ Dev Setting Debug server host & port for device ์— IP ๋ฐ ํฌํŠธ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. Bundler์˜ ํ˜ธ์ŠคํŠธ ๋ฐ ํฌํŠธ(๊ธฐ๋ณธ๊ฐ’: localhost:8081 )๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ˜ธ์ŠคํŠธ ๋ฐ ํฌํŠธ๋ฅผ ์„ค์ •ํ•˜๊ณ  ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์— ์˜ํ•ด ํฌํŠธ๊ฐ€ ์ฐจ๋‹จ๋˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  2. ํ™ˆ ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ adb reverse tcp:8081 tcp:8081 ์‹คํ–‰
  3. android:usesCleartextTraffic="true" $7$#$์˜ <application> ๋…ธ๋“œ์— AndroidManifest.xml ์ถ”๊ฐ€
  4. ์œ„์˜ ์„ธ ๊ฐ€์ง€ ์‚ฌํ•ญ์„ ์™„๋ฃŒํ•œ ํ›„ ํ”„๋กœ์ ํŠธ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค.

@Eyesonly88 ๋•๋ถ„ ์— ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

ํŠนํžˆ targetSdkVersion์„ API 28๋กœ ์„ค์ •ํ•  ๋•Œ ์ด ๋ฌธ์ œ์— ์ง๋ฉดํ•œ ๊ฒฝ์šฐ.

network_security_config ํŒŒ์ผ์— ๋‹ค์Œ ์ค„์„ ์ถ”๊ฐ€ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

    <base-config cleartextTrafficPermitted="true">
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>

์ถ”์‹ : ์ œ ๊ฒฝ์šฐ์—๋Š” ๊ฐ ํ”Œ๋ ˆ์ด๋ฒ„์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ network_security_config ํŒŒ์ผ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋””๋ฒ„๊น… ๋ฌธ์ œ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋””๋ฒ„๊ทธ ํ”Œ๋ ˆ์ด๋ฒ„์˜ network_security_config ํŒŒ์ผ์— ์ด ์ค„์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ–ˆ์Šต๋‹ˆ๋‹ค.

==================================================== =========================

์•„๋ž˜ ๋ฒ„๊ทธ์— ๋Œ€ํ•œ ์ถ”๊ฐ€ ์ •๋ณด:

https://developer.android.com/training/articles/security-config.html ๋กœ ์ด๋™ํ•˜๋ฉด ์œ„์˜ ์ฝ”๋“œ ์ค„์ด Android API 24 ~ API 27์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ๋ณด์•ˆ ๊ตฌ์„ฑ์ž„์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (Android 7.0 ~ ์•ˆ๋“œ๋กœ์ด๋“œ 8.1).
์ด๊ฒƒ์€ ๋‚ด๊ฐ€ ์˜ค๋ฅ˜์— ์ง๋ฉดํ–ˆ๋˜ Android 9, API 28์˜ ๊ฒฝ์šฐ ๊ธฐ๋ณธ ๊ตฌ์„ฑ์ด ๋ณ€๊ฒฝ๋˜์—ˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.
๋” ๊ตฌ์ฒด์ ์œผ๋กœ ๋งํ•˜๋ฉด Android API 28์˜ ๊ธฐ๋ณธ ๊ตฌ์„ฑ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    <base-config cleartextTrafficPermitted="false">
        <trust-anchors>
            <certificates src="system" />
        </trust-anchors>
    </base-config>

.
์ด๊ฒƒ์ด ์ด์ „ API์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ๊ตฌ์„ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ํšจ๊ณผ์ ์ธ ์ด์œ ์ž…๋‹ˆ๋‹ค.

์ฒ˜์Œ์— ์ €์—๊ฒŒ ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ๋˜ ๋‹ค๋ฅธ ๊ฒƒ์€ targetSdkVersion์„ api 27๋กœ ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด์—ˆ์Šต๋‹ˆ๋‹ค. API 28์—์„œ ์‹คํ–‰ํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋ฉด ์ด๊ฒƒ๋„ ํšจ๊ณผ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Android 9 ์—๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ์‹คํ–‰ ์ค‘์ธ ๊ฒฝ์šฐ @delj ์— ๋ช…์‹œ๋œ ๋Œ€๋กœ manifest.xml์˜ Application ํƒœ๊ทธ์— android:usesCleartextTraffic="true" ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ถ”์ฒœ

๋‹น์‹ ์€ ๋‚ด ์‹œ๊ฐ„์„ ์ ˆ์•ฝํ–ˆ์Šต๋‹ˆ๋‹ค. ์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์–˜๋“ค ์•„ ์—๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ Wi-Fi๋ฅผ ์—ด๋ฉด ์ €์—๊ฒŒ ํšจ๊ณผ์ ์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋‚ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐ ํ•œ ๊ฒƒ์€ yarn start sudo yarn start ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์—ˆ์Šต๋‹ˆ๋‹ค.
๋‚ด package.json์— ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

{
...
"scripts":{
"start":"react-native start"
}
....
}

xCode ๋˜๋Š” Android Studio์™€ ๊ฐ™์€ ์—๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ ์„ค์ •์—์„œ ๊ฐœ๋ฐœ์ž ์„œ๋ฒ„ ์ฃผ์†Œ๋ฅผ IP๋กœ ์„ค์ •ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์ž๋™์œผ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์„ ์ œ๊ฑฐํ•˜๊ณ  ์•ฑ์„ ๋‹ค์‹œ ์‹คํ–‰ํ•˜์‹ญ์‹œ์˜ค. ๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

Android 9 ์—๋ฎฌ๋ ˆ์ดํ„ฐ๋ฅผ ์‹คํ–‰ ์ค‘์ธ ๊ฒฝ์šฐ @delj ์— ๋ช…์‹œ๋œ ๋Œ€๋กœ manifest.xml์˜ Application ํƒœ๊ทธ์— android:usesCleartextTraffic="true" ๋ฅผ ์ถ”๊ฐ€ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ถ”์ฒœ

๋‹น์‹ ์€ ๋‚ด ํ•˜๋ฃจ๋ฅผ ์ €์žฅ

๋‚ด๊ฐ€ ํ•œ ์ผ: (์—๋ฎฌ๋ ˆ์ดํ„ฐ Android Pie 9์—์„œ ์ž‘์—… ์ค‘)

  1. ์—๋ฎฌ๋ ˆ์ดํ„ฐ์—์„œ Ctrl+M ๋ฐ Dev Setting Debug server host & port for device ์— IP ๋ฐ ํฌํŠธ๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. Bundler์˜ ํ˜ธ์ŠคํŠธ ๋ฐ ํฌํŠธ(๊ธฐ๋ณธ๊ฐ’: localhost:8081 )๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ˜ธ์ŠคํŠธ ๋ฐ ํฌํŠธ๋ฅผ ์„ค์ •ํ•˜๊ณ  ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์— ์˜ํ•ด ํฌํŠธ๊ฐ€ ์ฐจ๋‹จ๋˜์ง€ ์•Š์•˜๋Š”์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.
  2. ํ™ˆ ํ”„๋กœ์ ํŠธ ๋””๋ ‰ํ† ๋ฆฌ์—์„œ adb reverse tcp:8081 tcp:8081 ์‹คํ–‰
  3. android:usesCleartextTraffic="true" $7$#$์˜ <application> ๋…ธ๋“œ์— AndroidManifest.xml ์ถ”๊ฐ€
  4. ์œ„์˜ ์„ธ ๊ฐ€์ง€ ์‚ฌํ•ญ์„ ์™„๋ฃŒํ•œ ํ›„ ํ”„๋กœ์ ํŠธ๋ฅผ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜์‹ญ์‹œ์˜ค.

@rafidamr ์˜ ์†”๋ฃจ์…˜์ด ์˜ฌ๋ฐ”๋ฅธ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ €๋Š” ํšŒ์‚ฌ ํ™˜๊ฒฝ์—์„œ ํฌํŠธ 8081์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด Metro Bundler๋ฅผ ๋‹ค๋ฅธ ํฌํŠธ๋กœ ์ „ํ™˜ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • adb reverse tcp:8088 tcp:8088
  • react-native run-android --port 8088

๊ทธ๋ฆฌ๊ณ  ๋‹น์—ฐํžˆ ์—๋ฎฌ๋ ˆ์ดํ„ฐ์˜ ๊ฐœ๋ฐœ์ž ์„ค์ •์—์„œ ์ƒˆ ํฌํŠธ๋ฅผ ๊ฐ€๋ฆฌ์ผฐ์Šต๋‹ˆ๋‹ค.

@camposbrunocampos ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ๐Ÿ‘๐Ÿผ , API level 28 target: Android 9.0 ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.
network_security_config.xml ๋ฅผ ์—…๋ฐ์ดํŠธํ–ˆ์œผ๋ฉฐ ์ด์ œ ์—๋ฎฌ๋ ˆ์ดํ„ฐ๊ฐ€ ์ œ๋Œ€๋กœ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

ios์™€ android์—์„œ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค(android studio ์—†์ด, xcode๊ฐ€ ์žˆ๊ณ  xcode๊ฐ€ ์—†๋Š” Android ์ŠคํŠœ๋””์˜ค์—์„œ ์‹œ๋„) ๋‚˜๋Š” ์œ„์— ๋ช…์‹œ๋œ ๋ชจ๋“  ๊ฒƒ์„ ์‹œ๋„ํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ ๋„์›€์ด๋˜์ง€ ์•Š์€ ๊ฒƒ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • network_security_config.xml
  • adb ์—ญ๋ฐฉํ–ฅ
  • IP ์ฃผ์†Œ๋ฅผ ์„œ๋ฒ„์˜ IP๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.
  • ๋“ฑ..

๋‚ด๊ฐ€ํ•ด์•ผ ํ•  ์œ ์ผํ•œ ์ผ์€ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. sudo npm start from react native project directory. ๊ถŒํ•œ ๋ฌธ์ œ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. (๋งฅ์„ ์‚ฌ์šฉํ•˜์—ฌ)

@inspiraluna ๊ธฐ๋ณธ npm ์„ค์น˜ ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. ์‹œ์Šคํ…œ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ chownํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋งค๋‹ˆํŽ˜์ŠคํŠธ์—์„œ android:usesCleartextTraffic= "true"๋ฅผ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

....
android:usesCleartextTraffic="true"
android:theme="@style/AppTheme">

๊ทธ๊ฒƒ์€ ๋‚˜๋ฅผ ์œ„ํ•ด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

<application ... ํƒœ๊ทธ์— android:usesCleartextTraffic="true" ๋ฅผ AndroidManifest.xml ์— ์ถ”๊ฐ€ํ•˜๊ณ  ์•ฑ์„ ๋‹ค์‹œ ๋นŒ๋“œํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ํ›„, dev ์„œ๋ฒ„์—์„œ ์ •์ƒ์ ์œผ๋กœ ๋กœ๋“œ๋˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋‚˜์—๊ฒŒ๋„ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ–ˆ์ง€๋งŒ ์ฒ˜์Œ์— ์ด ์ˆ˜์ • ์‚ฌํ•ญ์„ ์‹œ๋„ํ–ˆ์ง€๋งŒ ์ž‘๋™ํ•˜์ง€ ์•Š์•˜๋‹ค๊ณ  ๋งํ•˜๋ฉด์„œ ์ด ๋ฌธ์ œ๋ฅผ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ƒˆ ์—๋ฎฌ๋ ˆ์ดํ„ฐ๋กœ ์ƒˆ๋กœ ์‹œ์ž‘ํ•˜๊ณ , abd๋ฅผ ์—ฌ๋Ÿฌ ๋ฒˆ ์ฃฝ์ด๊ณ  ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ณ , Android Studio๋ฅผ ๋‹ค์‹œ ์„ค์น˜ํ•˜๊ณ , gradle์„ ์—…๋ฐ์ดํŠธํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค.

@Eyesonly88 ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค..ํšจ๊ณผ๊ฐ€ ์žˆ๋„ค์š”
๋‚˜๋Š” ์ถ”๊ฐ€ํ–ˆ๋‹ค
android:usesCleartextTraffic= "true" to AndroidManifest.xml

์Šฌํ”„๊ฒŒ๋„ Android 4.0์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜๊ณ  adb reverse tcp:8081 tcp:8081 ์„ ์‹คํ–‰ํ•  ๋•Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

warn Failed to connect to development server using "adb reverse": Command failed: adb -s 192.168.66.103:5555 reverse tcp:8081 tcp:8081

์—๋ฎฌ๋ ˆ์ดํ„ฐ์— ๊ฐœ๋ฐœ์ž ๋„๊ตฌ๊ฐ€ ์—†๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ ๋ฐฉ๋ฒ•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
์ด SO ๋‹ต๋ณ€ ์€ MainApplication.java ํŒŒ์ผ์„ ํ™•์ธํ•˜๊ณ  getUseDeveloperSupport ๋ฉ”์„œ๋“œ์—์„œ BuildConfig.Debug ๋ฅผ ์ œ๊ฑฐํ•˜๋„๋ก ์ œ์•ˆํ•˜๋ฏ€๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

        <strong i="11">@Override</strong>
        public boolean getUseDeveloperSupport() {
            // Return true to load JS from the packager.
            // If BuildConfig.DEBUG is false, assets will be loaded from assets folder.
            return true; // BuildConfig.DEBUG;
        }
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰