React-native ile sunucusuz çalışabilen bir apk nasıl oluşturabilirim?


210

Uygulamamı oluşturdum, yerel öykünücümde (ve aynı ağdaki android cihazımda hata ayıklama sunucusunu değiştirerek çalıştırabilirim).

Ancak, geliştirme sunucusuna erişmeden birine gönderebileceğim bir APK oluşturmak istiyorum ve uygulamayı test edebilmelerini istiyorum.

Dokümanların iOS'ta çevrimdışı paketi kullanma bölümünde bir bölüm olduğunu görüyorum. Ama aynı şeyi android için nasıl başaracağımı anlayamadım. Mümkün mü? Öyleyse nasıl?

GÜNCELLEME: Bu sorunun cevabında ( Android JS paketini yükleyemedi ), çevrimdışı paketin geliştirme sunucusundan indirilebileceği söyleniyor. Ancak paketi geliştirme sunucusundan aldığımda görüntü dosyaları yüklenemiyor.


apk dosyası oluşturmak için bu basit örneği kontrol edin: React Native Generate Release
APK'yı

Yanıtlar:


202

Aditya Singh'in cevabını takiben oluşturulan (imzasız) apk telefonuma yüklenmedi. Buradaki talimatları kullanarak imzalı bir apk oluşturmak zorunda kaldım .

Aşağıdakiler benim için çalıştı:

$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

Yerleştirin my-release-key.keystorealtında dosyayı android/app proje klasörüne dizininde. Sonra dosyayı düzenleyin ~/.gradle/gradle.propertiesve aşağıdakileri ekleyin (**** yerine doğru anahtar deposu şifresi, takma ad ve anahtar şifresi koyun)

MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=****
MYAPP_RELEASE_KEY_PASSWORD=****

Eğer MacOS kullanıyorsanız, talimatları kullanarak anahtarlıkta şifrenizi saklayabilirsiniz burada düz metin olarak depolamak yerine.

Sonra app / build.gradle dosyasını düzenleyin ve aşağıdakilerin bulunduğundan emin olun (signingConfigs signingConfig içeren bölümlerin eklenmesi gerekebilir):

...
android {
    ...
    defaultConfig { ... }
    signingConfigs {
        release {
            if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
                storeFile file(MYAPP_RELEASE_STORE_FILE)
                storePassword MYAPP_RELEASE_STORE_PASSWORD
                keyAlias MYAPP_RELEASE_KEY_ALIAS
                keyPassword MYAPP_RELEASE_KEY_PASSWORD
            }
        }
    }
    buildTypes {
        release {
            ...
            signingConfig signingConfigs.release
        }
    }
}
...

Sonra komutu çalıştırın cd android && ./gradlew assembleRelease,

Windows için 'cd android' ve ardından gradlew assembleReleasekomutu çalıştırın ve altında imzalı apk'nizi bulunandroid/app/build/outputs/apk/app-release.apk


10
Bu en güncel ve doğru cevaptır. Teşekkürler.
Gokhan Sari

2
app-release.apk yüklenmiyor. sorun ne olurdu?
Balasubramanian

1
Ben apk oluşturmak, google play yüklemek, ama çalışmıyor ... bazı ipucu?
Italo Rodrigo

2
Android / uygulama klasörünü bulamıyorum, bu nerede bulunuyor?
DHLopez

6
Teşekkürler, ama değildi, çünkü test için expo kullandığımı ve yerel uygulama oluşturma npm'sinin farklı bir yapıya sahip olduğunu gördüm, bu yüzden gelecekte başvurmak için, eğer herkes bu sorunu alırsa, projenizi çıkarırsınız ve sonra bu klasörler, öğretici uygulamayı oluşturmak için npm'yi nasıl kullanacağınızı söyler ve daha sonra kullandığınızda mevcut olmayan bir yapıdan
bahseder

194

APK'yı imzalamak için bir anahtar oluşturmanız gerekecek. Anahtarınızı oluşturmak için aşağıdakileri kullanın:

 keytool -genkey -v -keystore my-app-key.keystore -alias my-app-alias -keyalg RSA -keysize 2048 -validity 10000

İstendiğinde şifre kullan

Anahtar oluşturulduktan sonra, yüklenebilir yapıyı oluşturmak için kullanın:

 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/

Dereceyi kullanarak yapı oluşturma

 cd android && ./gradlew assembleRelease

APK'yı telefonunuza yükleyin. -r(Varsa) bayrağı mevcut uygulamalarını yerini alacak

adb install -r ./app/build/outputs/apk/app-release-unsigned.apk

Daha ayrıntılı bir açıklama burada belirtilmiştir: https://facebook.github.io/react-native/docs/signed-apk-android.html

GÜNCELLEME : @shashuec ve @Fallen tarafından yapılan yorumlara göre

hata alırsan

ENOENT: böyle bir dosya veya dizin yok, 'android / app / src / main / asset / index.android.bundle' dosyasını açın

çalıştırmak mkdir android / app / src / main / asset


4
Bunun için çok teşekkürler, benim için çalıştı. Aldığım tek sorun şu mesajdı: "Gerekli argümanlar eksik: paket çıktısı" tr tepki-yerel paket parçası, ancak 2 "\" sembolü silinerek çözüldü
guinunez

58
Facebook'un bu react-native bundlebölümü tamamen atladığı kötü belgelere hayran kaldım . Cevabınız için teşekkürler!
technophyle

2
Pencerelerle çalışıyorum, bununla da çalışıyorum gradlew.bat assembleRelease.
Tabares

12
Bu hatayı alıyorum Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES] . apk'yi yüklemeye çalıştığımda.
developernaren

18
hata ENOENT: no such file or directory, open 'android/app/src/main/assets/index.android.bundle' çalıştırırsanızmkdir android/app/src/main/assets
shashuec

31

Bu işlem için sadece android studio kullanmalısınız. Sadece daha basit. Ancak önce bu komutu yerel uygulama dizininizin dizininde çalıştırın:

Reaksiyona özgü daha yeni sürümler için (örn. Yerli tepki 0,49,0 vb.)

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'in Eski Sürümü için (0.49.0 ve altı)

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/

Daha sonra yerel uygulama dizinine tepki 'android' klasörünü açmak için android studio kullanın, gradle ve diğer bazı şeyleri yükseltmek isteyecektir. build-> İmzalı APK oluştur'a gidin ve oradaki talimatları izleyin. Gerçekten çok basit.


Ayrıca React Native uygulamalarım için sürüm sürümleri oluşturmak için Android Studio ve Xcode'u kullanıyorum ... ancak android üretimi @Aditya Singh
WiRa

Bu artık gerekli değil proandroiddev.com/…
onmyway133

30

Bu komutu çalıştırın:

react-native run-android --variant=release

Not --variant=releaseBirlikte imzalanması kurduysanız kullanılabilir cd android && ./gradlew assembleRelease.


@jasan Burada seninki gibi başka bir sorun buldum: github.com/facebook/react-native/issues/11586 Bu sorunu düzeltebilir: cd android && ./gradlew installRelease
Ahmed Eşref

Denedim cd android && ./gradlew installReleaseve bu hatayı aldımTask 'assembleRelease.' not found in root project 'project'. Some candidates are: 'assembleRelease'.
ThomasReggi

Evet, Anahtar deposu dosyasını oluşturmanız gerekir. ve gradle dosyasını düzenleyin. Bu sorunu çözmek için bu talimatları izleyin. facebook.github.io/react-native/docs/signed-apk-android.html
Ahmed Eşref

21

React Native 0.49 ve üstü için

terminaldeki proje dizinine gitmeli ve bu komutu çalıştırmalısınız

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

0,49'dan düşükse

  1 - mkdir android/app/src/main/assets
  2 - 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

Daha sonra yerel uygulama dizinine tepki 'android' klasörünü açmak için android studio kullanın, gradle ve diğer bazı şeyleri yükseltmek isteyecektir. build-> İmzalı APK oluştur'a gidin ve oradaki talimatları izleyin. Tamam.


Bu, Android Studio yüklüyse bunu yapmanın kolay bir yoludur (bu, Keystore'u kullanmaya veya oluşturmaya özen gösterir). Teşekkürler.
leosok

Hey .. hızlı bir sorunuz var .. Yukarıdaki adımlar gerekli mi? Tepki yerli doktor hiçbir yerde bahsetmiyor ..
pravin

1
@pravin gerekli değildir, apk oluşturma yöntemlerinden biridir.
Yasin Uğurlu

12

Eğer alırsan Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES].

@ Aditya'ın imzasız bir APK dosyası oluşturma ve yükleme yöntemini kullanmayı denedim, ancak Android tabletime kurmaya gittiğimde bana bir hata verdi Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES].

Bunun nedeni APK dosyasının imzalanmadığı ve tabletin bundan memnun olmadığıdır. Bu nedenle, React Native paket dosyasını oluşturduktan sonra normal olarak Android Studio aracılığıyla imzalı bir APK dosyası oluşturabildim.

Bu arada, uygulamamız Play Store'da zaten var olan tamamen çalışan bir Android uygulaması ve sadece React Native'i ısırık boyutunda parçalar halinde ekliyoruz, çünkü harika.

Özetlemek gerekirse, işte adımlarım:

1) React Native paketi oluşturun:

react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output android/<your-package-name>/src/main/assets/index.android.bu‌​ndle --assets-dest android/<your-package-name>/src/main/res/ 

2) Android Studio'dan İmzalı bir APK dosyası oluşturun.

3) İmzalı APK Dosyasını USB cihazına yükleyin:

adb -d install -r <path_to_signed_apk> 

-dBayrak sadece söyler adbbir emülatör de çalışmakta olduğundan durumunda, ekli usb cihazınıza yükleyebilir. Herhangi bir emülatöre yüklemek isterseniz, -dbayrağı bırakın .

4) Kâr!


11

Aşağıda deneyin, root / android / app / build / outputs / apk / debug klasörünüzde bir app-debug.apk oluşturur

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

sonra android klasörüne gidin ve çalıştırın

./gradlew assembleDebug


Burada üretilen
APK'nın

11

Herhangi biri playstore anahtarları olmadan oluşturmak istiyorsanız, bu komut çok yardımcı olacaktır.

# react-native run-android --variant=release

Derleme tamamlandıktan sonra apk sürüm derleme dosyasında bulabilirsiniz.


7

Proje dizinine gidin ve şu komutu çalıştırın:

cd android && ./gradlew assembleRelease

Gerekli konfigürasyonu yapmadıysanız (Pedram'ın söylediği gibi) bu imzalanmamış bir apk oluşturur.
Gökhan Sari

Oluşturulan klasörde hata ayıklama, yayın ve imzasız apk oluşturur. Amacım sürüm apk paylaşmaktı.
Sidharth Taneja

6

İndex.android.js ile ilgili bir hata alırsanız. Bunun nedeni, yeni React-yerel sürümünü kullanmanızdır (0.55.4 kullanıyorum) Sadece "index.android.js" yerine "index.js" yazı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/

5

Başka bir çözüm var: - Bir imzalama anahtarı oluşturma Keytool kullanarak özel bir imzalama anahtarı oluşturabilirsiniz. Windows'da keytool C: \ Program Files \ Java \ jdkx.x.x_x \ bin'den çalıştırılmalıdır.

$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

My-release-key.keystore dosyasını proje klasörünüzdeki android / app dizininin altına yerleştirin.

Proje klasörünüzdeki android / app / build.gradle dosyasını düzenleyin ve imzalama yapılandırmasını ekleyin,

android {
....
signingConfigs { 
  release { 

      storeFile file('my-release-key.keystore') 
      storePassword 'yourpassword' 
      keyAlias 'my-key-alias' 
      keyPassword 'yourpassword' 

  } 
}}}


buildTypes {release {signingConfig signingConfigs.release}}

ve koş

gradlew assembleRelease

Bu size android \ app \ build \ outputs \ apk app-release.apk ve app-release-unsigned.apk adresindeki iki dosyayı verecektir.


Android \ app klasörü nerede? Projem altında görmüyorum (sadece node_modules'i görüyorum ve içinde android / uygulama yok)
DHLopez

1
@DHLopez android klasörüne erişmek için saf React Native projesini kullanmak zorunda. Expo kullanıyorsanız, Expo projesini kullanarak Expo projesini ayırmanız gerekir.
fxbayuanggara

5

Umarım yeni başlayanlara yardımcı olur

Burada resmi doktor

Komuttan önce kullanmadan anahtar deponuz yoksa, atlayın

Bir imzalama anahtarı / Anahtar deposu dosyası oluşturma Tuş takımını kullanarak özel bir imzalama anahtarı oluşturabilirsiniz. Windows'ta tuş takımı C: \ Program Files \ Java \ jdkx.x.x_x \ bin'den çalıştırılmalıdır.

$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

my-release-key.keystore gibi bir dosya alacaksınız

Sınıf değişkenlerini ayarlama my-release-key.keystore dosyasını proje klasörünüzdeki android / app dizininin altına yerleştirin. Android / gradle.properties dosyasını düzenleyin ve aşağıdakileri ekleyin (doğru anahtar deposu şifresi, takma ad ve anahtar şifresi ile ***** değiştirin), android gradle sürüm 3.0 sorunu olarak enableAapt2 set false çözümdür

MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=*****
MYAPP_RELEASE_KEY_PASSWORD=*****

android.enableAapt2=false

sonra bu uygulamayı / buid.gradle (app) ekleyin

varsayılan yapılandırmanın altında

signingConfigs {
        release {
            if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
                storeFile file(MYAPP_RELEASE_STORE_FILE)
                storePassword MYAPP_RELEASE_STORE_PASSWORD
                keyAlias MYAPP_RELEASE_KEY_ALIAS
                keyPassword MYAPP_RELEASE_KEY_PASSWORD
            }
        }

ve Inside Build türü sürümü {}

 signingConfig signingConfigs.release

o zaman sadece android stüdyo terminalinde bu komutu çalıştırın Aşağıdaki komutlar tüm cevapların üstünde otomatik olacaktır

eğer pencereler

cd android
gradlew assembleRelease

linux / mac ise

$ cd android
$ ./gradlew assembleRelease

eğer herhangi bir hata varsa tüm inşa klasörü silmek ve komutunu çalıştırın

gradlew clean

tekrardan

gradlew assembleRelease

1
Aman tanrım gradle clean... Bir süredir bu hataları alıyorum, bu cevap için çok teşekkür ederim !!
nerdlinger

5

Projeyi paketlemek için en son yerel sürümler için

Android

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/

iOS

react-native bundle --entry-file index.js --platform ios --dev false --bundle-output ios/main.jsbundle --assets-dest ios


3

Android Studio'daki GUI yolu

  • React Native uygulamasının Android uygulamasının Android Studio'da açık olmasını sağlayın (bu, yerel olarak yerel projenizin android klasörünü Android Studio ile açmak anlamına gelir)
  • Üst kısımdaki "Oluştur" sekmesine gidin
  • "Grupları / APK'ları Oluştur" a gidin
  • Ardından "APK Oluştur" u seçin
  • Bu, APK'yı imzalamak için anahtarlarınızı bulma veya zaten çok basit olan anahtarlarınız yoksa anahtarlarınızı oluşturma işleminde size yol gösterecektir. Sadece pratik yapıyorsanız, bu anahtarları oluşturabilir ve masaüstünüze kaydedebilirsiniz.
  • Bu işlem tamamlandığında ve derleme başarılı olduysa Android Studio'da aşağı açılır bir pencere açılır. İçinde "bulun" (APK) yazan bağlantıyı tıklayın
  • Bu sizi apk dosyasına götürecek, android cihazınıza taşıyacak. Ardından Android cihazında bu dosyaya gidin ve yükleyin.

0

Reat'un android projesi için imzalı apk oluşturmak için android studio'yu kullanmak da iyi ve kolay bir seçenektir, reat'ın android projesini android stüdyosunda açın ve tuş vuruşu ve imzalı apk oluşturun.


-2

İmzalı Oluşturma hakkındaki yerel tepki resmi belgelere bakın APK

React-yerli üreten imza APK


Kullanıcının sormadığı soruyu ele alsa bile bu iyi bir cevap değildir. Bir sürüm değil, bağımsız bir hata ayıklama APK oluşturmak istiyorlar.
user37309
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.