विकास सर्वर के बिना डिवाइस पर अहस्ताक्षरित APK बनाएँ और स्थापित करें?


166

जैसा कि मैं प्रतिक्रिया-मूल में नया हूं, इसलिए यदि चरणों में कुछ गलत है तो मुझे बताएं।

मैं प्रलेखन के अनुसार आदेश का उपयोग कर एक प्रतिक्रिया देशी एंड्रॉयड एप्लिकेशन का निर्माण किया है

प्रतिक्रिया-देशी android

डिवाइस पर चलने के दौरान निम्न कमांड का उपयोग किया गया था

प्रतिक्रिया-देशी रन-एंड्रॉइड

जो मुझे अपने प्रोजेक्टफ़ोल्डर / एंड्रॉइड / ऐप / बिल्ड / आउटपुट / एपीके में 2 एपीके फ़ाइलों का आउटपुट देता है

यहां छवि विवरण दर्ज करें

अब जब मैं इस एपीके को इंस्टॉल करने के लिए उपयोग करता हूं तो इंस्टालेशन के बाद यह जेएस को बंडल करने के लिए एक विकास सर्वर से कनेक्ट करने के लिए कहता है। लेकिन मेरी आवश्यकता यह है कि उपयोगकर्ता को विकास सर्वर से संघर्ष करने की आवश्यकता नहीं है, बस उसे एपीके स्थापित करने की जरूरत है और सब कुछ किया जाता है।

कुछ स्टैकओवरफ्लो प्रश्नों से गुजरे हैं, लेकिन अहस्ताक्षरित एपीके को बनाने में मददगार नहीं हैं, जिन्हें विकास सर्वर की आवश्यकता नहीं है।

क्या आप लोग मुझे तरीका खोजने में मदद कर सकते हैं कि कैसे प्रतिक्रिया में देशी का निर्माण और अहस्ताक्षरित करें?


1
'प्रतिक्रिया-मूल प्रारंभ' चलाएं, यह आपके js बंडल को विकास मोड में सर्वरित करेगा। उद्देश्य यह है कि आप मक्खी पर जेएस फाइलों को संपादित कर सकते हैं। रिलीज़ मोड का उपयोग न करें, इसके लिए किसी भी सर्वर की आवश्यकता होती है क्योंकि इसमें आवश्यक बंडल शामिल होगा। नीचे उत्तर देखें
कर

जवाबों:


250

आपको डिबग बिल्ड के लिए बंडल को मैन्युअल रूप से बनाने की आवश्यकता है।

बंडल डिबग बिल्ड:

#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

फिर बंडलिंग के बाद एपीके बनाने के लिए:

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

पुनश्च एक अन्य दृष्टिकोण ग्रेडिंग स्क्रिप्ट को संशोधित करने के लिए हो सकता है।


3
मामले में किसी को संपत्ति याद आ रही है: यह मेरे लिए काम किया--assets-dest ./android/app/src/main/res/
जुआन सोलानो

11
और अगर ऐसा करने से मुझे ऐप शुरू करने पर बड़ी लाल स्क्रीन मिलती है? (नोट: मैं इसे सीधे खारिज करने के बाद चला रहा हूं)
साइमन फोर्सबर्ग

3
नवीनतम संस्करण के लिए बिल्ड कैसे लें क्योंकि हम index.android.js hve नहीं करते हैं?
विवेक

9
नवीनतम संस्करण वाले लोग, कृपया प्रविष्टि बिंदु को --entry-file index.js में बदल दें, धन्यवाद।
ऋषभ भाटिया

4
प्रतिक्रिया-मूल बंडल - देवा झूठे - एंड्रॉइड-फ़ाइल-इंडेक्स-फ़ाइल इंडेक्स .js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle-assets-dest। नए प्रतिक्रियाशील संस्करण के लिए एंड्रॉइड / ऐप / बिल्ड / इंटरमीडिएट / रेस / मर्ज / डिबग जहां index.js ios और एंड्रॉइड के लिए एकीकृत है
ir2pid

101

कृपया उन चरणों का पालन करें।

अपने js को बंडल करें:

यदि आपके पास index.android.js प्रोजेक्ट रूट में है तो चलाएं

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

यदि आपके पास प्रोजेक्ट रूट में 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

डिबग एपीके बनाएं:

cd android/
./gradlew assembleDebug

फिर आप यहाँ अपना एपीके पा सकते हैं:

cd app/build/outputs/apk/

11
और अगर ऐसा करने से मुझे ऐप शुरू करने पर बड़ी लाल स्क्रीन मिलती है? (नोट: मैं इसे सीधे खारिज करने के बाद चला रहा हूं)
साइमन फोर्सबर्ग

2
@SimonForsberg अगर आप imon 0.5 का उपयोग कर रहे हैं, तो App.js या index.android.js के बजाय index.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
काम नहीं कर रहा है, यह एक एपीके के निर्माण का आदेश देता है लेकिन वह एपीके पैकगर सर्वर के बिना नहीं चल रहा है।
विशाल छौड़वानी

1
यह काम करने वाला नहीं है, क्योंकि इसके लिए एक देव सर्वर की आवश्यकता होती है
शेरिफ_पॉल

1
डिबग-एपीके को जेनरेट करने के दौरान मुझे यही समस्या होती है, मैं इसे इंस्टॉल कर सकता हूं, लेकिन मुझे देव सर्वर की आवश्यकता है, और जब मैं रिलीज एपीके का उपयोग करता हूं, तो मैं इसे अपने फोन पर इंस्टॉल नहीं कर सकता, मुझे नहीं पता कि क्या है इसके साथ गलत है
aName

62

नवीनतम अद्यतन

अपने रूट प्रोजेक्ट डायरेक्टरी में

सुनिश्चित करें कि आपके पास पहले से ही निर्देशिका एंड्रॉइड / ऐप / src / मुख्य / संपत्ति / है , यदि निर्देशिका नहीं बनाते हैं, तो उसके बाद नई फ़ाइल बनाएं index.android.bundleऔर अपनी फ़ाइल को इस Android / ऐप / src / main / आस्तियों / index.android की तरह सहेजें और रखें .bundle

इसके बाद इसे चलाएं

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

फिर आप ऐप / बिल्ड / आउटपुट / एपीके / डीबग / ऐप-डीबग.पेकapk में प्राप्त कर सकते हैं


यह उत्तर वास्तव में काम कर रहा है, बहुत-बहुत धन्यवाद,
२१:२१ बजे नाम ११'१

यह उत्तर वास्तव में काम कर रहा है, बहुत-बहुत धन्यवाद,
२१:२१ बजे नाम ११'१

@ संजीव: प्रतिक्रिया के विकास सर्वर पर एप्लिकेशन को वापस कैसे कनेक्ट किया जाए?
मयूर बलधा

वह बिंदु जो index.android.bundleहोस्ट में विकास सर्वर का उपयोग नहीं करने के लिए वास्तव में महत्वपूर्ण है।
ली एल्टन

@ मयूर बाल्हा: आप usb या wifi (एक ही नेटवर्क से जुड़े) के माध्यम से वापस कनेक्ट कर सकते हैं। वाईफाई के लिए अपनी प्रतिक्रिया ऐप में सर्वर से कनेक्ट करें अपने मोबाइल को एमुलेटर प्रेस पर हिलाएं विन + आर फिर देव सेटिंग्स पर क्लिक करें नीचे स्क्रॉल करें "डीबग सर्वर होस्ट और पोर्ट" अपना आईपी पता और पोर्ट दर्ज करें (विंडोज़ पर खुले cmd "ipconfig" या मैक ओपन दर्ज करें टर्मिनल 192.168.1.1:8080 की तरह "ifconfig" दर्ज करें, फिर ओके शेक दबाएं या एमुलेटर प्रेस रीलोड के लिए विन + आर दबाएं अब आप ऐप को वापस डिवेलपमेंट से कनेक्ट कर सकते हैं (यह केवल डीबग के लिए काम करेगा, रिलीज एपक के लिए नहीं)।
जीव

29

मेरे साथ, प्रोजेक्ट डायरेक्टरी में निम्नलिखित कमांड्स चलाते हैं।

देशी पुराने संस्करण पर प्रतिक्रिया करने के लिए (आप इंडेक्स को देख पाएंगे। मूल में jj):

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

मूल नए संस्करण पर प्रतिक्रिया के लिए (आप रूट में सिर्फ index.js देखें):

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

Apk फ़ाइल यहां पर जेनरेट की जाएगी:

  • ग्रेड <3.0: एंड्रॉइड / ऐप / बिल्ड / आउटपुट / APK /
  • ग्रेड 3.0+: एंड्रॉइड / ऐप / बिल्ड / आउटपुट / एपीके / रिलीज़ /

क्या आप कृपया थोड़ा विस्तार कर सकते हैं और यह समस्या को हल कैसे करता है?
प्रियाल

मुझे index.android.bundle में खोलने में त्रुटि हो रही थी, और आपके सुझाव से इसे हल कर दिया। धन्यवाद ... :)
zephyr

6
मेरे लिए यह है$ 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
आरिफ

फ़ाइल नहीं मिली: किसी भी परियोजना की जड़ों में index.android.js
अनुज

1
ध्यान दें कि नए प्रोजेक्टों के --entry-file index.android.jsसाथ बदलने की आवश्यकता है --entry-file index.jsजो कि उनके प्रोजेक्ट डायरेक्टरी के रूट के index.jsबजाय हैं index.android.js
डेका

8

पहली प्रतिक्रिया का पालन करने के बाद , आप अपने ऐप का उपयोग करके चला सकते हैं

react-native run-android --variant=debug

और आपका ऐप पैकर के लिए बिना जरूरत के चलेगा


1
सबसे सरल उत्तर सबसे अधिक कुशल था, यह निर्दोष काम करता था, विभिन्न कमांड लाइनों और जेएस विन्यासों के टन का परीक्षण करने में दिन बिताता था, और इसमें सब कुछ फिर से शुरू किया गया था
निकोलस सिल्वा

4

प्रतिक्रिया-मूल 0.57 के अनुसार, पहले दिए गए उत्तरों में से कोई भी अब और काम नहीं करेगा, क्योंकि निर्देशिका जिसमें बंडल को खोजने की उम्मीद है और संपत्ति बदल गई है।

प्रतिक्रिया-मूल बंडल के बिना सरल तरीका

डिबग बिल्ड बनाने का सबसे सरल तरीका react-native bundleकमांड का उपयोग किए बिना है , लेकिन केवल आपकी app/build.gradleफ़ाइल को संशोधित करके ।

फ़ाइल project.ext.reactमें मानचित्र के अंदर app/build.gradle, bundleInDebug: trueप्रविष्टि जोड़ें । यदि आप चाहते हैं कि यह --devबिल्ड (कोई चेतावनी और छोटा बंडल) न हो, तो आपको devDisabledInDebug: trueउसी नक्शे में प्रविष्टि भी जोड़ना चाहिए ।

प्रतिक्रिया-मूल बंडल के साथ

यदि किसी कारण से आपको react-native bundleबंडल बनाने के लिए कमांड का उपयोग करना है या करना है, तो बंडल के ./gradlew assembleDebugसाथ एपीके बनाने के लिए और उन परिसंपत्तियों के लिए जिन्हें आपने बंडल और संपत्तियों को सही रास्तों पर रखना सुनिश्चित किया है, जहां ग्रेडल कर सकते हैं उनको ढूंढो।

प्रतिक्रिया-मूल 0.57 के रूप में वे रास्ते android/app/build/generated/assets/react/debug/index.android.jsबंडल के लिए हैं

और android/app/build/generated/res/react/debugसंपत्ति के लिए। तो मैन्युअल रूप से बंडल बनाने और एपीके को बंडल और संपत्ति बनाने के लिए पूर्ण आदेश हैं:

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

और फिर

./gradlew assembleDebug

बंडल और संपत्ति पथ

ध्यान दें कि वे रास्ते जहां पर बंडल को ढूंढता है और संपत्ति परिवर्तन के अधीन हो सकती है। यह पता लगाने के लिए कि वे रास्ते कहाँ हैं, react.gradleअपनी node_modules/react-nativeनिर्देशिका में फ़ाइल देखें । लाइनों के साथ शुरू def jsBundleDir =और def resourcesDir =जहां बंडल के लिए Gradle दिखता है और संपत्ति क्रमश निर्देशिकाओं को निर्दिष्ट।


3

विंडोज उपयोगकर्ता के लिए अगर सभी चरणों का ठीक से पालन किया जाता है: https://facebook.github.io/react-native/docs/signed-apk-android.html

आपको केवल चलाने की आवश्यकता है: gradlew assembleRelease

और आपकी फ़ाइल होगी:

  • एप्लिकेशन-release.apk
  • एप्लिकेशन रिलीज-unaligned.apk

स्थान: E:\YourProjectName\android\app\build\outputs\apk


आप ऐप-रिलीज़-ऐप को किसी भी डिवाइस पर इंस्टॉल / साझा कर सकते हैं
धरम माली

2
आमतौर पर, डिबग बिल्ड में रिलीज़ बिल्ड की तुलना में एक अलग कॉन्फ़िगरेशन होता है (उदाहरण के लिए यह स्टेजिंग एपीआई का उपयोग करता है)। यह मदद नहीं करता है यदि आप एक स्टैंडअलोन एपीके चाहते हैं जो रिलीज से अलग बिल्ड कॉन्फ़िगरेशन का उपयोग करता है
जोश

यह APK सिर्फ विकास / परीक्षण उद्देश्य के लिए है।
धर्म माली

3

मैं मूल निवासी 0.55.4 पर प्रतिक्रिया कर रहा हूं, मूल रूप से मुझे मैन्युअल रूप से बंडल करना था:

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

फिर अपने डिवाइस को यूएसबी के माध्यम से कनेक्ट करें, यूएसबी डिबगिंग को सक्षम करें। के साथ जुड़े डिवाइस को सत्यापित करें adb devices

अंतिम रूप से चलाएं react-native run-androidजो आपके फोन पर डीबग एपीके को स्थापित करेगा और आप इसे देव सर्वर से ठीक से चला सकते हैं

ध्यान दें:

  • 0.49.0 से, प्रविष्टि बिंदु एकल है index.js
  • gradlew assembleRelease केवल रिलीज़-अहस्ताक्षरित एप उत्पन्न करता है जिसे स्थापित नहीं किया जा सकता है

3

परीक्षण उद्देश्य के लिए अहस्ताक्षरित APK संस्करण उत्पन्न करना संभव हो सकता है ताकि आप अपने मोबाइल पर चला सकें।

प्रारंभ में मुझे लाल स्क्रीन त्रुटियां मिलीं, जैसा कि यहां बताया गया है। लेकिन मैंने उसी का अनुसरण किया जिसका यहां उल्लेख किया गया था और इसने मेरे लिए काम किया।

कार्य निर्देशिका से आपके कंसोल पर, इन चार आदेशों को चलाएँ

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

और फिर एपीके फ़ाइल का उत्पादन होगा: android \ app \ build \ outputs \ apk \ debug \ app-debug.apk


3

यदि कोई व्यक्ति हाल ही में इसी मुद्दे पर आ रहा है, तो मैं रिएक्ट नेटिव 0.59.8 (साथ ही आरएन 0.60 के साथ परीक्षण किया गया है) का उपयोग कर रहा हूं और मैं कुछ अन्य उत्तरों की पुष्टि कर सकता हूं, यहां चरण दिए गए हैं:

  1. अपने डिवाइस पर आपके द्वारा इंस्टॉल किए गए ऐप के नवीनतम संकलित संस्करण को अनइंस्टॉल करें

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

  4. अपने ऐप-डिबग.पैक को फ़ोल्डर एंड्रॉइड / ऐप / बिल्ड / आउटपुट / एपीके / डीबग में प्राप्त करें

सौभाग्य!


1
काम नहीं करता है !!!, यह डिबग
एपीके

यह प्रतिक्रिया-देशी 0.59.8 में काम नहीं कर सकता, क्योंकि ग्रेडेल को बंडल में होने की उम्मीद है android/app/build/generated/assets/react/debug/index.android.jsandroid/app/build/generated/res/react/debug अभिक्रिया देशी 0.57 के रूप में होनी चाहिए और परिसंपत्तियाँ होनी चाहिए ।
बजाज

ठीक काम करता है प्रतिक्रिया के लिए देशी 0.60>
Moso Akinyemi

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.