สร้างและติดตั้ง apk ที่ไม่ได้ลงชื่อบนอุปกรณ์โดยไม่มีเซิร์ฟเวอร์การพัฒนาหรือไม่


166

ฉันเป็นคนใหม่ในภาษาพื้นเมืองดังนั้นถ้ามีอะไรผิดปกติในขั้นตอนแจ้งให้ฉันทราบ

ฉันได้สร้างแอป Android แบบโต้ตอบโดยใช้คำสั่งตามเอกสาร

Android ตอบสนองพื้นเมือง

ขณะที่รันบนอุปกรณ์จะใช้คำสั่งต่อไปนี้

react-native run-android

ซึ่งให้ผลลัพธ์ของไฟล์ apk 2 ไฟล์ในprojectfolder / android / app / build / outputs / apk ของฉัน

ป้อนคำอธิบายรูปภาพที่นี่

ตอนนี้เมื่อฉันใช้เพื่อติดตั้ง apk นี้หลังจากการติดตั้งก็ขอให้เซิร์ฟเวอร์การพัฒนาเชื่อมต่อกับบันเดิล JS แต่ความต้องการของฉันคือผู้ใช้ไม่ต้องต่อสู้กับเซิร์ฟเวอร์การพัฒนาเพียงแค่เขาต้องติดตั้ง apk และทำทุกอย่างเสร็จแล้ว

ได้อ่านคำถามเกี่ยวกับสแต็คโอเวอร์โฟลว์แล้วแต่ไม่มีประโยชน์ในการสร้าง apk ที่ไม่ได้ลงชื่อซึ่งไม่ต้องการเซิร์ฟเวอร์การพัฒนา

พวกคุณช่วยฉันค้นหาวิธีที่จะสร้างและไม่ได้ลงนาม apk ในการตอบโต้พื้นเมืองได้ไหม?


1
เรียกใช้ 'เริ่มการตอบสนองดั้งเดิม' ซึ่งจะทำให้เซิร์ฟเวอร์ js บันเดิลของคุณอยู่ในโหมดการพัฒนา จุดประสงค์คือเพื่อให้คุณสามารถแก้ไขไฟล์ js ได้ทันที ใช้โหมดการเปิดตัวไม่จำเป็นต้องมีเซิร์ฟเวอร์ใด ๆ เพราะมันจะรวมบันเดิลที่จำเป็นไว้ด้วย ดูคำตอบด้านล่าง
kar

คำตอบ:


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

จากนั้นเพื่อสร้าง APK หลังจากรวมกลุ่ม:

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

PS อีกวิธีหนึ่งอาจจะแก้ไขสคริปต์การไล่ระดับสี


3
ในกรณีที่มีใครบางคนขาดทรัพย์สิน: สิ่งนี้ใช้ได้กับฉัน--assets-dest ./android/app/src/main/res/
Juan Solano

11
และหากทำสิ่งนี้จะทำให้ฉันมีหน้าจอสีแดงขนาดใหญ่เมื่อฉันเริ่มแอพ (หมายเหตุ: ฉันทำงานนี้โดยตรงหลังจากดีดออก)
Simon Forsberg

3
วิธีสร้างบิลด์สำหรับเวอร์ชันล่าสุดเพราะเราไม่ได้ทำ index.android.js?
Vivek

9
ผู้ที่มีเวอร์ชั่นล่าสุดโปรดเปลี่ยนจุดเริ่มต้นเป็น --entry-file index.js ขอบคุณ
Rishabh Bhatia

4
กำปฏิกิริยาตอบสนองพื้นเมือง - เดฟเท็จ - แพลตฟอร์ม Android - ผู้ร่วมงานไฟล์ index.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle - ชุด - ปลายทาง / android / app / build / intermediates / res / ผสาน / debug สำหรับรุ่น reactnative ใหม่ที่ index.js เป็นปึกแผ่นสำหรับ iOS และ Android
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

สร้าง apk debug

cd android/
./gradlew assembleDebug

จากนั้นคุณสามารถหา apk ของคุณได้ที่นี่:

cd app/build/outputs/apk/

11
และหากทำสิ่งนี้จะทำให้ฉันมีหน้าจอสีแดงขนาดใหญ่เมื่อฉันเริ่มแอพ (หมายเหตุ: ฉันทำงานนี้โดยตรงหลังจากดีดออก)
Simon Forsberg

2
@SimonForsberg หากคุณใช้การตอบสนอง ^ 0.5 ให้เปลี่ยน entry point เป็น index.js แทน App.js หรือ 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
ไม่ทำงานคำสั่งนี้สร้าง apk แต่ apk นั้นไม่ได้ทำงานหากไม่มีเซิร์ฟเวอร์แพ็คเกอร์
Vishal Chhodwani

1
สิ่งนี้จะไม่ทำงานเพราะต้องใช้เซิร์ฟเวอร์ dev
sheriff_paul

1
ฉันมีปัญหาเดียวกันเมื่อสร้าง debug-APK ฉันสามารถติดตั้งได้ แต่ฉันต้องการเซิร์ฟเวอร์ dev และเมื่อฉันใช้ APK ที่เผยแพร่ฉันไม่สามารถติดตั้งลงในโทรศัพท์ได้ฉันไม่รู้ว่าอะไร มันผิดกับ
aName

62

ปรับปรุงล่าสุด

ในไดเรกทอรีโครงการรากของคุณ

ตรวจสอบให้แน่ใจว่าคุณมีไดเรกทอรีandroid / app / src / main / assets /แล้วถ้าไม่สร้างไดเรกทอรีหลังจากนั้นให้สร้างไฟล์ใหม่และบันทึกเป็นindex.android.bundleและวางไฟล์ของคุณในรูปแบบนี้android / app / src / main / assets / 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เข้าไปที่app / build / outputs / apk / debug / app-debug.apk


คำตอบนี้เป็นจริงการทำงานขอขอบคุณมาก
ANAME

คำตอบนี้เป็นจริงการทำงานขอขอบคุณมาก
ANAME

@jeeva: วิธีการเชื่อมต่อแอปพลิเคชันกลับไปยังเซิร์ฟเวอร์การพัฒนาของการตอบสนองพื้นเมือง?
Mayur Baldha

จุดที่สร้างขึ้นindex.android.bundleนั้นสำคัญมากสำหรับการไม่ใช้เซิร์ฟเวอร์การพัฒนาในโฮสต์
ลีเอลตัน

@ Mayur Balha: คุณสามารถเชื่อมต่อกลับผ่าน usb หรือ wifi (เชื่อมต่อกับเครือข่ายเดียวกัน) สำหรับ WiFi เชื่อมต่อกลับไปยังเซิร์ฟเวอร์ในแอปตอบสนองของคุณเขย่ามือถือของคุณบน emulator กด Win + R แล้วคลิกการตั้งค่า dev เลื่อนลง "Debug Server Host & Port" ป้อนที่อยู่ IP และพอร์ตของคุณ (ใน windows open cmd enter "ipconfig" หรือ Mac open เทอร์มินัลป้อน "ifconfig") เช่น 192.168.1.1:8080 จากนั้นกดตกลงอีกครั้งเขย่าหรือกด Win + R สำหรับ emulator กดโหลดตอนนี้คุณสามารถเห็นแอปเชื่อมต่อกลับไปสู่การพัฒนา (มันจะทำงานเฉพาะสำหรับ Debug ไม่ใช่สำหรับ Release Apk)
Jeeva

29

กับฉันในไดเรกทอรีโครงการเรียกใช้คำสั่งต่อไปนี้

สำหรับรุ่นเก่าที่ตอบสนองต่อพื้นเมือง (คุณจะเห็น index.android.js ในรูท):

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 จะถูกสร้างขึ้นที่:

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

คุณช่วยอธิบายเพิ่มเติมหน่อยได้ไหมและมันแก้ปัญหาได้อย่างไร?
Priyal

ฉันได้รับข้อผิดพลาดในการเปิดใน 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
Arif

ไม่พบไฟล์: index.android.js ในรูทโครงการใด ๆ
Anuj

1
โปรดทราบว่า--entry-file index.android.jsจะต้องมีการแทนที่ด้วย--entry-file index.jsสำหรับโครงการใหม่ที่มีindex.jsแทนที่จะเป็นindex.android.jsในรากของไดเรกทอรีโครงการของพวกเขา
daka

8

หลังจากที่คุณทำตามคำตอบแรกคุณสามารถเรียกใช้แอปของคุณโดยใช้

react-native run-android --variant=debug

และแอปของคุณจะทำงานโดยไม่ต้องใช้ตัวแบ่งบรรจุ


1
คำตอบที่ง่ายที่สุดคือมีประสิทธิภาพมากที่สุดตลอดมันทำงานได้อย่างไร้ที่ติใช้เวลาหลายวันในการทดสอบบรรทัดคำสั่งที่แตกต่างกันและการกำหนดค่า js จำนวนมากและทุกอย่างกลับมาทำงานในสิ่งนี้
Nicolas Silva

4

ในฐานะที่เป็นเจ้าของภาษาตอบโต้ 0.57 คำตอบที่ให้ไว้ก่อนหน้านี้จะไม่ทำงานอีกต่อไปเนื่องจากไดเรกทอรีที่ gradle คาดว่าจะพบกลุ่มและสินทรัพย์มีการเปลี่ยนแปลง

วิธีง่ายๆโดยไม่ต้องมีบันทีกแบบตอบสนองพื้นเมือง

วิธีที่ง่ายที่สุดในการสร้างบิลด์การดีบักคือโดยไม่ต้องใช้react-native bundleคำสั่งเลย แต่เพียงแก้ไขapp/build.gradleไฟล์ของคุณ

ภายในproject.ext.reactแผนที่ในapp/build.gradleไฟล์เพิ่มbundleInDebug: trueรายการ หากคุณต้องการให้มันไม่ใช่--devบิลด์ (ไม่มีคำเตือนและบันเดิลแบบย่อ) คุณควรเพิ่มdevDisabledInDebug: trueรายการลงในแผนที่เดียวกัน

ด้วยชุดตอบสนองพื้นเมือง

หากมีเหตุผลบางอย่างที่คุณต้องการหรือต้องการใช้react-native bundleคำสั่งเพื่อสร้างบันเดิลและจากนั้น./gradlew assembleDebugเพื่อสร้าง APK ด้วยบันเดิลและสินทรัพย์ที่คุณต้องทำให้แน่ใจว่าใส่บันเดิลและสินทรัพย์ในเส้นทางที่ถูกต้องซึ่ง gradle สามารถ หาพวกเขา.

ในฐานะที่เป็นปฏิกิริยาตอบสนองพื้นเมือง 0.57 เส้นทางเหล่านั้น android/app/build/generated/assets/react/debug/index.android.jsสำหรับมัด

และandroid/app/build/generated/res/react/debugสำหรับสินทรัพย์ ดังนั้นคำสั่งเต็มรูปแบบสำหรับการรวมกลุ่มด้วยตนเองและการสร้าง APK ด้วยบันเดิลและสินทรัพย์คือ:

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

เส้นทางบันเดิลและสินทรัพย์

โปรดทราบว่าเส้นทางที่ gradle ค้นหาบันเดิลและเนื้อหาอาจมีการเปลี่ยนแปลง หากต้องการค้นหาเส้นทางเหล่านั้นให้ดูที่react.gradleไฟล์ในnode_modules/react-nativeไดเรกทอรีของคุณ บรรทัดที่ขึ้นต้นด้วยdef jsBundleDir =และdef resourcesDir =ระบุไดเรกทอรีที่ gradle ค้นหาบันเดิลและสินทรัพย์ตามลำดับ


3

สำหรับผู้ใช้ Windows หากทำตามขั้นตอนทั้งหมดอย่างถูกต้องจาก: https://facebook.github.io/react-native/docs/signed-apk-android.html

คุณต้องเรียกใช้เท่านั้น: gradlew assembleRelease

และไฟล์ของคุณจะเป็น:

  • แอปพลิเค release.apk
  • แอปพลิเคปล่อย unaligned.apk

สถานที่ตั้ง: E:\YourProjectName\android\app\build\outputs\apk


คุณสามารถติดตั้ง / แชร์ app-release.apk ไปยังอุปกรณ์ใดก็ได้
Dharam Mali

2
โดยปกติ debug build จะมีการกำหนดค่าที่แตกต่างจาก build build (เช่นใช้ staging API) สิ่งนี้จะไม่ช่วยถ้าคุณต้องการ APK แบบสแตนด์อโลนที่ใช้การกำหนดค่า
Josh

APK นี้มีวัตถุประสงค์เพื่อการพัฒนา / ทดสอบ
Dharam Mali

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

จากนั้นเชื่อมต่ออุปกรณ์ของคุณผ่าน usb เปิดใช้งานการดีบัก usb adb devicesตรวจสอบอุปกรณ์ที่เชื่อมต่อกับ

วิ่งครั้งสุดท้าย react-native run-androidซึ่งจะติดตั้ง debug apk บนโทรศัพท์ของคุณและคุณสามารถเรียกใช้ได้กับเซิร์ฟเวอร์ dev

บันทึก:

  • จาก 0.49.0 จุดเข้าใช้งานเป็นจุดเดียว index.js
  • gradlew assembleRelease สร้าง apks ที่ไม่ได้รับการลงนามเท่านั้นซึ่งไม่สามารถติดตั้งได้

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

จากนั้นไฟล์ APK จะสร้างขึ้นบน: android \ app \ build \ outputs \ apk \ debug \ app-debug.apk


3

ในกรณีที่คนอื่นกำลังประสบปัญหาเดียวกันนี้เมื่อเร็ว ๆ นี้ฉันใช้ React Native 0.59.8 (ทดสอบด้วย RN 0.60 เช่นกัน) และฉันสามารถยืนยันคำตอบอื่น ๆ ได้บางส่วนนี่คือขั้นตอน:

  1. ถอนการติดตั้งแอพที่รวบรวมรุ่นล่าสุดที่ติดตั้งในอุปกรณ์ของคุณ

  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

  3. วิ่ง cd android/ && ./gradlew assembleDebug

  4. รับ app-debug.apk ของคุณในโฟลเดอร์ android / app / build / outputs / apk / debug

โชคดี!


1
ใช้งานไม่ได้ !!! มันสร้าง debug APK แต่แอปยังคงต้องการเซิร์ฟเวอร์ dev
aName

สิ่งนี้ไม่สามารถทำงานในปฏิกิริยาตอบสนอง 0.59.8 เนื่องจาก gradle คาดว่ามัดจะอยู่ในandroid/app/build/generated/assets/react/debug/index.android.jsและสินทรัพย์จะอยู่ในandroid/app/build/generated/res/react/debugรูปของปฏิกิริยาตอบสนองพื้นเมือง 0.57
TheBaj

ทำงานได้ดีสำหรับการตอบสนองพื้นเมือง 0.60>
Moso Akinyemi

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.