android - 예제 - reactive native expo




Android에서 JS 번들을로드하지 못했습니다. (16)

Ubuntu 14.04와 함께 작동하는 쉬운 솔루션입니다.

react-native run-android

에뮬레이터 (이미 시작됨)가 반환됩니다. JS 번들을 다운로드 할 수 없습니다. JS 서버를 다시 시작하십시오.

react-native start

에뮬레이터에서 JS를 다시로드하십시오. 그것은 나를 위해 일했다. 그것이 도움이되기를 바랍니다.

Nexus5 (Android 5.1.1)에서 AwesomeProject를 실행하려고합니다.

프로젝트를 빌드하고 장치에 설치할 수 있습니다. 그러나 그것을 실행하면 빨간색 화면이 나타납니다.

JS 번들을 다운로드 할 수 없습니다. 개발 서버를 시작하거나 장치를 연결하는 것을 잊었습니까?

네이티브 iOS에 반응하여 jsbundle을 오프라인으로로드하도록 선택할 수 있습니다. Android에서 동일한 작업을 수행하려면 어떻게해야합니까? (또는 적어도 서버 주소는 어디에서 구성 할 수 있습니까?)

최신 정보

로컬 서버로 실행하려면 react-native 프로젝트 루트 디렉토리에서 다음 명령을 실행하십시오.

  1. react-native start > /dev/null 2>&1 &
  2. adb reverse tcp:8081 tcp:8081

자세한 내용은 dsissitka의 답변을 참조하십시오.

서버없이 실행하려면 다음을 실행하여 jsfile을 apk에 묶습니다.

  1. android/app/src/main 자산 폴더를 만듭니다.
  2. curl "http://localhost:8081/index.android.bundle?platform=android" -o "android/app/src/main/assets/index.android.bundle"

자세한 내용은 kzzzf의 답변을 참조하십시오.


Ubuntu와 Android 만 사용하고 있으며 실행할 수 없습니다. package.json 파일을 업데이트 하고이 줄을 변경하는 정말 간단한 해결책을 찾았습니다.

"scripts": {
    "start": "node node_modules/react-native/local-cli/cli.js start"
  },

"scripts": {
    "start": "adb reverse tcp:8081 tcp:8081 && node node_modules/react-native/local-cli/cli.js start"
  },

그런 다음 다음을 입력하여 서버를 실행하십시오.

npm run start

이를 통해 안드로이드 기기는 전화가 아닌 컴퓨터에서 노드 서버를 찾을 수 있습니다.


android (release)에서 앱을 실행하는 간단한 단계는 다음과 같습니다.

1. 응용 프로그램 루트로 이동하십시오.

2.이 명령을 실행하십시오.

반응 네이티브 번들-플랫폼 안드로이드 --dev false-엔트리 파일 index.android.js-번들 출력 android / app / src / main / assets / index.android.bundle --assets-dest android / app / src / main / res

모든 파일이 복사됩니다.

3. 서명 된 APK를 만듭니다.

안드로이드 스튜디오를 엽니 다.

빌드> 서명 된 APK 생성> [필요한 세부 사항 작성,이 단계 전에 키 입력을 생성해야합니다]

APK는 오류없이 생성되어야합니다. 장치에 설치하면 아무런 문제없이 작동합니다.

당신은 또한 당신의 장치를 연결하고 테스트를 위해 안드로이드 스튜디오에서 실행 아이콘을 직접 누르십시오.

키 스트로크 생성 :

  1. C : \ Program Files \ Java \ jdkx.x.x_x \ bin으로 이동하십시오.

  2. 운영

keytool -genkey -v -keystore d : \ my_private_key.keystore -alias my-key-alias -keyalg RSA -keysize 2048-유효성 10000

아마도 몇 가지 세부 사항을 작성하라는 메시지가 표시 될 것입니다. 그것을하고 당신의 APK에 서명하는 데 사용할 수있는 키 입력 파일 ( my_private_key.keystore )이 있습니다.


react-native 디렉토리에서 npm start 를 실행하면 나에게 도움이되었습니다.


다음은 Ubuntu 14.04에서 나를 위해 일한 것입니다.

cd (App Dir)
react-native start > /dev/null 2>&1 &
adb reverse tcp:8081 tcp:8081

업데이트 : 참조

업데이트 2 : @scgough React Native (RN)가 워크 스테이션에서 실행되는 dev 서버에서 JavaScript를 가져올 수 없기 때문에이 오류가 발생했습니다. 왜 이런 일이 일어나는지 알 수 있습니다.

https://github.com/facebook/react-native/blob/42eb5464fd8a65ed84b799de5d4dc225349449be/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevServerHelper.java#L116-L137

RN 앱이 Genymotion 또는 에뮬레이터를 사용하고 있음을 감지하면 GENYMOTION_LOCALHOST (10.0.3.2) 또는 EMULATOR_LOCALHOST (10.0.2.2)에서 JavaScript를 가져 오려고 시도합니다. 그렇지 않으면 장치를 사용한다고 가정하고 DEVICE_LOCALHOST (localhost)에서 JavaScript를 가져 오려고 시도합니다. 문제는 dev 서버가 장치가 아닌 워크 스테이션의 로컬 호스트에서 실행되므로 작동하려면 다음 중 하나를 수행해야한다는 것입니다.


동일한 두 번째 터미널과 첫 번째 터미널 실행 반응 네이티브 시작 및 두 번째 터미널 반응 네이티브 실행에서 두 터미널을 시작하면이 문제는 간단하게 해결됩니다. 그리고 행운을 빕니다


새로운 React Native (확실히 0.59)에서 디버그 구성은 android/app/src/debug/res/xml/react_native_config.xml

<?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-config>
</network-security-config>

서버를 실행하는 동안 ( react-native start ) 응용 프로그램의 자산 디렉토리에 번들을 다운로드하는 동안 JS 파일을 APK에 묶으려면 다음을 수행하십시오.

curl "http://localhost:8081/index.android.bundle?platform=android" -o "android/app/src/main/assets/index.android.bundle"

다음 릴리스 (0.12)에서는 react-native bundle 명령을 수정 react-native bundle Android 프로젝트에서 예상대로 작동합니다.


업데이트

이제 Windows에서는 반응 네이티브 시작을 실행할 필요가 없습니다. 패키저가 자동으로 실행됩니다.


여기에 답변을 조합하여 시도한 후에 이것이 나를 위해 일하고 있습니다.

Genymotion을 에뮬레이터로 사용하고 있습니다.

1 Genymotion 에뮬레이터를 시작하십시오.

2 터미널에서

cd AwesomeProject
react-native run-android # it loads in genymotion and fails with bundle error
react-native start > /dev/null 2>&1 & # from dsissitka
adb reverse tcp:8081 tcp:8081 # from dsissitka

3 에뮬레이터에서 다시로드하십시오.

로드!

이제 개발을 시작할 수 있습니다.


좋아, 나는 여기에 문제가 무엇인지 알아 냈다고 생각합니다. 그것은 내가 달리고 있던 watchman 의 버전과 관련이 있습니다.

새 셸에서 brew update 를 실행 한 다음 brew unlink watchman 을 실행 한 다음 : brew install watchman

이제 프로젝트 폴더에서 react-native start 을 실행할 수 있습니다.

이 쉘을 열어두고 새 쉘 창을 만들고 프로젝트 폴더에서 react-native run-androidreact-native run-android . 세상은 모두 옳습니다.

추신. 나는 원래 워치 맨 3.2 버전에 있었다. 이것은 나를 3.7로 업그레이드했습니다.

pps. 나는 이것에 익숙하지 않아 솔루션으로의 가장 빠른 길은 아니지만 그것은 나를 위해 일했다.

* 장치에서 실행 / 디버깅에 대한 추가 정보 *

에뮬레이터가 아닌 Android 기기에 앱을 배포하면 Unable to load JS Bundle 없다는 오류와 함께 빨간색 사망 화면이 표시 될 Unable to load JS Bundle 있습니다. 장치의 디버그 서버를 이름 또는 IP 주소 중 하나 인 반응하는 컴퓨터로 설정해야합니다.

  1. 장치 Menu 버튼을 누릅니다
  2. Dev Settings 선택
  3. Debug server host for device 선택하십시오.
  4. 머신의 IP 및 Reload JS + 반응 포트를 입력하십시오 (예 : 192.168.1.10:8081

추가 정보 : http://facebook.github.io/react-native/docs/running-on-device-android.html


지금까지 언급 한 사람이 없는지 확인해야 할 한 가지 중요한 사항 : 로컬 방화벽을 확인하고 방화벽이 꺼져 있는지 확인하십시오 .

내 답변보기 : https://.com/a/41400708/1459275 : https://.com/a/41400708/1459275


휴대 전화에서 앱을 삭제하십시오! 나는 여러 단계를 시도했지만 결국 그렇게했습니다.

  1. 이전에 앱을 실행하려고했지만 실패한 경우 Android 장치에서 삭제 하십시오.
  2. $ react-native run-android 실행하십시오.
  3. 안드로이드 장치의 앱 내에서 React Rage Shake Menu를 열고 Dev Settings 로 이동 한 다음 Debug server host & port for device 로 이동하십시오. 서버 IP (컴퓨터의 IP)와 호스트 8081 입력하십시오 (예 : 192.168.50.35:8081 . Mac에서는 System Preferences -> Network -> Advanced... -> TCP/IP -> IPv4 Address 에서 컴퓨터의 IP를 찾을 수 있습니다.
  4. Rage Shake Menu를 다시 열고 Reload JS 클릭하십시오.

초기 질문 은 물리 장치에서 응용 프로그램을 다시로드하는 것과 관련이있었습니다.

실제 장치에서 (예 : adb를 통해) 응용 프로그램을 디버깅 할 때 장치의 왼쪽 상단 "작업"버튼을 클릭하여 JS 번들을 다시로드 할 수 있습니다. 옵션 메뉴가 열립니다 (Reload, Debug JS remotely ...).

이것이 도움이되기를 바랍니다.


공식 페이지 에 언급 된 지침에 따라이 문제를 해결할 수 있습니다. JS 번들이 개발 시스템에 있고 실제 장치 내의 앱이 해당 위치를 인식하지 못하기 때문에이 문제는 실제 장치 에서 발생합니다.


react-native run-android 프로세스를 중단 한 후 Linux에서 이것을 얻었습니다. 다음에 노드 서버를 실행할 때 노드 서버가 여전히 실행중인 것 같습니다. 제대로 실행되지 않고 앱을 연결할 수 없습니다.

여기서 수정은 Xterm에서 실행중인 노드 프로세스를 종료하는 것입니다 lsof -n -i4TCP:8081 해당 창을 더 ctrl-c lsof -n -i4TCP:8081 하여 kill -9 PID lsof -n -i4TCP:8081 다음 kill -9 PID 를 사용하여 찾을 수 있습니다.

그런 다음 react-native run-android 다시 react-native run-android 하십시오.







react-native