Android JS paketini yükleyemedi


201

Nexus5 (android 5.1.1) üzerinde AwesomeProject çalıştırmaya çalışıyorum.

Projeyi oluşturabilir ve cihaza yükleyebilirim. Ama çalıştırdığımda kırmızı bir ekran var

JS paketi indirilemiyor. Geliştirme sunucusunu başlatmayı veya cihazınızı bağlamayı unuttunuz mu?

Yerel iOS reaksiyonunda, jsbundle'ı çevrimdışı yüklemeyi seçebilirim. Aynı şeyi Android için nasıl yapabilirim? (Ya da en azından sunucu adresini nerede yapılandırabilirim?)

Güncelleme

Yerel sunucuyla çalıştırmak için, yerel çözümlü proje kök dizininizin altında aşağıdaki komutları çalıştırın

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

daha fazla bilgi için lütfen dsissitka'nın cevabına bakınız.

Bir sunucu olmadan çalıştırmak için jsfile dosyasını apk olarak paketleyin:

  1. altında bir varlık klasörü oluştur android/app/src/main
  2. curl "http://localhost:8081/index.android.bundle?platform=android" -o "android/app/src/main/assets/index.android.bundle"

daha fazla bilgi için lütfen kzzzf'in cevabına bakınız.


Stll bu sorunu henüz çözemedi. Ama bu arada, simülatörünüzde deneyebilirsiniz. Genymotion'umda gayet iyi çalışıyor.
Bryan

ne zaman yerel sunucu ile çalıştırmak için iki komut yazmaya çalıştığınızda powershell diyerek hata alıyorum: "Ve işareti (&) karakter izin verilmiyor". Komutu çalıştırırken benim app-dir kökünde olması gerektiğini varsayalım?
user2236165

1
Bu, Android 4.1'de USB üzerinden hata ayıklamanın adb reversedesteklenmediği için imkansız olduğu anlamına mı geliyor ?
Bonh

adb reverse tcp:8081 tcp:8081Çalıştırabilmek için ADB 1.0.32 sürümüne ihtiyacınız olduğunu belirtmek isterim , reverseseçenek 1.0.31'de değil
jvalen

Yanıtlar:


110

Sunucunuz çalışırken JS dosyasını apk'nize react-native startpaketlemek için ( ) uygulamanızın varlıklar dizinine paket indirin:

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

Bir sonraki sürümde (0.12) react-native bundle, beklendiği gibi android projeleri ile çalışmak için komutu düzeltiriz .


teşekkür ederim! ReaktInstanceManager'a birlikte verilen varlığı kullanmasını nasıl söyleyebilirim? Yoksa sihir otomatik olarak olur mu?
Matthew

9
Dosya oluşturulamadı Uyarı: android / app / src / main / asset / index.android.bundle: Böyle bir dosya yok veya Uyarı: dizin
almeynman

2
Uyarı: Dosya oluşturulamadı Uyarı: android / app / src / main / asset / index.android.bundle: Böyle bir dosya yok veya Uyarı: dizin kıvırmak: (23) Yazma başarısız gövdesi (0! = 16167)
Shivang

3
@Shivang: Android / app / src / main dizin dizinlerini oluşturun. Bu hatayı aldım çünkü henüz yoktu.
piscator

1
Bu, uygulamayı test amacıyla yerel olarak dağıttığımızda en iyi ve basit yoldur. (kumaş ile) teşekkürler
Dinesh Anuruddha

90

Aşağıdaki Ubuntu 14.04 benim için işe yaradı:

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

Güncelleme : Bkz.

Güncelleme 2 : @scgough React Native (RN), iş istasyonlarımızda çalışan dev sunucusundan JavaScript getiremediği için bu hatayı aldık. Bunun neden burada olduğunu görebilirsiniz:

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

RN uygulamanız Genymotion veya emülatör kullandığınızı algılarsa, JavaScript'i GENYMOTION_LOCALHOST (10.0.3.2) veya EMULATOR_LOCALHOST (10.0.2.2) 'den almaya çalışır. Aksi takdirde bir cihaz kullandığınızı varsayar ve JavaScript'i DEVICE_LOCALHOST'tan (localhost) almaya çalışır. Sorun, dev sunucusunun aygıtınızın değil, iş istasyonunuzun localhost üzerinde çalışmasıdır, bu nedenle çalışmasını sağlamak için aşağıdakilerden birini yapmanız gerekir:


5
çalışan adb ters tcp: 8081 tcp: 8081 osx üzerinde de çalışıyor
shyamal

İşe yarıyor! çok teşekkürler. Tıpkı iOS'un main.jsbundle gibi jscodelocation'u apk kaynağına yönlendirmenin bir yolu olup olmadığını biliyor musunuz?
Matthew

@ dsissitka sadece burada iş parçacığına kaydedildi sorabilir miyim - tam olarak ne yapar?
scgough

@Matthew Afraid değil. Afedersiniz!
dsissitka

Android 4.2'de çalışıyor ve bu hatayı alıyorsak: stackoverflow.com/questions/31525431/…
Augustin Riedinger

39

Tamam, sanırım burada sorunun ne olduğunu anladım. Koştuğum versiyonla watchmanilgiliydi.

Yeni bir kabukta şunu çalıştırın brew update : brew unlink watchman then:brew install watchman

şimdi react-native startproje klasörünüzden çalıştırabilirsiniz

Bu kabuğu açık bırakıyorum, yeni bir kabuk penceresi oluşturuyorum ve çalıştırıyorum: react-native run-androidproje klasörümden. Her şey dünya ile doğru.

ps. Başlangıçta bekçi 3.2 sürümündeydim. Bu beni 3.7'ye yükseltti.

pps. Bu konuda yeniyim, bu yüzden çözümün en hızlı yolu olmayabilir ama benim için çalıştı.

* BİR CİHAZDA ÇALIŞTIRMA / HATA AYIKLAMA İÇİN DAHA FAZLA BİLGİ *

Uygulamanızı bir emülatör yerine Android cihazınıza dağıtırsanız , hata mesajı ile kırmızı bir ölüm ekranı aldığınızı görebilirsiniz Unable to load JS Bundle. Hata ayıklama sunucusunu, aygıtınızın bilgisayarınız tarafından tepki verecek şekilde ayarlaması gerekir ... ya adı VEYA IP adresi.

  1. Cihaz Menudüğmesine basın
  2. seçmek Dev Settings
  3. seçin Debug server host for deviceveyaChange Bundle Location
  4. Makinenizin IP'sini ve Reload JS'yi ve ayrıca tepki portunu yazın, ör. 192.168.1.10:8081

Daha fazla bilgi: http://facebook.github.io/react-native/docs/running-on-device-android.html


@ jacobross85 Yardımcı oldu! İsterseniz beni bir oy verin ;-)
scgough

1
brew uninstall watchmanBenim için en son sürümü yükler önce çalıştırmak zorunda kaldı .
Amozoss

Bir Android cihazda hata ayıklayıcılar için emülatör yerine biraz daha bilgi ekledim.
scgough

Bekçinin son sürümünü zaten çalıştırıyordu ama bu benim için düzeltildi. Weeeeird
pfac

1
Bu kardeş için teşekkürler, gerçekten yararlı. Bu yüzden sana oy vereceğim.
Priyank Jotangiya

17

Proje dizininizden çalıştırın

react-native start

Aşağıdaki çıktıları verir:

$ 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
OP'nin bildirdiği sorunu da yaşıyorum. Projeyi react-native run-androidproje klasöründen kullanarak çalıştırıyorum . Terminalde Tamam oluşturur, ancak uygulama cihazımda açılır Unable to download JS bundle
açılmaz

6
adb reverse tcp: 8081 tcp: 8081
Matthew

1
Adb reverse tcp: 8081 tcp: 8081'yi çalıştırdım ve hata alıyorum: kapalı hata: kapalı
JacobRossDev

1
Aynı sorun var, hata: kapalı. Herhangi bir yardım lütfen?
Eusthace

Android kullanıyorsanız, IP adresinizin "Geliştirici ayarları" nda doğru olduğundan emin olun. Dinamik bir IP ile çalışıyorsanız, bu bir gecede değişebilir.
Sam Purcell

13

Ubuntu 14.04 ile benim için çalışan kolay bir çözüm.

react-native run-android

Emülatör (zaten başlatılmış) geri dönecektir: JS Paketi indirilemiyor; JS sunucusunu yeniden başlatın:

react-native start

Emülatörde Yeniden Yükle JS'ye basın. Benim için çalıştı. Umarım yardımcı olur


Aslında çalışıyor. Tüm cevapların dışında, bu en basit çözüm. Bunun resmi dokümanda olmadığına inanamıyorum.
bluecollarcoder

OP, emülatörde değil, bir cihazda çalışmakla ilgilidir. Bu adımlar ek kurulum olmadan bir cihazda çalışmaz. Kabul edilen cevaba bakınız.
davidgoli

8

Android app Ben Menü (Genymotion Command + M) -> Dev Ayarlar -> Hata ayıklama sunucu ana bilgisayar ve bağlantı noktası cihaz için

değeri şu değere ayarlayın: localhost: 8081

Benim için çalıştı.


Teşekkürler! Benim için çalıştı
Howard

7

Burada cevapların bir kombinasyonunu denedikten sonra, bu benim için işe yarıyor.

Genymotion'u emülatörüm olarak kullanıyorum.

1 Genymotion emülatörünü başlatın.

2 Bir terminalden

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 Emülatörden yeniden yükleyin.

Yükler!

Şimdi gelişmeye başlayabilirim.


Başlarken "hatası: kapalı" iki kez "adb reverse"
almeynman

FYI: Şimdi yukarıdaki "Daniel Masarin" yanıtı ile 8081 numaralı bağlantı noktası ile WiFi adresime hata ayıklama sunucusu ana bilgisayar ayarlamak cevap yapıyorum, RN v 0.17.0 ile çalışıyor
ooolala

çok teşekkür ederim bu benim için çalışıyor :) yukarıdaki API 21+ üzerinde sadece bu çalışıyor
Ashwini Bhat

4

Uygulamayı telefonunuzdan silin! Birkaç adım denedim, ama sonunda yaptı.

  1. Uygulamanızı daha önce çalıştırmayı denediyseniz ancak başarısız olduysanız , android cihazınızdan silin .
  2. Çalıştırmak $ react-native run-android
  3. Android cihazınızda uygulamanızın içinden React Rage Shake Menüsünü açın, gidin Dev Settingsve ardından öğesine gidin Debug server host & port for device. Orada sunucu IP'nizi (bilgisayarınızın IP'sini) ve ana bilgisayarı girin 8081, örn 192.168.50.35:8081. Mac'te bilgisayarınızın IP adresini adresinde bulabilirsiniz System Preferences -> Network -> Advanced... -> TCP/IP -> IPv4 Address.
  4. Rage Shake Menüsünü tekrar açın ve tıklayın Reload JS.


2

Yorum yapmak için yeterli itibarım yok, ama bu dsissitka'nın cevabına atıfta bulunuyor. Windows 10'da da çalışır.

Tekrarlamak için komutlar:

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

2

Uygulamanızı android'de (yayın) çalıştırmak için basit adımlar şunlardır:

1. Uygulama kök dizinine gidin.

2. Bu komutu çalıştırın.

tepki yerel paketi - platform android --dev yanlış - giriş dosyası dizini.android.js - paket çıktı android / app / src / ana / varlık / index.android.bundle --assets-dest android / app / src / ana / res

Tüm dosyalarınız kopyalanır.

3. İmzalı APK oluşturun.

Android stüdyosunu açın.

Oluştur> İmzalı APK Oluştur> [Gerekli ayrıntıları doldurun, bu adımdan önce tuş vuruşu oluşturulmalıdır]

APK'nız hatasız oluşturulmalıdır. Cihazınıza yükleyin ve bu herhangi bir sorun olmadan çalışmalıdır.

Ayrıca cihazınızı bağlayabilir ve test için android studio'daki Run simgesine doğrudan basabilirsiniz.


Tuş Vuruşu Oluşturma:

  1. Goto C: \ Program Files \ Java \ jdkx.x.x_x \ bin

  2. Çalıştırmak

keytool -genkey -v -keystore d: \ my_private_key.keystore -alias my-key-alias -keyalg RSA -anahtar boyutu 2048 -yükseklik 10000

Muhtemelen bazı detayları doldurmanızı isteyecektir. Bunu yapın ve apk'nizi imzalamak için kullanılabilen tuş vuruşu dosyanız ( my_private_key.keystore ) var.


react-native bundleHata
Aldıktan

1

react-native run-androidİşlemi durdurduktan sonra bunu Linux'ta alıyordum . Düğüm sunucusu hala çalışıyor gibi görünüyor, bu yüzden bir daha çalıştırdığınızda düzgün çalışmayacak ve uygulamanız bağlanamıyor.

Buradaki çözüm, bir Xterm'de çalışan düğüm ctrl-cpenceresini (daha kolay) girerek öldürebileceğiniz veya lsof -n -i4TCP:8081daha sonra kullanarak bulabileceğiniz düğüm işlemini öldürmektir kill -9 PID.

Sonra react-native run-androidtekrar çalıştırın .


1

Wifi bağlantınızı kontrol edin.

Başka bir olasılık, wifi'ye bağlı değil, yanlış ağa bağlı değil veya ip ayarlarınız geliştirici ayarlarınızda yanlış olabilir. Nedense, benim android wifi bağlantısı kesildi ve bilmeden bu hatayı almaya başladı.


Teşekkürler, hepsi bu. Varsayılan olarak, yerel ağda Hata Ayıklama sunucusuna ulaşılır. Bu nedenle, herhangi bir wifi erişiminiz varsa, ona ulaşamazsınız.
Paul

1

Cihazda çalışıyor

Başka bir cevap buldum.

  • adb reverse: sadece Android 5.0 ve sonraki sürümlerinde çalışır (API 21).
  • Başka: Cihazı sallayarak Geliştirici menüsünü açın, Geliştirici Ayarları'na gidin, Cihaz için hata ayıklama sunucusu ana bilgisayarına gidin , makinenizin IP adresini ve yerel geliştirici sunucusunun bağlantı noktasını yazın

1

Bir güncelleme

Şimdi pencerelerde reat-native başlat çalıştırmaya gerek yok. Paketleyici otomatik olarak çalışacaktır.



0

Yalnızca Ubuntu ve Android kullanıyorum ve çalıştıramadım. Bu satırları değiştirerek package.json dosyanızı güncellemek için gerçekten basit bir çözüm buldum:

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

için

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

Ve sonra sunucuyu yazarak

npm run start

Bu, android cihazın yerel olarak telefonda değil, bilgisayarınızdaki düğüm sunucusunu aramasını sağlar.


0

İlk soru bir Hastaların günlük cihazında uygulama yeniden ilgiliydi.

Uygulamada fiziksel bir cihazda hata ayıklama yaparken (örn. Adb aracılığıyla), cihazınızın sol üst "eylem" düğmesini tıklayarak JS paketini yeniden yükleyebilirsiniz. Bu seçenek menüsünü açar (Yeniden yükle, JS'de hata ayıkla ...).

Bu yardımcı olur umarım.


0

Bu hata aşağıdaki adımlar izlenerek kolayca çözülebilir:

    //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

1
adb reverse tcp:8081 tcp:8081uygulamamın kök klasöründe çalışabilir miyim?
Marson Mao

işletim sisteminizde adb klasörünü bulun. Android SDK / platform araçları /
Atif Hussain

1
ancak bu komutun uygulama kök klasöründe çalıştırılabileceğini belirten birçok yer görüyorum, ayrıca dsissitka'nın yanıtı, kök uygulama klasöründe çalıştırmayı önerdi, bu yüzden gerçekten karıştı.
Marson Mao

bu komut tepki yerli tarafından işlenebilir. Bundan emin değilim. ancak adb android sdk araçları tarafından desteklenir. daha fazla
bilgiyi

1
@MarsonMao Sistem kurulumunuza bağlı olarak, adb'yi uygulama dizininizden çalıştırabilirsiniz. Daha fazla bilgi için PATH değişkeni ve global ve yerel paketler hakkında bilgi edinin.
mchandleraz

0

Bu sorunu çözmek için resmi sayfada belirtilen talimatları takip edebilirsiniz . Bu sorun ortaya gerçek cihazdan JS paket geliştirme sistemi üzerinde bulunan ve gerçek cihazın içindeki uygulama 's konumunun farkında değildir çünkü.


0

Yeni React Native'de (kesin olarak 0,59) hata ayıklama yapılandırması içeride 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>

0

Aynı iki terminali başlatın ve 1. terminal çalışma tepki-doğal başlangıç ​​ve ikinci terminal tepki-doğal çalışma-android bu sorun basit bir şekilde çözülür. Ve iyi şanslar


0

Hey, tepkime doğal çıplak projemle bu sorunla karşı karşıya kaldım, IOS simülatörü iyi çalışıyor, ancak android bana bu hatayı vermeye devam etti. İşte benim için işe yaramış olası bir çözüm.

1. adımda adb cihazının terminalinizde çalışarak yetkili olup olmadığını kontrol edin: adb cihazları

yetkisiz ise aşağıdaki komutları çalıştırın

adım 2, sudo adb kill-server adım 3, sudo adb start-server

sonra adb Devices komutunun emulator-5554 cihazına bağlı cihazların listesini gösterip göstermediğini kontrol edin

yetkisiz yerine cihaz ise yetkisiz yerine

4. adım, npx tepki-yerel çalıştırma-android'i çalıştırın

bu benim durumumda çalıştı umarım bu sorununuzu çözer.


0

Bunu garip buldum ama bir çözüm buldum. Arada bir proje klasörünün salt okunur olduğunu ve VS'den kaydedemediğimi fark ettim. Bu yüzden NPM'yi yerel kullanıcı PATH'dan sistem genelindeki PATH global değişkenine aktarmak için bir öneri okudum ve bir cazibe gibi çalıştı.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.