Android JS बंडल लोड करने में विफल रहा




react-native (16)

मैं अपने Nexus5 (Android 5.1.1) पर AwesomeProject चलाने की कोशिश कर रहा हूं।

मैं इस परियोजना का निर्माण करने और इसे डिवाइस पर स्थापित करने में सक्षम हूं। लेकिन जब मैंने इसे चलाया, तो मुझे एक लाल स्क्रीन मिला

जेएस बंडल डाउनलोड करने में असमर्थ। क्या आप विकास सर्वर शुरू करना या अपना डिवाइस कनेक्ट करना भूल गए?

देशी iOS पर प्रतिक्रिया देने के लिए, मैं jsbundle को ऑफ़लाइन लोड करने का विकल्प चुन सकता हूं। मैं एंड्रॉइड के लिए एक ही काम कैसे कर सकता हूं? (या कम से कम, मैं सर्वर पते को कहां से कॉन्फ़िगर कर सकता हूं?)

अद्यतन करें

स्थानीय सर्वर के साथ चलाने के लिए, अपनी प्रतिक्रिया-मूल परियोजना रूट निर्देशिका के तहत निम्नलिखित कमांड चलाएं

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

कृपया अधिक जानकारी के लिए dsissitka के उत्तर पर एक नज़र डालें।

सर्वर के बिना चलाने के लिए, jsfile को एपीके में चलाकर बंडल करें:

  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 के उत्तर पर एक नज़र डालें।


अपनी परियोजना निर्देशिका से, चलाएं

react-native start

यह निम्नलिखित आउटपुट देता है:

$ react-native start
 ┌────────────────────────────────────────────────────────────────────────────┐ 
   Running packager on port 8081.                                             
                                                                              
   Keep this packager running while developing on any JS projects. Feel       
   free to close this tab and run your own packager instance if you           
   prefer.                                                                    
                                                                              
   https://github.com/facebook/react-native                                  │ 
                                                                              
 └────────────────────────────────────────────────────────────────────────────┘ 
Looking for JS files in
   /home/user/AwesomeProject 


React packager ready.

[11:30:10 PM] <START> Building Dependency Graph
[11:30:10 PM] <START> Crawling File System
[11:30:16 PM] <END>   Crawling File System (5869ms)
[11:30:16 PM] <START> Building in-memory fs for JavaScript
[11:30:17 PM] <END>   Building in-memory fs for JavaScript (852ms)
[11:30:17 PM] <START> Building in-memory fs for Assets
[11:30:17 PM] <END>   Building in-memory fs for Assets (838ms)
[11:30:17 PM] <START> Building Haste Map
[11:30:18 PM] <START> Building (deprecated) Asset Map
[11:30:18 PM] <END>   Building (deprecated) Asset Map (220ms)
[11:30:18 PM] <END>   Building Haste Map (759ms)
[11:30:18 PM] <END>   Building Dependency Graph (8319ms)

अपने फोन से ऐप हटाएं! मैंने कई चरणों की कोशिश की, लेकिन आखिरकार उसने ऐसा किया।

  1. यदि आपने पहले अपना ऐप चलाने की कोशिश की, लेकिन असफल रहे, तो इसे अपने एंड्रॉइड डिवाइस से हटा दें।
  2. $ react-native run-android
  3. अपने एंड्रॉइड डिवाइस पर अपने ऐप के भीतर से रिएक्ट रेज शेक मेनू खोलें, Dev Settings और फिर Debug server host & port for device को Debug server host & port for device । वहां अपना सर्वर आईपी (आपके कंप्यूटर का आईपी) और मेजबान 8081 , जैसे 192.168.50.35:8081 । एक मैक पर आप System Preferences -> Network -> Advanced... -> TCP/IP -> IPv4 Address पर अपने कंप्यूटर का आईपी पा सकते हैं।
  4. राग शेक मेनू फिर से खोलें और Reload JS क्लिक Reload JS

अपने सर्वर को चालू करते समय अपने एपीके में जेएस फाइल को बंडल करने के लिए ( react-native start ) अपने ऐप की संपत्ति निर्देशिका में बंडल डाउनलोड करें:

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

अगली रिलीज़ (0.12) के साथ हम एंड्रॉइड प्रोजेक्ट के साथ काम करने के लिए react-native bundle कमांड को ठीक करेंगे।


आप इस समस्या को ठीक करने के लिए आधिकारिक पृष्ठ पर उल्लिखित निर्देश का पालन कर सकते हैं। यह समस्या वास्तविक डिवाइस पर होती है क्योंकि JS बंडल आपके डेवलपमेंट सिस्टम पर स्थित होता है और आपके वास्तविक डिवाइस के अंदर मौजूद ऐप के बारे में पता नहीं होता है।


एंड्रॉइड पर ऐप में मैंने मेनू (कमांड + एम इन जीनोमिशन) खोला -> देव सेटिंग्स -> डिबग सर्वर होस्ट और डिवाइस के लिए पोर्ट

इसके लिए मान सेट करें: लोकलहोस्ट: 8081

इसने मेरे लिए काम किया।


एक आसान समाधान जो मेरे लिए Ubuntu 14.04 के साथ काम करता है।

react-native run-android

एमुलेटर (पहले से ही लॉन्च) वापस आ जाएगा: जेएस बंडल डाउनलोड करने में असमर्थ; फिर से शुरू करें जेएस सर्वर:

react-native start

एमुलेटर पर रीलोडेड जेएस को मारो। इसने मेरे लिए काम किया। आशा है कि यह मदद करेगा



ठीक है, मुझे लगता है कि मुझे लगा कि मुद्दा यहाँ है। यह मेरे द्वारा watchman रहे watchman के संस्करण के साथ करना था।

एक नए शेल में, फिर brew update चलाएं: brew unlink watchman फिर: brew install watchman

अब, आप अपने प्रोजेक्ट फ़ोल्डर से react-native start कर सकते हैं

मैं इस शेल को खुला छोड़ देता हूं, एक नई शेल विंडो बनाता हूं और रन react-native run-android हूं: अपने प्रोजेक्ट फोल्डर से react-native run-android । दुनिया में सब कुछ सही होता है।

ps। मैं मूल रूप से चौकीदार के संस्करण 3.2 पर था। इसने मुझे 3.7 में अपग्रेड किया।

पी पी एस। मैं इस के लिए नया हूँ ताकि समाधान के लिए सबसे तेज़ मार्ग न हो लेकिन यह मेरे लिए काम कर रहा है।

* एक डिवाइस पर रनिंग / डीबगिंग के लिए अधिक जानकारी *

आप पा सकते हैं कि यदि आप अपने ऐप को अपने एंड्रॉइड डिवाइस पर तैनात करते हैं, तो एक एमुलेटर के बजाय आपको Unable to load JS Bundle कहने के साथ मौत की लाल स्क्रीन मिलती है। आपको अपने डिवाइस के लिए डिबग सर्वर सेट करने की आवश्यकता है ताकि आपका कंप्यूटर चल रहा हो ... या तो उसका नाम या आईपी पता।

  1. डिवाइस Menu बटन दबाएं
  2. Dev Settings चयन करें
  3. Debug server host for device चयन Debug server host for device
  4. अपनी मशीन के IP और Reload JS टाइप करें और प्रतिक्रिया पोर्ट टाइप करें जैसे 192.168.1.10:8081

अधिक जानकारी: http://facebook.github.io/react-native/docs/running-on-device:andn.html


नए रिएक्टिव नेटिव में (निश्चित रूप से 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>

निम्न चरणों का पालन करके इस त्रुटि को आसानी से हल किया जा सकता है:

    //run the command at /android sdk / platforms-tool folder
        adb reverse tcp:8081 tcp:8081

    //now come to root folder of your app
    1. npm start
    2. create 'assets' folder inside rootApp/android/app/src/main/
    3. curl "http://localhost:8081/index.android.bundle?platform=android" -o "android/app/src/main/assets/index.android.bundle"
    4. make sure anyone physical or virtual device attached is running.
    5. react-native run-android

प्रतिक्रिया-मूल निर्देशिका से एनपीएम रनिंग शुरू करना मेरे लिए कारगर रहा।


मेरे पास टिप्पणी करने के लिए पर्याप्त प्रतिष्ठा नहीं है, लेकिन यह dsissitka के उत्तर की बात कर रहा है। यह विंडोज 10 पर भी काम करता है।

दोहराने के लिए, आदेश हैं:

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

यह जांचने के लिए एक महत्वपूर्ण बात कि अब तक किसी ने उल्लेख नहीं किया है: अपने स्थानीय फ़ायरवॉल की जाँच करें, सुनिश्चित करें कि यह बंद हो गया है

मेरी प्रतिक्रिया यहाँ देखें: https://.com/a/41400708/1459275


यहां उत्तरों के संयोजन की कोशिश करने के बाद, यह मेरे लिए काम कर रहा है।

मैं अपने एमुलेटर के रूप में Genymotion का उपयोग कर रहा हूं।

1 जीनोम्यूलेटर एमुलेटर शुरू करें।

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 एमुलेटर से रीलोड करें।

यह लोड करता है!

मैं अब विकास शुरू कर सकता हूं।


डिवाइस पर चल रहा है

मुझे एक और जवाब मिल गया है।

  • अदब रिवर्स: केवल एंड्रॉइड 5.0+ (एपीआई 21) पर काम करते हैं।
  • दूसरा: डिवाइस को हिलाकर डेवलपर मेनू खोलें, देव सेटिंग्स पर जाएं, डिवाइस के लिए डीबग सर्वर होस्ट पर जाएं, अपनी मशीन के आईपी पते और स्थानीय देव सर्वर के पोर्ट में टाइप करें

react-native run-android प्रक्रिया को रोकने के बाद मैं लिनक्स पर यह प्राप्त कर रहा था। लगता है नोड सर्वर अभी भी चल रहा है इसलिए अगली बार जब आप इसे चलाते हैं, तो यह ठीक से नहीं चलेगा और आपका ऐप कनेक्ट नहीं हो सकता है।

यहाँ फिक्स एक नोडम में चल रही नोड प्रक्रिया को मारने के लिए है जिसे आप उस विंडो (आसान) में ctrl-c ing द्वारा मार सकते हैं या आप इसे lsof -n -i4TCP:8081 का उपयोग करके पा सकते हैं lsof -n -i4TCP:8081 फिर kill -9 PID lsof -n -i4TCP:8081

फिर से react-native run-android






react-native