Bagaimana saya bisa menghasilkan apk yang dapat berjalan tanpa server dengan yang asli?

211

Saya telah membangun aplikasi saya, saya dapat menjalankannya di emulator lokal saya (dan juga pada perangkat android saya dalam jaringan yang sama dengan mengubah server debug).

Namun, saya ingin membangun APK yang dapat saya kirim ke seseorang tanpa akses ke server pengembangan dan saya ingin mereka dapat menguji aplikasi.

Saya melihat ada bagian Menggunakan bundel offline pada bagian iOS dari dokumentasi. Tapi saya tidak tahu bagaimana menyelesaikan hal yang sama untuk android. Apakah ini mungkin? Jika ya, bagaimana caranya?

UPDATE: Pada jawaban untuk pertanyaan ini ( Android gagal memuat bundel JS ) dikatakan bahwa bundel offline dapat diunduh dari server pengembangan. Tetapi ketika saya mendapatkan bundel dari server pengembangan file gambar tidak dapat dimuat.

Gokhan Sari
sumber
periksa contoh sederhana ini untuk menghasilkan file apk: React Native Generate Release APK melalui Windows Command Prompt Android
sumit kumar pradhan

Jawaban:

204

Mengikuti jawaban Aditya Singh, apk yang dihasilkan (tidak ditandatangani) tidak akan dipasang di ponsel saya. Saya harus membuat apk yang ditandatangani menggunakan instruksi di sini .

Berikut ini bekerja untuk saya:

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

Tempatkan my-release-key.keystorefile di bawah android/app direktori di folder proyek Anda. Kemudian edit file ~/.gradle/gradle.propertiesdan tambahkan berikut ini (ganti **** dengan kata sandi kunci yang benar, alias dan kata sandi kunci)

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

Jika Anda menggunakan MacOS, Anda dapat menyimpan kata sandi di gantungan kunci menggunakan instruksi di sini alih-alih menyimpannya dalam plaintext.

Kemudian edit app / build.gradle dan pastikan hal berikut ada di sana (bagian dengan penandatangananConfigs penandatangananConfig mungkin perlu ditambahkan):

...
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
        }
    }
}
...

Kemudian jalankan perintah cd android && ./gradlew assembleRelease,

Untuk Windows 'cd android' dan kemudian jalankan gradlew assembleReleaseperintah, dan temukan apk yang Anda tandatangani di bawahandroid/app/build/outputs/apk/app-release.apk

Pedram
sumber
10
Ini adalah jawaban yang paling mutakhir dan akurat. Terima kasih.
Gokhan Sari
2
app-release.apk tidak menginstal. apa masalahnya?
Balasubramanian
1
Saya membuat apk, mengunggah ke google play, tetapi tidak berfungsi ... beberapa petunjuk?
Italo Rodrigo
2
Saya tidak dapat menemukan folder android / aplikasi, di mana ini berada?
DHLopez
6
Terima kasih, bukan, tapi saya menemukan itu karena saya menggunakan expo untuk pengujian, dan membuat aplikasi asli npm memiliki struktur yang berbeda, jadi untuk referensi di masa depan, jika ada yang mendapatkan masalah ini, cukup keluarkan proyek Anda dan kemudian Anda dapatkan folder-folder itu, lucu bagaimana tutorialnya memberitahu Anda untuk menggunakan npm untuk membuat aplikasi, dan kemudian berbicara tentang struktur yang tidak ada ketika Anda menggunakannya
DHLopez
194

Anda harus membuat kunci untuk menandatangani apk. Gunakan di bawah ini untuk membuat kunci Anda:

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

Gunakan kata sandi saat diminta

Setelah kunci dibuat, gunakan untuk menghasilkan build yang dapat diinstal:

 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/

Hasilkan build menggunakan gradle

 cd android && ./gradlew assembleRelease

Unggah APK ke ponsel Anda. The -rbendera akan menggantikan aplikasi yang ada (jika ada)

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

Penjelasan lebih rinci disebutkan di sini: https://facebook.github.io/react-native/docs/signed-apk-android.html

UPDATE : Berdasarkan komentar oleh @shashuec dan @Fallen

jika Anda mendapatkan kesalahan

ENOENT: tidak ada file atau direktori seperti itu, buka 'android / app / src / main / assets / index.android.bundle'

jalankan mkdir android / app / src / main / aset

Aditya Singh
sumber
4
Terima kasih banyak untuk ini, itu berhasil untuk saya. Satu-satunya masalah yang saya dapatkan adalah pesan ini: "Argumen yang diperlukan tidak ada: bundle-output" en bagian bundel-reaksi-asli, tetapi diselesaikan dengan menghapus 2 "\" simbol
guinunez
59
Saya kagum dengan dokumentasi Facebook yang buruk di mana mereka benar-benar menghilangkan react-native bundlebagian itu. Terima kasih atas jawaban anda!
technophyle
2
Saya bekerja dengan windows, bekerja dengan ini gradlew.bat assembleReleasejuga.
Tabares
12
Saya mendapatkan kesalahan ini Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES] . ketika saya mencoba menginstal apk.
developernaren
18
jika Anda mendapatkan error ENOENT: no such file or directory, open 'android/app/src/main/assets/index.android.bundle' runmkdir android/app/src/main/assets
shashuec
31

Anda hanya harus menggunakan studio android untuk proses ini. Itu lebih sederhana. Tetapi pertama-tama jalankan perintah ini di direktori aplikasi asli reaksi Anda:

Untuk versi yang lebih baru dari reaksi-asli (misalnya reaksi asli 0.49.0 & seterusnya ...)

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

Untuk Versi lawas dari reaksi asli (0.49.0 & di bawah)

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/

Kemudian Gunakan android studio untuk membuka folder 'android' di Anda bereaksi direktori aplikasi asli, itu akan meminta untuk meng-upgrade gradle dan beberapa hal lainnya. pergi ke build-> Hasilkan APK yang ditandatangani dan ikuti instruksi dari sana. Benar-benar lurus ke depan.

Mike Axle
sumber
Saya juga menggunakan Android Studio dan Xcode untuk membuat versi rilis untuk aplikasi React Native saya ... tetapi generasi android dapat dilakukan dengan skrip seperti yang dijelaskan oleh @Aditya Singh
WiRa
Ini tidak lagi diperlukan proandroiddev.com/...
onmyway133
30

Jalankan perintah ini:

react-native run-android --variant=release

Perhatikan bahwa --variant=releaseini hanya tersedia jika Anda sudah mengatur untuk mendaftar cd android && ./gradlew assembleRelease.

Ahmed Ashraf
sumber
@ jasan Saya menemukan masalah lain seperti milik Anda di sini: github.com/facebook/react-native/issues/11586 Ini dapat memperbaiki masalah: cd android && ./gradlew installRelease
Ahmed Ashraf
Saya mencoba cd android && ./gradlew installReleasedan mendapatkan kesalahan iniTask 'assembleRelease.' not found in root project 'project'. Some candidates are: 'assembleRelease'.
ThomasReggi
Ya, Anda harus membuat file Keystore. dan edit file gradle. Ikuti petunjuk itu untuk memperbaiki masalah ini. facebook.github.io/react-native/docs/signed-apk-android.html
Ahmed Ashraf
21

untuk Bereaksi Asli 0,49 dan lebih tinggi

Anda harus pergi ke direktori proyek pada terminal dan menjalankan perintah itu

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

jika di bawah 0,49

  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

Kemudian Gunakan android studio untuk membuka folder 'android' di Anda bereaksi direktori aplikasi asli, itu akan meminta untuk meng-upgrade gradle dan beberapa hal lainnya. pergi ke build-> Hasilkan APK yang ditandatangani dan ikuti instruksi dari sana. Okey itu

Yasin Ugurlu
sumber
Ini adalah cara mudah untuk melakukannya jika Anda telah menginstal Android Studio (yang akan mengurus menggunakan atau membuat Keystore). Terima kasih.
leosok
Hai .. ada pertanyaan cepat .. apakah langkah-langkah di atas diperlukan? Doc asli bereaksi tidak menyebutkannya di mana saja ..
pravin
1
@Pravin itu tidak diperlukan, itu adalah salah satu metode dari apk generate.
Yasin Ugurlu
12

Jika Anda mendapatkan Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES].

Saya mencoba menggunakan metode @ Aditya untuk menghasilkan file APK yang tidak ditandatangani dan menginstalnya, tetapi ketika saya menginstalnya di tablet Android saya, itu memberi saya kesalahan Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES].

Saya membayangkan ini karena file APK tidak ditandatangani dan tablet tidak senang dengan ini. Jadi, setelah membuat file bundel Asli Bereaksi, saya dapat membuat file APK yang ditandatangani, seperti biasa, melalui Android Studio.

Ngomong-ngomong, aplikasi kami adalah aplikasi Android yang berfungsi penuh yang sudah ada di Play Store dan kami hanya menambahkan React Native ke dalamnya dalam ukuran seukuran gigitan, karena itu mengagumkan.

Jadi untuk meringkas, inilah langkah-langkah saya:

1) Hasilkan bundel Asli Bereaksi:

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) Hasilkan file APK yang Ditandatangani dari Android Studio.

3) Instal File APK yang Ditandatangani ke perangkat USB:

adb -d install -r <path_to_signed_apk> 

The -dbendera hanya memberitahu adbuntuk menginstal pada perangkat usb terpasang, dalam hal Anda memiliki emulator berjalan dengan baik. Jika Anda ingin menginstal emulator apa pun, jatuhkan -dflag.

4) Untung!

Joshua Pinter
sumber
11

Coba di bawah, ini akan menghasilkan aplikasi-debug.apk pada folder root / android / app / build / outputs / apk / debug Anda

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

lalu buka folder android dan jalankan

./gradlew assembleDebug

kawan
sumber
APK yang dihasilkan di sini membutuhkan Metro untuk dijalankan ... jadi saya pikir itu masih menggunakan server dev
nerdlinger
11

Jika ada yang ingin membangun tanpa tombol playstore maka perintah ini akan sangat membantu.

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

Setelah selesai, Anda dapat menemukan apk dalam file rilis rilis.

Akash Golui
sumber
7

Buka direktori proyek dan jalankan perintah:

cd android && ./gradlew assembleRelease
Sidharth Taneja
sumber
Ini akan menghasilkan apk yang tidak ditandatangani jika Anda tidak melakukan konfigurasi yang diperlukan (seperti yang dikatakan Pedram).
Gokhan Sari
Ini akan membuat debug, lepaskan dan unsigned apk di folder yang dibuat. Niat saya adalah untuk membagikan apk rilis.
Sidharth Taneja
6

Jika Anda mendapatkan kesalahan yang melibatkan index.android.js. Ini karena Anda menggunakan versi React-asli yang baru (saya menggunakan 0,55.4) Cukup ganti "index.android.js" menjadi "index.js"

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/
Usman Kazmi
sumber
5

Saya punya solusi lain: - Menghasilkan kunci penandatanganan Anda dapat membuat kunci penandatanganan pribadi menggunakan keytool. Pada Windows keytool harus dijalankan dari C: \ Program Files \ Java \ jdkx.x.x_x \ bin.

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

Tempatkan file my-release-key.keystore di bawah direktori android / app di folder proyek Anda.

Edit file android / app / build.gradle di folder proyek Anda dan tambahkan konfigurasi penandatanganan,

android {
....
signingConfigs { 
  release { 

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

  } 
}}}


buildTypes {release {signingConfig signingConfigs.release}}

dan lari

gradlew assembleRelease

Ini akan memberi Anda dua file di android \ app \ build \ outputs \ apk app-release.apk dan app-release-unsigned.apk sekarang instal app-release.apk di perangkat android Anda.

Raman Bhasker
sumber
Di mana folder Android \ app? Saya tidak melihatnya di bawah proyek saya (saya hanya melihat node_modules, dan di dalamnya, tidak ada android / aplikasi)
DHLopez
1
@DHLopez Anda harus menggunakan proyek Asli Bereaksi murni untuk memiliki akses ke folder android. Jika Anda menggunakan Expo, maka Anda harus melepaskan proyek Expo menggunakan expo eject.
fxbayuanggara
5

Semoga ini akan membantu pemula baru

Doc resmi di sini

Jika Anda tidak memiliki keystore daripada menggunakan sebelum perintah lain lewati

Membuat kunci penandatanganan / file Keystore Anda dapat membuat kunci tanda tangan pribadi menggunakan keytool. Pada Windows keytool harus dijalankan dari C: \ Program Files \ Java \ jdkx.x.x_x \ bin.

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

Anda akan mendapatkan file seperti my-release-key.keystore

Menyiapkan variabel gradle Tempatkan file my-release-key.keystore di bawah direktori android / app di folder proyek Anda. Mengedit file android / gradle.properties dan tambahkan berikut (ganti ***** dengan password yang benar keystore, alias dan password kunci), enableAapt2 set palsu adalah solusi, seperti android versi Gradle 3.0 masalah

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

kemudian tambahkan aplikasi ini / buid.gradle (aplikasi)

di bawah konfigurasi default

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

dan rilis tipe Inside Build {}

 signingConfig signingConfigs.release

kemudian jalankan perintah ini di terminal android studio Perintah di bawah ini akan mengotomatiskan di atas semua jawaban

jika windows

cd android
gradlew assembleRelease

jika linux / mac

$ cd android
$ ./gradlew assembleRelease

jika Anda mendapat kesalahan, hapus semua folder bangun dan jalankan perintah

gradlew clean

daripada lagi

gradlew assembleRelease
Abhishek Garg
sumber
1
omg gradle clean... Saya telah berjuang dengan ini untuk sementara waktu mendapatkan kesalahan-kesalahan build itu, terima kasih banyak atas jawaban ini !!
nerdlinger
5

Untuk versi terbaru bereaksi asli untuk bundel proyek

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

Phani Sai
sumber
3

Cara GUI di Android Studio

  • Biarkan aplikasi Android bagian dari aplikasi React Native terbuka di Android Studio (ini hanya berarti membuka folder android dari proyek asli Anda dengan Android Studio)
  • Buka tab "Bangun" di bagian atas
  • Turun ke "Bangun Bundel / APK"
  • Kemudian pilih "Bangun APK"
  • Ini akan memandu Anda melalui proses menemukan kunci Anda untuk menandatangani APK atau membuat kunci Anda jika Anda belum memilikinya yang semuanya sangat mudah. Jika Anda hanya berlatih, Anda dapat membuat kunci-kunci ini dan menyimpannya di desktop Anda.
  • Setelah proses itu selesai dan jika build berhasil, akan ada popup di bawah di Android Studio. Klik tautan di dalamnya yang bertuliskan "temukan" (APK)
  • Itu akan membawa Anda ke file apk, memindahkannya ke perangkat android Anda. Kemudian navigasikan ke file itu di perangkat Android dan instal.
David Hudman
sumber
0

Menggunakan android studio untuk menghasilkan apk yang ditandatangani untuk proyek android react juga merupakan pilihan yang baik dan mudah, buka proyek android reacts di android studio dan hasilkan keystroke dan apk yang ditandatangani.

Ahmad Sadiq
sumber
-2

Lihat dokumentasi resmi asli reaksi pada Generating Signed APK

React-Native Generating Signed APK

Pembuat kode
sumber
Ini bukan jawaban yang baik, bahkan jika itu menjawab pertanyaan pengguna yang tidak. Mereka ingin membangun APK debug mandiri, bukan yang rilis.
user37309