Bir Metro sunucusu çalıştırdığınızdan veya 'index.android.bundle' paketinizin yayınlanmak üzere doğru bir şekilde paketlendiğinden emin olun


160

react-native run-androidAndroid simülatöründe bir mesaj bırakarak komut sonlandırılır. Mesaj aşağıdaki gibidir:

Bir Metro sunucusu çalıştırdığınızdan veya 'index.android.bundle' paketinizin yayınlanmak üzere doğru bir şekilde paketlendiğinden emin olun.

Ekran görüntüsü

Neyi yanlış yapıyorum?


Bu bağlantıyı deneyebilir misiniz stackoverflow.com/questions/32572399/… ?
errorau

5
Aynı problemim var çünkü cihazım internete bağlı değil.
Huo Chhunleng

Bu hata geliyor: throw er; // İşlenmeyen 'hata' olayı
Saeed

onu buldum ve
Alireza

@Belle Solution, herhangi bir çözüm buldunuz mu?
Hitesh

Yanıtlar:


95

Paketleyiciyi henüz başlatmadınız. Daha önce npm startveya react-native startprojenizin kök dizininde çalıştırın react-native run-android.


ilk ben tepki doğal yerli çalıştırmak ama tepki yerli çalıştırmak-android çalıştırırken, başarılı inşa ettikten sonra feshedilir
Belle Solutions

12
Aynı anda 2 düğüm konsolunun çalışması gerekir. Biri paketleyiciyi çalıştırır ve diğeri öykünücüyü çalıştırır.
Nerdragen

27
Benim için bu hata, paketleyici başlatılmış olsa bile görünür.
P.Lorand

2
8081 numaralı bağlantı noktasının engellenmediğinden emin olun. Ayrıca, paketleyiciyi başlatmak için bir terminal kullandığınızdan, bağımlılık grafiğini yüklemeyi bitirmesini bekleyin ve ardından başka bir terminalde reat-native run-android'i çalıştırın.
Nerdragen

1
Pencerelerde kendi kendine çalışır, ancak linux üzerinde olmaz, thx! Mükemmel çalışın!
Adrian Serna

62

Bu adımlar bana gerçekten yardımcı oluyor:

Aşama 1: Android / app / src / main / asset dizininde bir dizin oluşturun

Linux komutu :mkdir android/app/src/main/assets

Adım 2: Yeniden adlandır index.android.js(kök dizininde) için index.js( Belki bir var index.jsbunu adlandırmak gerek yok bu durumda dosya ) daha sonra aşağıdaki komutu çalıştırın:

react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res

Aşama 3: APK'nızı oluşturun:react-native run-android

Lütfen index.js'yi en son sürümde kullanın.

Zevk almak :)


Bu dosyanın reat native project index.android.j içindeki yeri nedir
Arbaz.in

Kök dizinde @ Arbaz.in.
Saeed

@ Arbaz.in Belki index.jskök dizinde bir dosya var, bu durumda yeniden adlandırmanıza gerek yok
Saeed

@Saeed yes found it
Arbaz.in

4
Bu sadece bir an için uygulamayı çalıştırabilir, ancak bu hata ayıklama ve sıcak yüklemeyi nasıl etkinleştirir? bu, bunu yapmak için mükemmel bir çözüm değildir.
buddhiv

39

Benim için bu hata reat-native sürümünün yükseltilmesinden kaynaklandı

Android 9.0'dan (API düzey 28) başlayarak, varsayılan olarak açık metin desteği devre dışıdır.

Yükseltme farkını kontrol ederseniz, bir hata ayıklama bildirimi oluşturmanız gerekir android/app/src/debug/AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
    <application android:usesCleartextTraffic="true" tools:targetApi="28" tools:ignore="GoogleAppIndexingWarning" />
</manifest>

Daha fazla bilgi için bakın: https://stackoverflow.com/a/50834600/1713216

https://react-native-community.github.io/upgrade-helper/


1
RN 0.61.3 üzerinde benim için çalıştı.
Żabojad

2
Ne yazık ki, bu benim için işe yaramadı. Ben zaten vardı ve Metro Bundler çalışıyor olsa bile, hala aynı hatayı alıyorum.
Andrew

Ben tanımlanmış bir ağSecurityConfig varsa, bazen geçersiz kılma gerekir, her zaman bu benim için sorunlara neden gibi görünüyor. Herhangi bir güvenlik yapılandırmasını kaldırmayı deneyebilir android:usesCleartextTraffic="true"ve ana AndroidManifest.xmlgörünümde işe yarayıp yaramadığını belirtebilirsiniz ?
Tom

Bu benim için RN 0.62 üzerinde çalıştı
KevinAdu

Ben android dahil tüm bu ayarlara sahip: usesCleartextTraffic = "true", ama yine de gerçek cihazda uygulama çalıştıramazsınız.
Lucky_girl

25

Önce 4. ve 5. adımları uygulayın, ardından projenizi çalıştırabilirsiniz. Sonucu almazsanız (adım 4 ve 5 ile) aşağıdaki adımları uygulayın

1- Düğüm sürümünüzü düşürmeye çalışın (geçerli sürüm 12.13.1)

  choco uninstall nodejs
  choco install nodejs --version 12.8

2- npm modülünün yolunu ekleyin (C:\Users\your user name\AppData\Roaming\npm ) kullanıcı değişkenleri yerine sistem değişkenlerine

3- Komutu kullanarak global tepkiyi kur

  npm install -g react-native-cli

4- Proje dizininizin kök dizinine gidin ve aşağıdaki komutu çalıştırın:

  react-native start

5- Projenizin kökünde başka bir terminal açın ve aşağıdaki komutu çalıştırın:

   react-native run-android 

DÜZENLE :

Genymotion mu kullanıyorsunuz? Evet ise, aşağıdaki adımı uygulayın:

Yukarıdaki adımdan sonra aşağıdaki hatayı alırsanız?

error Failed to launch emulator. Reason: No emulators found as an output of `emulator -list-avds`.

Genymotion'unuzu açın ve şuraya gidin:

genymotion menu -> Settings -> ADB -> Sonra seçinuse custom android sdk tools (sdk konumunu bulmak için gözatın)

Son olarak, projenizi tekrar çalıştırın ..


1
12.9 da benim için çalıştı, Teşekkürler, sürüm 12.13.x'e yükselttim ve yukarıdaki sorunu almaya başladım.
Huey Mataruse

Bu yanıtın arka planı
Christian Davén

18

Aşağıdakileri deneyebilirsiniz:

Bu satırı AndroidManifest.xml'nize ekleyin

<application
[...]
android:usesCleartextTraffic="true"
/>
[...]
</application>

18

Benimle de benzer bir sorun yaşandı.
Görünüşe göre Mcafee 8081 portunu engelliyor. Bunu çözmem için saatler sürdü.

Koşmayı deneyin:

react-native run-android --port=1234

Uygulama emülatörde bir hata ile görüntülendiğinde, dev ayarlarına ( Ctrl+ M) geçin .

"Sunucu ana bilgisayarında ve bağlantı noktasında hata ayıkla" işlevini "localhost: 1234" olarak değiştirin.

Uygulamayı kapatın ve uygulama çekmecesinden başlatın.


1
bir ipucu için teşekkürler, güvenlik
duvarımda

Bunun için büyük bir oylama. Mcafee'niz varsa, bunu denerdim, benim için çalıştı.
Puerto

Teşekkürler, projemi kurtardım
Rafid

Burada iki gündür sıkışıp kaldım, bunun engellenen bir liman olduğunu düşünmezdim! Çok teşekkürler!
P. Naoum

Tarayıcıda localhost: 8081'i vurmaya çalıştım ama şans yok. Çok az araştırma yaptı ve macafee'nin bu portu engellediğini öğrendi. Yoldan kaçtı. Mükemmel iyi çalışmaya başladı.
Tushar Jajodia

17

üç sıçrama ekleyin: node_modules \ metro-config \ src \ defaults \ blacklist.js

bu parçayı değiştir:

var sharedBlacklist = [
  /node_modules[\/\\]react[\/\\]dist[\/\\].*/,
  /website\/node_modules\/.*/,
  /heapCapture\/bundle\.js/,
  /.*\/__tests__\/.*/
];

12

doğru yapılandırılmış her şeyiniz varsa şunu deneyin:

adb ters tcp: 8081 tcp: 8081

Neden? "RN paketleyicisi çalışırken, tarayıcınızda 127.0.0.1:8081 adresinden erişilebilen etkin bir web sunucusu var. Bu sunucudan, değişiklik yaparken uygulamanızın JS paketi sunuluyor ve yenileniyor. Ters proxy olmadan, telefonunuz bu adrese bağlanamaz. "

Swingline0'a yapılan tüm krediler


Cevabınıza bunun neden çalışması gerektiğini ve bu komutun ne işe yaradığını ekler misiniz?
creyD

Bütün gün kütüphaneleri değiştirmeye çalıştım ve bu benim
Adam Katz

10

[Hızlı cevap]

Çalışma alanımda bu sorunu çözmeye çalıştıktan sonra bir çözüm buldum.

Bu hata, Metro'da bazı NPM ve Düğüm sürümlerinin kombinasyonlarını kullanan bir sorun olmasıdır.

2 alternatifiniz var:

  • Alternatif 1: npm ve düğüm sürümünü güncellemeye veya düşürmeye çalışın.
  • Alternatif 2: Bu dosyaya gidin: \node_modules\metro-config\src\defaults\blacklist.jsve şu kodu değiştirin:

    var sharedBlacklist = [
      /node_modules[/\\]react[/\\]dist[/\\].*/,
      /website\/node_modules\/.*/,
      /heapCapture\/bundle\.js/,
      /.*\/__tests__\/.*/
    ];

    ve bunu değiştirin:

    var sharedBlacklist = [
      /node_modules[\/\\]react[\/\\]dist[\/\\].*/,
      /website\/node_modules\/.*/,
      /heapCapture\/bundle\.js/,
      /.*\/__tests__\/.*/
    ];

    Bir npm installveya a çalıştırırsanız yarn installkodu tekrar değiştirmeniz gerektiğini lütfen unutmayın .


8

Bu benim için çalıştı birkaç yol denedikten sonra .

Dosyanın içinde node_modules\metro-config\src\defaults\blacklist.js

Değiştir:

var sharedBlacklist = [
  /node_modules[/\\]react[/\\]dist[/\\].*/,
  /website\/node_modules\/.*/,
  /heapCapture\/bundle\.js/,
  /.*\/__tests__\/.*/
];

ile :

var sharedBlacklist = [
  /node_modules[\/\\]react[\/\\]dist[\/\\].*/,
  /website\/node_modules\/.*/,
  /heapCapture\/bundle\.js/,
  /.*\/__tests__\/.*/
];

Bu yardımcı olur umarım.


Bir cazibe gibi çalıştı, teşekkürler
César Bermúdez

Benim için de çalıştı. Ama neden düzeltmek zorunda kaldım? Ne yanlış gitti?
Mashrur

Görünüşe göre metro-config, bu cevabın değiştirilmesini önerdiği / yerine yollar için \ kullanıldı. Bunu yapma . Npm paketlerini değiştirmek, tüm ekibinizin bunu makinelerinde, CI'de, sahnelemede, üretimde ve metro-config her güncellemeyi yayınladığında yapmak zorunda olduğu anlamına gelir. Daha iyi bir yaklaşım, GitHub'da metro-config'i çatallamak, bir düzeltme yapmak, itmek ve herkes için düzeltmek için bir PR göndermek.
Cameron Wilby

6

Android 9.0'dan (API düzey 28) başlayarak, varsayılan olarak açık metin desteği devre dışıdır.

Normal çalıştırma komutlarını düzgün yaparsanız bu sorundan kurtulmak için yapmanız gereken budur

  1. npm kurulum
  2. doğal tepki başlat
  3. tepki-yerli run-android

Ve android manifest dosyanızı böyle değiştirin.

<application
    android:name=".MainApplication"
    android:icon="@mipmap/ic_launcher"
    android:usesCleartextTraffic="true" // add this line with TRUE Value.
android:theme="@style/AppTheme">

5

Saatler sonra bir cevap arıyor. Çözüm, sürüm 12.4'e bir düşürme düğümü yapmaktı.

Benim durumumda, hata sadece sürüm 12.6 ile yerel 0.60 tepki tepki oluşur fark.


4

Buna benim çözümüm aşağıdaki gibidir:

Metro sunucusunu başlat

$ react-native start

Android'i başlat

$ react-native run-android

"8081 numaralı bağlantı noktası zaten kullanılıyor" hatalarını görürseniz, bu işlemi öldürebilir ve yeniden çalıştırabilirsiniz.

$ react-native start

Bkz . Yerel Sorun Giderme Tepkisi Sayfası .


4

Linux'taysanız Uygulama kök dizininden terminali açın ve çalıştırın

npm start

daha sonra başka bir terminal penceresi açın ve çalıştırın:

react-native run-android

3

Sadece burada ele alınmayan açık olmayan bir olasılık eklemek istiyorum. Ben kullanıyorum @ tepki yerli-toplum / netinfo esas ağ durumu ağ değişiklikleri tespit etmek için. Ağ kapalı durumunu test etmek için WIFI anahtarının (emülatördeki) kapatılması gerekir. Bu aynı zamanda öykünücü ve hata ayıklama ortamı arasındaki köprüyü etkili bir şekilde keser. Bilgisayarımdan uzak olduğum ve geri döndüğümde hemen unuttuğum için testlerimden sonra WIFI'yi yeniden etkinleştirmemiştim.

Bunun başka birisi için de geçerli olması ve başka sert adımlar atmadan önce kontrol edilmeye değer olması olasılığı vardır.


3

Aynı sorunu yaşıyordum, benim için sorun, adb'nin doğru çevre yolunda olmamasıydı, hata size metro bağlantı noktasını söylüyor, adb'deyken, bağlantı noktaları öldürüldü ve yeniden başlatıldı.

Çevre Değişkeni Ekle (ADB)

  1. Açık ortam değişkenleri
  2. İkinci kare PATH değişkeninden seçim yapın ve aşağıdaki düzenle seçeneğini tıklayın
  3. Ekle seçeneğine tıklayın
  4. Sdk platform araçları yolunu gönderin C: \ Kullanıcılar \ Kullanıcım \ AppData \ Local \ Android \ Sdk \ platform-tools

Not : Veya adb.exe dosyasının makinenizde bulunduğu yere bağlı olarak

  1. Değişiklikleri Kaydet

Android Build'ı tekrar çalıştırın

$ react-native run-android

Veya

$ react-native start

$ react-native run-android

3

Ben de bu sorunla karşılaştım. Aşağıdaki adımı çözdüm.

Ortam Veritable içindeki android sdk yolunu kontrol edin .

Ekle ANDROID_HOME = C:\Users\user_name\AppData\Local\Android\Sdkyılında Sistem Değişken
ve C:\Users\user_name\AppData\Local\Android\Sdk\platform-toolsyolun Sistemi Değişken

sharedBlacklist'i aşağıdaki kod segmentinde olduğu gibi değiştirin ,

var sharedBlacklist = [
  /node_modules[\/\\]react[\/\\]dist[\/\\].*/,
  /website\/node_modules\/.*/,
  /heapCapture\/bundle\.js/,
  /.*\/__tests__\/.*/
];

içinde node_modules / metro-config / src / default / blacklist.js

Sonra npx tepki-yerli çalışma-android çalıştırmak - port 9001

Mutlu Kodlama ..!


2

Bunu Wifi'mın emülatörümde yanlışlıkla kapatılmış olması nedeniyle yaşadım. İ tekrar açtım ve iyi çalışmaya başladı. Umarım birisi için yararlıdır


2

Bu hatanın olasılığı da yanlış yoldur, bir kez kontrol edin

 export ANDROID_HOME=/Users/microrentindia/Library/Android/sdk/
 export PATH=$PATH:$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools

Bunu hiç düşünmedim. Ama bu benim için bir yanıttı.
Siraj Alam

2

Benim için işe yarayan çözüm şudur:

var sharedBlacklist = [
  /node_modules[\/\\]react[\/\\]dist[\/\\].*/,
  /website\/node_modules\/.*/,
  /heapCapture\/bundle\.js/,
  /.*\/__tests__\/.*/
]; 

Kod örneğim


2

metro kara listesindeki bu bölümü güncelle

var sharedBlacklist = [
  /node_modules[\/\\]react[\/\\]dist[\/\\].*/,
  /website\/node_modules\/.*/,
  /heapCapture\/bundle\.js/,
  /.*\/__tests__\/.*/
];

2

React Native öğreticisini izlerken aynı sorunla karşılaştım (Linux üzerinde geliştirme ve Android'i hedefleme) .

Bu sorun, aşağıdaki adımlarda sorunu çözmeme yardımcı oldu. Aşağıdaki komutları aşağıdaki sırayla çalıştırın:

  1. (proje dizininde) mkdir android/app/src/main/assets
  2. react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res
  3. react-native run-android

Sen onları yerleştirerek yukarıdaki adımları otomatik hale getirebilirsiniz scriptsparçası package.jsonşöyle:

"android-linux": "react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res && react-native run-android"

Sonra npm run android-linuxher seferinde komut satırınızdan çalıştırabilirsiniz .


1

Varsayılan olarak 8081 numaralı bağlantı noktasında "Metro Server" adlı küçük bir JavaScript sunucusu çalışır.

Bu Sunucunun başlaması için bu bağlantı noktasını kullanılabilir hale getirmeniz gerekir. Yani,

  1. limanı serbest bırak
  2. sanal cihazını kapat
  3. "tepki yerli-run-android" tekrar.

Bağlantı noktası nasıl serbest bırakılır?

http://tenbull.blogspot.com/2019/05/how-to-kill-process-currently-using.html

Şu anda Windows'ta localhost üzerinde bir bağlantı noktası kullanarak işlemi nasıl öldürürüm?

ve daha da önemlisi, facebook @ https://facebook.github.io/react-native/docs/getting-started tarafından önerildiği gibi düğüm sürümümü 8.x'ten 10.x'e (en son) yükselttim.


1

Benim için bu sorun, tepkisel-yerel yükseltme ile başladı. 64 bit desteği eklemek için yükseltme gerekliydi.

Before:
-------- 
Environment:
Node: 10.15.0
npm: 6.9.0
Watchman: 4.9.0
Xcode: Not Found
Android Studio: 3.4 AI-183.6156.11.34.5692245

Packages: (wanted => installed)
react: 16.0.0-alpha.12 => 16.0.0-alpha.12
react-native: ~0.55.2 => 0.55.4
react-native-cli: 2.0.1

After:
------
info 
React Native Environment Info:
Binaries:
Node: 10.15.0
npm: 6.9.0
Watchman: 4.9.0
SDKs:
Android SDK:
API Levels: 23, 26, 27, 28
Build Tools: 27.0.3, 28.0.3
System Images: android-28 | Google APIs Intel x86 Atom
IDEs:
Android Studio: 3.4 AI-183.6156.11.34.5692245
Xcode: /undefined - /usr/bin/xcodebuild
npmPackages:
react: ^16.8.6 => 16.9.0 
react-native: 0.59.9 => 0.59.9 
npmGlobalPackages:
create-react-native-app: 2.0.2
react-native-cli: 2.0.1

Ayrıca, yükseltme için yaptığım önemli bir değişiklik ../android/build/build.gradle oldu.

android {
    ...
    defaultConfig {
        ...
        targetSdkVersion 28
        ...
    }
    ...
}

Goole oyun konsoluna derleme (.apk) yüklemeye çalıştığımda targetSdkVersion'ı 27'den 28'e değiştirmek zorunda kaldım. Bunun benim için yukarıdaki hatanın temel nedeni olduğunu çok az fark ettim. @Tom ve @tinmarfrutos tarafından verilen cevaplar kesinlikle mantıklıydı.

Ben android ekleyerek sorunu çözdüm: android / app / src / debug / AndroidManifest.xml için kullanırCleartextTraffic = "true"


1

Benim durumumda, emülatörümde bir proxy ayarladım. Bu proxy'yi kaldırdıktan sonra normale dönüyor.


1

ÖNEMLİ - Ortamınızda çok sayıda Sanal aygıt olabilir. AVD'yi değiştiriyorsanız ayarı tekrarlayın.

HATA AYIKLAMA BİLGİLERİ-

Yukarıdaki hatayı yaşıyorsanız, 8081 numaralı bağlantı noktasında neyin çalıştığını doğrulamanız gerekir.

Bunu terminalde aşağıdaki komutu kullanarak bulmanın en hızlı yolu

netstat -aon | findstr 8081

bu size bir şey gösterirse, bağlantı noktasının engellendiği anlamına gelir. mümkünse bu bağlantı noktasının engelini kaldırın.

Aksi takdirde bağlantı noktasını değiştirmeniz gerekir. Bunu yapma süreci, Naveen Kumar tarafından yukarıdaki yorumda zaten belirtilmiştir.

react-native run-android --port=9001

9001'in de kullanılmadığından emin olun :)


1

Yukarıdaki çözümlerde belirtilen her şeyi denediyseniz bu adımları deneyin:

  1. Android / app / src / main / varlıklarda Dosya Oluştur
  2. Aşağıdaki komutu çalıştırın:

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

  1. Şimdi reaksiyona-yerli run-android için inşa etmek için komutunuzu çalıştırın

Vay be bu bana kısmen yardımcı oldu. Ben google oyun pazarı için benim app hazırlıyorum yaptım tüm android için yeni varlıklar simgeleri eklemek ve 28 versin için hedef değiştirmek. Ben v27 sürümüne geri dönmek zorunda kaldı ve hepsi tekrar çalışmaya başlamak ... ben neden çalışmıyor tepki bilmiyorum sdk v28.
Michail Pidgorodetskiy

0

Takip etmeyi dene.

  1. Android ve IOS klasörlerini kaldırma
  2. tepkime doğal atımı çalıştır
  3. reat-native çalıştırmak-android çalıştırmak

Belki önceki adımlardan sonra npm start - --reset-cache

Çalışıyorum, umarım size yardımcı olur.


0

Linux işletim sisteminde çalışıyorsanız, npm uzak sunucunuzun çalışmadığı durumlar olabilir. Başka bir terminal açın (proje dizini ile) ve sudo tepki-yerel çalışma-android yapmadan önce bu komutu sudo npm start veya sudo tepki-native başlatma çalıştırın


0

Emülatördeki hata mesajı bir tür yanıltıcıdır. Benim durumumda bir Macbook kullandım. Android / gradlew'daki izinleri çalıştırarak değiştirmem gerekiyordu $ chmod 755 ./gradlewve daha sonra uygulama android emülatöre inşa edilebiliyordu.

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.