मैं एक APK कैसे बना सकता हूं जो प्रतिक्रिया-मूल वाले सर्वर के बिना चल सकती है?


210

मैंने अपना ऐप बनाया है, मैं इसे अपने स्थानीय एमुलेटर पर चला सकता हूं (और डिबग सर्वर को बदलकर उसी नेटवर्क के भीतर अपने एंड्रॉइड डिवाइस पर भी)।

हालांकि, मैं एक एपीके का निर्माण करना चाहता हूं जिसे मैं विकास सर्वर तक पहुंच के बिना किसी को भेज सकता हूं और मैं चाहता हूं कि वे एप्लिकेशन का परीक्षण करने में सक्षम हों।

मैं देखता हूं कि प्रलेखन के iOS अनुभाग पर ऑफ़लाइन बंडल का उपयोग करने वाला एक अनुभाग है। लेकिन मैं यह पता नहीं लगा सका कि एंड्रॉइड के लिए समान कैसे पूरा करें। क्या यह संभव है? यदि हां, तो कैसे?

अद्यतन: इस प्रश्न के उत्तर पर ( एंड्रॉइड जेएस बंडल को लोड करने में विफल रहा ) यह कहा जाता है कि ऑफ़लाइन बंडल को विकास सर्वर से डाउनलोड किया जा सकता है। लेकिन जब मैं विकास सर्वर से बंडल प्राप्त करता हूं तो छवि फ़ाइलों को लोड नहीं किया जा सकता है।


जवाबों:


202

आदित्य सिंह के जवाब के बाद उत्पन्न (अहस्ताक्षरित) apk मेरे फोन पर स्थापित नहीं होगा। मुझे यहाँ निर्देशों का उपयोग करके एक हस्ताक्षरित एपीके जनरेट करना था ।

निम्नलिखित ने मेरे लिए काम किया:

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

जगह my-release-key.keystoreके तहत फ़ाइल android/app निर्देशिका अपनी परियोजना फ़ोल्डर में। फिर फ़ाइल को संपादित करें ~/.gradle/gradle.propertiesऔर निम्नलिखित जोड़ें (**** को सही कीस्टोर पासवर्ड, उपनाम और कुंजी पासवर्ड से बदलें)

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

यदि आप MacOS का उपयोग कर रहे हैं, तो आप अपने पासवर्ड को चाबी के सहारे स्टोर में रख सकते हैं, इसे प्लेटेक्स्ट में स्टोर करने के बजाय यहाँ दिए गए निर्देशों का उपयोग कर सकते हैं ।

फिर एप्लिकेशन / build.gradle संपादित करें और यह सुनिश्चित करें कि निम्नलिखित हैं (साइन इन करने वाले अनुभाग साइन इन करने के लिए कॉनफिग को जोड़ने की आवश्यकता हो सकती है):

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

फिर कमांड चलाएं cd android && ./gradlew assembleRelease,

विंडोज 'सीडी एंड्रॉइड' के लिए और फिर gradlew assembleReleaseकमांड चलाएं , और अपना हस्ताक्षरित एपीके के तहत खोजेंandroid/app/build/outputs/apk/app-release.apk


10
यह सबसे अद्यतित और सटीक उत्तर है। धन्यवाद।
गोखान साड़ी

2
app-release.apk इंस्टॉल नहीं हो रहा है। मुद्दा क्या होगा?
बालासुब्रमण्यम

1
मैं एपीके बनाता हूं, Google Play पर अपलोड करता हूं, लेकिन यह काम नहीं कर रहा है ... कुछ संकेत?
इटालो रोड्रिगो

2
मुझे Android / ऐप फ़ोल्डर नहीं मिल रहा है, यह कहाँ स्थित है?
डीएचएलोपेज़

6
धन्यवाद, यह नहीं था, लेकिन मैंने पाया कि यह इसलिए था क्योंकि मैं परीक्षण के लिए एक्सपो का उपयोग कर रहा हूं, और नेटिव एप्लिकेशन बनाने के लिए एक अलग संरचना है, इसलिए भविष्य में संदर्भ के लिए, अगर किसी को भी यह समस्या आती है, तो बस अपनी परियोजना को अस्वीकार कर दें और फिर आप प्राप्त करें उन फ़ोल्डरों, अजीब बात है कि ट्यूटोरियल आपको ऐप बनाने के लिए npm का उपयोग करने के लिए कैसे कहता है, और फिर एक संरचना के बारे में बात करता है जो आपके उपयोग करने पर मौजूद नहीं है
DHLopez

193

एपीके पर हस्ताक्षर करने के लिए आपको एक कुंजी बनानी होगी। अपनी कुंजी बनाने के लिए नीचे का उपयोग करें:

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

संकेत दिए जाने पर पासवर्ड का उपयोग करें

एक बार कुंजी उत्पन्न होने के बाद, इसका उपयोग इंस्टॉल करने योग्य बिल्ड बनाने के लिए करें:

 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 assembleRelease

अपने फोन पर एपीके अपलोड करें। -rझंडा मौजूदा ऐप्लिकेशन (यदि यह मौजूद है) का स्थान ले लेगा

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

अधिक विस्तृत विवरण यहां वर्णित है: https://facebook.github.io/react-native/docs/signed-apk-android.html

UPDATE : @shashuec और @Fallen की टिप्पणियों के आधार पर

अगर आपको त्रुटि मिलती है

ENOENT: ऐसी कोई फ़ाइल या निर्देशिका नहीं, 'android / app / src / main / आस्तियों / index.android.bundle' खोलें

mkdir android / app / src / main / आस्तियों को चलाएं


4
इसके लिए बहुत धन्यवाद, इसने मेरे लिए काम किया। एकमात्र मुद्दा जो मुझे मिला वह था यह संदेश: "मिसिंग आवश्यक तर्क: बंडल-आउटपुट" एन-रिएक्शन-देशी-बंडल भाग, लेकिन 2 "\" प्रतीकों को हटाकर हल किया गया है
guinunez

58
मैं फेसबुक के खराब दस्तावेज़ीकरण से चकित हूं जहां उन्होंने पूरी तरह से react-native bundleभाग छोड़ दिया । आपके उत्तर के लिए धन्यवाद!
टेक्नोफाइल

2
मैं खिड़कियों के साथ काम कर रहा हूं, इसके साथ gradlew.bat assembleReleaseही काम करता हूं ।
ताबरेस

12
मुझे यह त्रुटि मिलती है Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES] । जब मैं एपीके इंस्टॉल करने की कोशिश करता हूं।
विकसित

18
अगर आपको एरर ENOENT: no such file or directory, open 'android/app/src/main/assets/index.android.bundle' रन मिलता हैmkdir android/app/src/main/assets
shashuec

31

आपको इस प्रक्रिया के लिए बस एंड्रॉइड स्टूडियो का उपयोग करना चाहिए। यह सिर्फ सरल है। लेकिन पहले अपनी प्रतिक्रिया मूल एप्लिकेशन निर्देशिका में इस कमांड को चलाएं:

प्रतिक्रिया-मूल के नए संस्करण के लिए (उदाहरण के लिए देशी 0.49.0 और इतने पर प्रतिक्रिया करें ...)

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.0 और नीचे)

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/

फिर आप में 'एंड्रॉइड' फ़ोल्डर खोलने के लिए एंड्रॉइड स्टूडियो का उपयोग करें देशी एप्लिकेशन निर्देशिका पर प्रतिक्रिया करें, यह ग्रेड और कुछ अन्य सामान को अपग्रेड करने के लिए कहेंगे। निर्माण पर जाएं-> साइन किए गए एपीके को जनरेट करें और वहां से निर्देशों का पालन करें। यह वास्तव में सीधे आगे है।


मैं अपने रिएक्टिव नेटिव ऐप्स के लिए रिलीज़ संस्करण बनाने के लिए एंड्रॉइड स्टूडियो और Xcode का भी उपयोग करता हूं ... लेकिन एंड्रॉइड पीढ़ी को स्क्रिप्ट के साथ किया जा सकता है जैसा कि @ आदित्य सिंह द्वारा वर्णित है
WiRa

यह अब जरूरत नहीं है proandroiddev.com/ ...
onmyway133

30

यह आदेश चलाएँ:

react-native run-android --variant=release

ध्यान दें कि --variant=releaseअगर आपने साइन अप किया है तो ही उपलब्ध है cd android && ./gradlew assembleRelease


@ अंजान मुझे यहाँ आप की तरह एक और मुद्दा मिला: github.com/facebook/react-native/issues/11586 यह मुद्दा ठीक कर सकता है: cd android &&/gradlew installRelease
Ahmed Ashraf

मैंने कोशिश की cd android && ./gradlew installReleaseऔर यह त्रुटि मिलीTask 'assembleRelease.' not found in root project 'project'. Some candidates are: 'assembleRelease'.
थॉमसरेजी

हां, आपको कीस्टोर फाइल जनरेट करनी होगी। और इस समस्या को ठीक करने के लिए उन निर्देशों को बदलें। facebook.github.io/react-native/docs/signed-apk-android.html
अहमद अशरफ

21

रिएक्टिव नेटिव 0.49 और ओवर के लिए

आपको टर्मिनल पर प्रोजेक्ट डायरेक्टरी में जाना चाहिए और उस कमांड को चलाना चाहिए

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 से कम है

  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

फिर आप में 'एंड्रॉइड' फ़ोल्डर खोलने के लिए एंड्रॉइड स्टूडियो का उपयोग करें देशी एप्लिकेशन निर्देशिका पर प्रतिक्रिया करें, यह उन्नयन और कुछ अन्य सामान को अपग्रेड करने के लिए कहेंगे। निर्माण पर जाएं-> साइन किए गए एपीके को जनरेट करें और वहां से निर्देशों का पालन करें। वह ओके।


यह करने का एक आसान तरीका है यदि आपके पास एंड्रॉइड स्टूडियो स्थापित है (जो कि कीस्टोर का उपयोग करने या बनाने का ध्यान रखेगा)। धन्यवाद।
लीओसोक

अरे .. एक त्वरित प्रश्न है .. क्या उपरोक्त चरणों की आवश्यकता है? देशी
डॉक्यूमेंट में

1
@ यह आवश्यक नहीं है, यह जेनरेट एपीके की विधि में से एक है।
यासीन उगुरलू

12

आप मिलता है Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]

मैंने अहस्ताक्षरित एपीके फ़ाइल बनाने और स्थापित करने के लिए @ आदित्य के तरीके का उपयोग करने की कोशिश की, लेकिन जब मैं इसे अपने एंड्रॉइड टैबलेट पर स्थापित करने के लिए गया, तो इसने मुझे एक त्रुटि दी Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]

मुझे इसकी कल्पना है क्योंकि एपीके फ़ाइल पर हस्ताक्षर नहीं किए गए थे और टैबलेट इससे खुश नहीं था। इसलिए, रिएक्टिव नेटिव बंडल फाइल बनाने के बाद, मैं एंड्रॉइड स्टूडियो के माध्यम से, सामान्य रूप से एक हस्ताक्षरित एपीके फ़ाइल उत्पन्न करने में सक्षम था।

वैसे, हमारा ऐप पूरी तरह से काम करने वाला एंड्रॉइड ऐप है जो पहले से ही प्ले स्टोर में मौजूद है और हम इसे काटने वाले टुकड़ों में सिर्फ रिएक्ट नेटिव जोड़ रहे हैं, क्योंकि यह कमाल का है।

इसलिए संक्षेप में, यहाँ मेरे चरण थे:

1) उत्पन्न प्रतिक्रिया मूल बंडल:

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) एंड्रॉइड स्टूडियो से एक हस्ताक्षरित एपीके फ़ाइल उत्पन्न करें।

3) यूएसबी डिवाइस के लिए हस्ताक्षरित APK फ़ाइल को स्थापित करें:

adb -d install -r <path_to_signed_apk> 

-dझंडा सिर्फ कहता है adb, USB डिवाइस संलग्न पर स्थापित करने के लिए इस घटना में आप एक एमुलेटर के साथ-साथ चल रहा है कि। यदि आप एक एमुलेटर पर स्थापित करना चाहते हैं, तो -dध्वज को छोड़ दें ।

4) लाभ!


11

नीचे कोशिश करें, यह आपके रूट / एंड्रॉइड / ऐप / बिल्ड / आउटपुट / एपीके / डीबग फ़ोल्डर पर एक ऐप-डीबग.ैप जनरेट करेगा।

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

इसके बाद android फोल्डर में जाएं और रन करें

./gradlew assembleDebug



11

अगर कोई भी बिना playstore keys के बनाना चाहता है तो यह कमांड बहुत मददगार होगा।

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

बिल्ड पूरा होने के बाद आप एपीके बिल्ड फाइल में एपीके पा सकते हैं।


7

प्रोजेक्ट डायरेक्टरी पर जाएं और कमांड चलाएँ:

cd android && ./gradlew assembleRelease

यदि आप आवश्यक कॉन्फ़िगरेशन नहीं करते हैं, तो यह एक अहस्ताक्षरित APK उत्पन्न करेगा (जैसे कि पेड्रम ने बताया)।
गोचन साड़ी

यह उत्पन्न फ़ोल्डर में डिबग, रिलीज़ और अहस्ताक्षरित एपीके बनाएगा। मेरा इरादा रिलीज़ एपीके को साझा करना था।
सिद्धार्थ तनेजा

6

यदि आपको index.android.js से एक त्रुटि मिलती है। ऐसा इसलिए है क्योंकि आप नए रिएक्ट-देशी संस्करण का उपयोग कर रहे हैं (मैं 0.55.4 का उपयोग कर रहा हूं) बस "index.android.js" को "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/

5

मेरे पास एक और उपाय है: - एक हस्ताक्षर कुंजी उत्पन्न करना आप एक निजी हस्ताक्षर कुंजी कुंजी का उपयोग करके उत्पन्न कर सकते हैं। विंडोज पर keytool 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

अपने प्रोजेक्ट फ़ोल्डर में android / app डायरेक्टरी के तहत my-release-key.keystore फाइल रखें।

अपने प्रोजेक्ट फोल्डर में फाइल android / app / build.gradle को एडिट करें और साइनिंग कॉन्फिगर जोड़ें।

android {
....
signingConfigs { 
  release { 

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

  } 
}}}


buildTypes {release {signingConfig signingConfigs.release}}

और भाग खड़ा हुआ

gradlew assembleRelease

यह आपको android \ app \ build \ outputs \ apk ऐप-रिलीज़.पेक और ऐप-रिलीज़-अहस्ताक्षरित दो फ़ाइलें देगा। अब अपने Android डिवाइस में ऐप-release.apk स्थापित करें।


Android \ app फ़ोल्डर कहाँ है? मैं इसे अपनी परियोजना के तहत नहीं देखता (मैं केवल नोड_मॉड्यूल्स देखता हूं, और इसके अंदर, कोई एंड्रॉइड / ऐप नहीं है)
डीएचएलोपेज़

1
@DHLopez आपको एंड्रॉइड फोल्डर तक पहुंचने के लिए शुद्ध रिएक्टिव नेटिव प्रोजेक्ट का उपयोग करना होगा। यदि आप एक्सपो का उपयोग कर रहे हैं, तो आपको एक्सपो इजेक्ट का उपयोग करके एक्सपो प्रोजेक्ट को अलग करना होगा।
fxbayuanggara

5

उम्मीद है कि यह नए शुरुआती लोगों की मदद करेगा

आधिकारिक डॉक्टर यहां

यदि आपके पास उपयोग करने की तुलना में कीस्टोर नहीं है तो कमांड को छोड़ दें

साइनिंग कुंजी / कीस्टोर फ़ाइल बनाना आप कीटल का उपयोग करके एक निजी साइनिंग कुंजी उत्पन्न कर सकते हैं। विंडोज पर keytool 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

आपको एक फाइल मिलेगी मेरी-रिलीज़-कुंजी.कीस्टोर जाएगी

ग्रेडिएबल वैरिएबल सेट करना मेरे प्रोजेक्ट फ़ोल्डर में android / app डायरेक्टरी के तहत my-release-key.keystore फाइल रखें। Android / gradle.properties फ़ाइल को संपादित करें और निम्नलिखित जोड़ें (सही कीस्ट्रोर पासवर्ड, उपनाम और कुंजी पासवर्ड के साथ ***** बदलें), enableAapt2 सेट गलत है वर्कअराउंड, एंड्रॉइड ग्रेडल संस्करण 3.0 समस्या के रूप में

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

फिर इन ऐप को जोड़ें / buid.gradle (ऐप)

डिफ़ॉल्ट कॉन्फ़िगरेशन के नीचे

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

और अंदर निर्माण प्रकार जारी {}

 signingConfig signingConfigs.release

तो बस Android स्टूडियो टर्मिनल में इस कमांड को चलाते हैं नीचे दिए गए आदेश सभी उत्तरों से ऊपर स्वचालित होंगे

अगर खिड़कियां

cd android
gradlew assembleRelease

अगर लिनक्स / मैक

$ cd android
$ ./gradlew assembleRelease

यदि आपको कोई त्रुटि मिली तो सभी बिल्ड फ़ोल्डर को हटा दें और कमांड चलाएं

gradlew clean

फिर से

gradlew assembleRelease

1
omg gradle clean... मैं कुछ समय के लिए उन लोगों के साथ संघर्ष कर रहा हूं जो उन बिल्ड त्रुटियों को प्राप्त कर रहे हैं, इस उत्तर के लिए बहुत बहुत धन्यवाद !!
nerdlinger

5

परियोजना को बंडल करने के लिए नवीनतम प्रतिक्रिया के लिए देशी संस्करण

एंड्रॉयड

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 bundle --entry-file index.js --platform ios --dev false --bundle-output ios/main.jsbundle --assets-dest ios


3

एंड्रॉइड स्टूडियो में GUI तरीका

  • एंड्रॉइड स्टूडियो में रिएक्ट नेटिव ऐप का एंड्रॉइड ऐप हिस्सा है (इसका मतलब है कि एंड्रॉइड स्टूडियो के लिए आपकी प्रतिक्रिया-मूल परियोजना का एंड्रॉइड फ़ोल्डर खोलना)
  • शीर्ष पर "बिल्ड" टैब पर जाएं
  • "बिल्ड बंडल (ओं) / एपीके (ओं) पर जाएं"
  • फिर "बिल्ड एपीके" चुनें
  • यह आपको एपीके पर हस्ताक्षर करने या अपनी चाबी बनाने के लिए आपकी चाबियों का पता लगाने की एक प्रक्रिया से गुजरेगा, यदि आपके पास पहले से ही ऐसा नहीं है, जो बहुत ही सीधा है। यदि आप अभी अभ्यास कर रहे हैं, तो आप इन कुंजियों को बना सकते हैं और उन्हें अपने डेस्कटॉप पर सहेज सकते हैं।
  • एक बार यह प्रक्रिया पूरी हो जाती है और यदि निर्माण सफल रहा, तो एंड्रॉइड स्टूडियो में नीचे एक पॉपअप होगा। इसके भीतर लिंक पर क्लिक करें जो कहता है कि "ढूंढें" (एपीके)
  • वह आपको एपीके फ़ाइल में ले जाएगा, उसे अपने Android डिवाइस पर ले जाएं। फिर एंड्रॉइड डिवाइस पर उस फ़ाइल पर नेविगेट करें और इसे इंस्टॉल करें।

0

एंड्रॉइड स्टूडियो का उपयोग करके प्रतिक्रिया के एंड्रॉइड प्रोजेक्ट के लिए एपीके एपीके को जेनरेट करना भी एक अच्छा और आसान विकल्प है, एंड्रॉइड स्टूडियो में एंड्रॉइड प्रोजेक्ट को ओपन करें और कीस्ट्रोक और हस्ताक्षरित एपीके को जेनरेट करें।


-2

जनरेट किए गए एपीके पर प्रतिक्रिया-मूल आधिकारिक दस्तावेज़ देखें

रिएक्ट-नेटिव जनरेटिंग एपीके


यह एक अच्छा जवाब नहीं है, भले ही उसने उपयोगकर्ता के प्रश्न को संबोधित किया हो जो ऐसा नहीं करता है। वे एक स्टैंडअलोन डीबग एपीके का निर्माण करना चाहते हैं, न कि एक रिलीज।
user37309
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.