Bangun dan Instal apk yang tidak ditandatangani di perangkat tanpa server pengembangan?


166

Karena saya baru dalam reaksi-asli sehingga jika ada sesuatu yang salah dalam langkah, beri tahu saya.

Saya telah membangun aplikasi Android asli yang bereaksi menggunakan perintah sesuai dokumentasi

Android asli bereaksi

saat berjalan di perangkat perintah berikut ini digunakan

reaksi-asli run-android

yang memberi saya output 2 file apk di folder proyek / android / app / build / outputs / apk saya

masukkan deskripsi gambar di sini

sekarang ketika saya menggunakan untuk menginstal apk ini setelah instalasi itu meminta server pengembangan untuk terhubung ke bundel JS. Tetapi persyaratan saya adalah bahwa pengguna tidak harus berjuang dengan server pengembangan hanya dia perlu menginstal apk dan semuanya dilakukan.

Telah melewati beberapa Pertanyaan stackoverflow tetapi tidak membantu untuk membangun apk yang tidak ditandatangani yang tidak memerlukan server pengembangan.

Bisakah kalian membantu saya menemukan cara bagaimana membangun dan tidak ditandatangani apk di reaksi asli?


1
Jalankan 'react-native start', itu akan mem-bundle js Anda dalam mode pengembangan. Tujuannya adalah agar Anda dapat mengedit file js dengan cepat. Gunakan mode rilis tidak memerlukan server apa pun karena akan menyertakan bundel yang diperlukan dengannya. Lihat jawaban di bawah
kar

Jawaban:


250

Anda perlu secara manual membuat bundel untuk membangun debug.

Bundel debug build:

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

#React-Native 0.49.0+
react-native bundle --dev false --platform android --entry-file index.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest ./android/app/build/intermediates/res/merged/debug

#React-Native 0-0.49.0
react-native bundle --dev false --platform android --entry-file index.android.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest ./android/app/build/intermediates/res/merged/debug

Kemudian untuk membangun APK setelah bundling:

$ cd android
#Create debug build:
$ ./gradlew assembleDebug
#Create release build:
$ ./gradlew assembleRelease #Generated `apk` will be located at `android/app/build/outputs/apk`

PS Pendekatan lain mungkin untuk memodifikasi skrip gradle.


3
Jika seseorang kehilangan aset: ini bekerja untuk saya--assets-dest ./android/app/src/main/res/
Juan Solano

11
Dan jika melakukan ini memberi saya layar merah besar ketika saya memulai aplikasi? (Catatan: Saya menjalankan ini langsung setelah mengeluarkan)
Simon Forsberg

3
Bagaimana cara membangun versi terbaru karena kami tidak memiliki index.android.js?
Vivek

9
Orang-orang dengan versi terbaru, silakan ubah titik masuk ke --entry-file index.js, terima kasih.
Rishabh Bhatia

4
bundel reaksi-asli --dev false --platform android --entry-file index.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest. / android / app / build / intermediates / res / merger / debug untuk versi reaktif baru di mana index.js disatukan untuk ios dan android
ir2pid

101

Ikuti langkah-langkah itu.

Bundel js Anda:

jika Anda memiliki index.android.js di root proyek kemudian jalankan

react-native bundle --dev false --platform android --entry-file index.android.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest ./android/app/build/intermediates/res/merged/debug

jika Anda memiliki index.js di root proyek kemudian jalankan

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

Buat apk debug:

cd android/
./gradlew assembleDebug

Maka Anda dapat menemukan apk Anda di sini:

cd app/build/outputs/apk/

11
Dan jika melakukan ini memberi saya layar merah besar ketika saya memulai aplikasi? (Catatan: Saya menjalankan ini langsung setelah ejecting)
Simon Forsberg

2
@SimonForsberg jika Anda menggunakan reaksi ^ 0,5, ubah titik masuk ke index.js alih-alih App.js atau index.android.js, react-native bundle --dev false --platform android --entry-file index.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest ./android/app/build/intermediates/res/merged/debug
d.bayo

3
Tidak berfungsi, perintah ini membangun apk tetapi apk itu tidak berjalan tanpa server pemaket.
Vishal Chhodwani

1
Ini tidak akan berhasil, karena membutuhkan server dev
sheriff_paul

1
Saya mengalami masalah yang sama, ketika membuat debug-APK, saya dapat menginstalnya, tetapi saya memerlukan server dev, dan ketika saya menggunakan rilis APK, saya tidak dapat menginstalnya di telepon saya, saya tidak tahu apa salah dengan itu
aName

62

Pembaruan Terbaru

Di direktori proyek root Anda

Pastikan Anda sudah memiliki direktori android / app / src / main / aset / , jika tidak membuat direktori, setelah itu buat file baru dan simpan sebagai index.android.bundledan masukkan file Anda seperti ini android / app / src / main / aset / index.android .bundel

Setelah itu jalankan ini

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/

cd android && ./gradlew assembleDebug

Kemudian Anda bisa masuk apkke app / build / outputs / apk / debug / app-debug.apk


Jawaban ini benar-benar berfungsi, terima kasih banyak,
aName

Jawaban ini benar-benar berfungsi, terima kasih banyak,
aName

@ jeeva: bagaimana menghubungkan aplikasi kembali ke server pengembangan yang asli bereaksi?
Mayur Baldha

Poin yang dibuat index.android.bundlesangat penting untuk tidak menggunakan server pengembangan di host.
Lee Elton

@ Mayur Balha: Anda dapat terhubung kembali melalui usb atau wifi (terhubung di jaringan yang sama). Untuk WiFi terhubung kembali ke server di aplikasi reaksi Anda goyangkan ponsel Anda di emulator tekan Win + R kemudian klik pengaturan dev Gulir ke bawah "Debug Server Host & Port" masukkan alamat ip Anda dan port (pada windows terbuka cmd masukkan "ipconfig" atau Mac terbuka terminal masukkan "ifconfig") seperti 192.168.1.1:8080 lalu tekan ok lagi goyang atau Tekan Win + R untuk emulator tekan muat ulang sekarang Anda dapat melihat aplikasi terhubung kembali ke pengembangan (Ini hanya akan berfungsi untuk Debug bukan untuk Rilis Apk).
Jeeva

29

Dengan saya, dalam direktori proyek jalankan perintah berikut.

Untuk bereaksi versi lama asli (Anda akan melihat index.android.js di root):

mkdir -p android/app/src/main/assets && rm -rf android/app/build && 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 && cd android && ./gradlew clean assembleRelease && cd ../

Untuk bereaksi versi baru asli (Anda hanya melihat index.js di root):

mkdir -p android/app/src/main/assets && rm -rf android/app/build && 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 && cd android && ./gradlew clean assembleRelease && cd ../

File apk akan dihasilkan di:

  • Gradle <3.0: android / app / build / outputs / apk /
  • Gradle 3.0+: android / app / build / outputs / apk / release /

dapatkah Anda menjelaskan sedikit dan bagaimana cara memecahkan masalah?
Priyal

Saya mendapatkan error saat membuka di index.android.bundle, dan menyelesaikannya dengan saran Anda. Terima kasih ... :)
zephyr

6
Bagi saya itu$ mkdir -p android/app/src/main/assets && rm -rf android/app/build && 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 && cd android && ./gradlew assembleDebug
Arif

File tidak ditemukan: index.android.js di salah satu akar proyek
Anuj

1
Catatan yang --entry-file index.android.jsperlu diganti dengan --entry-file index.jsuntuk proyek-proyek baru yang index.jsbukan index.android.jsdi root direktori proyek mereka.
daka

8

Setelah Anda mengikuti respons pertama , Anda dapat menjalankan aplikasi menggunakan

react-native run-android --variant=debug

Dan aplikasi Anda akan berjalan tanpa perlu paket


1
jawaban yang paling sederhana adalah yang paling efisien selama ini, ia bekerja dengan sempurna, menghabiskan waktu berhari-hari menguji berbagai baris perintah dan berton-ton konfigurasi js, dan semuanya dilanjutkan dalam hal ini
Nicolas Silva

4

Pada reaksi-asli 0,57, tidak ada jawaban yang diberikan sebelumnya akan berfungsi lagi, karena direktori di mana gradle mengharapkan untuk menemukan bundel dan asetnya telah berubah.

Cara sederhana tanpa reaksi paket asli

Cara paling sederhana untuk membangun debug build adalah tanpa menggunakan react-native bundleperintah sama sekali, tetapi hanya dengan memodifikasi app/build.gradlefile Anda .

Di dalam project.ext.reactpeta dalam app/build.gradlefile, tambahkan bundleInDebug: trueentri. Jika Anda ingin agar tidak berupa --devbangunan (tidak ada peringatan dan bundel yang diperkecil) maka Anda juga harus menambahkandevDisabledInDebug: true entri ke peta yang sama.

Dengan bundel asli-reaksi

Jika karena alasan tertentu Anda perlu atau ingin menggunakan react-native bundleperintah untuk membuat bundel dan kemudian ./gradlew assembleDebuguntuk membuat APK dengan bundel dan aset Anda harus memastikan untuk meletakkan bundel dan aset di jalur yang benar, di mana gradle dapat Temukan mereka.

Pada reaksi-asli 0,57 jalur tersebut adalah android/app/build/generated/assets/react/debug/index.android.jsuntuk bundel

dan android/app/build/generated/res/react/debuguntuk aset. Jadi perintah lengkap untuk bundling dan pembangunan APK secara manual dengan bundel dan aset adalah:

react-native bundle --dev false --platform android --entry-file index.js --bundle-output ./android/app/build/generated/assets/react/debug/index.android.bundle --assets-dest ./android/app/build/res/react/debug

lalu

./gradlew assembleDebug

Bundel dan jalur aset

Perhatikan bahwa jalur tempat gradle mencari bundel dan aset dapat berubah. Untuk mencari tahu di mana jalur tersebut berada, lihat react.gradlefile di node_modules/react-nativedirektori Anda . Baris dimulai dengan def jsBundleDir =dan def resourcesDir =tentukan direktori tempat gradle mencari bundel dan asetnya masing-masing.


3

Untuk pengguna Windows jika semua langkah diikuti dengan benar dari ini: https://facebook.github.io/react-native/docs/signed-apk-android.html

Anda hanya perlu menjalankan: gradlew assembleRelease

Dan file Anda akan:

  • app-release.apk
  • app-release-unaligned.apk

Lokasi: E:\YourProjectName\android\app\build\outputs\apk


Anda dapat menginstal / membagikan aplikasi-release.apk ke perangkat apa pun
Dharam Mali

2
Biasanya, build debug memiliki konfigurasi yang berbeda dari build rilis (misalnya menggunakan staging API). Ini tidak membantu jika Anda menginginkan APK mandiri yang menggunakan konfigurasi bangunan yang berbeda dari rilis
Josh

APK ini hanya untuk tujuan pengembangan / Pengujian.
Dharam Mali

3

Saya sedang bereaksi asli 0.55.4, pada dasarnya saya harus bundel secara manual:

react-native bundle --dev false --platform android --entry-file index.js --bundle- 
output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets- 
dest ./android/app/build/intermediates/res/merged/debug

Kemudian hubungkan perangkat Anda melalui usb, aktifkan usb debugging. Verifikasi perangkat yang terhubung denganadb devices .

Terakhir dijalankan react-native run-android yang akan menginstal apk debug pada ponsel Anda dan Anda dapat menjalankannya dengan baik dengan server dev

catatan:

  • Dari 0.49.0, titik masuknya tunggal index.js
  • gradlew assembleRelease hanya menghasilkan apks yang tidak ditandatangani yang tidak dapat diinstal

3

Dimungkinkan untuk membuat versi apk yang tidak ditandatangani untuk tujuan pengujian sehingga Anda dapat berjalan di ponsel Anda.

Awalnya saya mendapat kesalahan layar merah seperti yang paling banyak disebutkan di sini. tetapi saya mengikuti hal yang sama yang disebutkan di sini dan itu berhasil untuk saya.

Di konsol Anda dari direktori kerja, jalankan empat perintah ini

react-native bundle --dev false --platform android --entry-file index.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest ./android/app/build/intermediates/res/merged/debug

cd android

gradlew assembleDebug

gradlew assembleRelease

Dan kemudian file APK akan dihasilkan di: android \ app \ build \ outputs \ apk \ debug \ app-debug.apk


3

Kalau-kalau ada orang lain baru-baru ini masuk ke masalah yang sama ini, saya menggunakan React Native 0.59.8 (diuji dengan RN 0.60 juga) dan saya dapat mengkonfirmasi beberapa jawaban lain, berikut adalah langkah-langkahnya:

  1. Hapus instalan versi kompilasi terbaru dari aplikasi Anda yang terpasang di perangkat Anda

  2. Lari 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. Lari cd android/ && ./gradlew assembleDebug

  4. Dapatkan aplikasi-debug.apk Anda di folder android / app / build / outputs / apk / debug

semoga berhasil!


1
Tidak berfungsi !!!, ini menghasilkan APK debug, tetapi aplikasi masih membutuhkan server dev
aName

Ini tidak dapat bekerja di 0,59,8 asli reaksi, karena gradle mengharapkan bundel berada di android/app/build/generated/assets/react/debug/index.android.jsdan aset berada pada android/app/build/generated/res/react/debug0,57 asli reaksi.
TheBaj

Berfungsi baik untuk reaksi asli 0,60>
Moso Akinyemi

0

Saya menemukan solusi mengubah buildTypes seperti ini:

buildTypes {
  release {
    signingConfig signingConfigs.release
  }
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.