Xây dựng và cài đặt apk không dấu trên thiết bị mà không cần máy chủ phát triển?


166

Vì tôi là người mới trong phản ứng bản địa nên nếu có bất cứ điều gì sai trong các bước cho tôi biết.

Tôi đã xây dựng một ứng dụng Android gốc phản ứng bằng cách sử dụng lệnh theo tài liệu

android phản ứng

Trong khi chạy trên thiết bị, lệnh sau đã được sử dụng

run-android run-android

cung cấp cho tôi đầu ra của 2 tệp apk trong tệp dự án / android / app / build / output / apk của tôi

nhập mô tả hình ảnh ở đây

Bây giờ khi tôi sử dụng để cài đặt apk này sau khi cài đặt, nó yêu cầu một máy chủ phát triển kết nối để đóng gói JS. Nhưng yêu cầu của tôi là người dùng không phải vật lộn với máy chủ phát triển chỉ cần anh ta cài đặt apk và mọi thứ đã xong.

Đã trải qua một số Câu hỏi stackoverflow nhưng không hữu ích để xây dựng apk không dấu mà không yêu cầu máy chủ phát triển.

Các bạn có thể giúp tôi tìm cách xây dựng và không dấu apk trong phản ứng bản địa không?


1
Chạy 'Reac -igen start', nó sẽ phục vụ gói js của bạn trong chế độ phát triển. Mục đích là để bạn có thể chỉnh sửa các tập tin js một cách nhanh chóng. Sử dụng chế độ phát hành không cần bất kỳ máy chủ nào vì nó sẽ bao gồm các gói cần thiết với nó. Xem câu trả lời dưới đây
kar

Câu trả lời:


249

Bạn cần phải tự tạo gói để xây dựng gỡ lỗi.

Xây dựng gói gỡ lỗi:

#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

Sau đó, để xây dựng APK sau khi đóng gói:

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

PS Một cách tiếp cận khác có thể là sửa đổi các tập lệnh gradle.


3
Trong trường hợp ai đó bị thiếu tài sản: điều này hiệu quả với tôi--assets-dest ./android/app/src/main/res/
Juan Solano

11
Và nếu làm điều này cho tôi một màn hình lớn màu đỏ khi tôi khởi động ứng dụng? (Lưu ý: Tôi đang chạy cái này trực tiếp sau khi phóng ra)
Simon Forsberg

3
Làm cách nào để tạo bản dựng cho phiên bản mới nhất vì chúng tôi không có index.android.js?
Vivek

9
Những người có phiên bản mới nhất, vui lòng thay đổi điểm nhập thành --entry-file index.js, cảm ơn.
Rishabh Bhatia

4
gói phản ứng gốc --dev false - nền tảng android --entry-file index.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-Dest. / android / app / build / trung gian / res / merged / debug cho phiên bản phản ứng mới trong đó index.js được hợp nhất cho ios và android
ir2pid

100

Hãy làm theo các bước đó.

Gói js của bạn:

nếu bạn có index.android.js trong root dự án thì hãy chạy

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

nếu bạn có index.js trong root dự án thì hãy chạy

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

Tạo apk gỡ lỗi:

cd android/
./gradlew assembleDebug

Sau đó, bạn có thể tìm thấy apk của bạn ở đây:

cd app/build/outputs/apk/

11
Và nếu làm điều này cho tôi một màn hình lớn màu đỏ khi tôi khởi động ứng dụng? (Lưu ý: Tôi đang chạy cái này trực tiếp sau khi phóng ra)
Simon Forsberg

2
@SimonForsberg nếu bạn đang sử dụng Reac ^ ^, hãy thay đổi điểm vào thành index.js thay vì App.js hoặc 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
Không hoạt động, lệnh này xây dựng apk nhưng apk đó không chạy mà không có máy chủ packager.
Vishal Chhodwani

1
Điều này sẽ không hoạt động, bởi vì nó yêu cầu một máy chủ dev
sheriff_paul

1
Tôi gặp vấn đề tương tự, khi tạo APK gỡ lỗi, tôi có thể cài đặt nó, nhưng tôi cần máy chủ dev và khi tôi sử dụng APK phát hành, tôi không thể cài đặt nó trên điện thoại của mình, tôi không biết gì là sai với nó
aName

61

Cập nhật mới nhất

Trong thư mục dự án gốc của bạn

Hãy chắc chắn rằng bạn đã có thư mục android / app / src / main / nội dung / , nếu không tạo thư mục, sau đó tạo tệp mới và lưu dưới dạng index.android.bundlevà đặt tệp của bạn vào như android / app / src / main / nội dung / index.android .bundle

Sau đó chạy nó

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

Sau đó, bạn có thể truy cập apkvào ứng dụng / bản dựng / đầu ra / apk / gỡ lỗi / ứng dụng-debug.apk


Câu trả lời này thực sự hiệu quả, cảm ơn bạn rất nhiều,
aName

Câu trả lời này thực sự hiệu quả, cảm ơn bạn rất nhiều,
aName

@jeeva: làm thế nào để kết nối ứng dụng trở lại máy chủ phát triển của phản ứng gốc?
Mayur Baldha

Điểm tạo ra index.android.bundlethực sự quan trọng đối với việc không sử dụng máy chủ phát triển trong máy chủ.
Lee Elton

@ Mayur Balha: Bạn có thể kết nối lại qua usb hoặc wifi (được kết nối trên cùng một mạng). Để WiFi kết nối trở lại máy chủ trong ứng dụng phản ứng của bạn, hãy lắc điện thoại trên trình giả lập, nhấn Win + R, sau đó nhấp vào cài đặt dev Cuộn xuống "Debug Server Host & Port" nhập địa chỉ IP và cổng của bạn (trên windows mở cmd, nhập "ipconfig" hoặc Mac open thiết bị đầu cuối nhập "ifconfig") như 192.168.1.1:8080 sau đó nhấn ok lần nữa hoặc nhấn Win + R để giả lập nhấn tải lại bây giờ bạn có thể thấy ứng dụng kết nối trở lại để phát triển (Nó sẽ chỉ hoạt động cho Debug chứ không phải cho Apk phát hành).
Jeeva

29

Với tôi, trong thư mục dự án chạy các lệnh sau.

Để phản ứng phiên bản cũ gốc (bạn sẽ thấy index.android.js trong 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 ../

Để phản ứng phiên bản mới gốc (bạn chỉ cần xem index.js trong 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 ../

Tệp apk sẽ được tạo tại:

  • Lớp <3.0: android / app / build / output / apk /
  • Lớp 3.0+: android / app / build / output / apk / release /

bạn có thể giải thích một chút và làm thế nào để giải quyết vấn đề?
Giải thưởng

Tôi đã nhận được lỗi mở trong index.android.bundle và đã giải quyết nó bằng đề xuất của bạn. Cảm ơn bạn ... :)
zephyr

6
Đối với tôi đó là$ 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

Không tìm thấy tệp: index.android.js trong bất kỳ gốc nào của dự án
Anuj

1
Lưu ý rằng --entry-file index.android.jscần phải được thay thế bằng --entry-file index.jscho các dự án mới hơn index.jsthay vì index.android.jstrong thư mục gốc của dự án.
daka

8

Sau khi bạn làm theo phản hồi đầu tiên , bạn có thể chạy ứng dụng của mình bằng cách sử dụng

react-native run-android --variant=debug

Và ứng dụng của bạn sẽ chạy mà không cần trình đóng gói


1
câu trả lời đơn giản nhất là hiệu quả nhất, nó hoạt động hoàn hảo, dành nhiều ngày để thử nghiệm các dòng lệnh khác nhau và hàng tấn cấu hình js, và mọi thứ đã được nối lại trong này
Nicolas Silva

4

Kể từ phản ứng gốc 0,57, không có câu trả lời nào được cung cấp trước đó sẽ hoạt động nữa, vì các thư mục trong đó gradle dự kiến ​​sẽ tìm thấy gói và tài sản đã thay đổi.

Cách đơn giản mà không cần bó phản ứng

Cách đơn giản nhất để xây dựng bản dựng gỡ lỗi là không sử dụng react-native bundlelệnh nào cả, mà chỉ cần sửa đổi app/build.gradletệp của bạn .

Trong project.ext.reactbản đồ trong app/build.gradletập tin, thêm bundleInDebug: truemục. Nếu bạn muốn nó không phải là bản --devdựng (không có cảnh báo và gói rút gọn) thì bạn cũng nên thêm devDisabledInDebug: truemục vào cùng một bản đồ.

Với gói phản ứng gốc

Nếu vì một lý do nào đó, bạn cần hoặc muốn sử dụng react-native bundlelệnh để tạo gói và sau đó ./gradlew assembleDebugđể tạo APK với gói và các tài sản bạn phải đảm bảo đặt gói và tài sản vào đúng đường dẫn, trong đó lớp có thể tìm họ.

Đối với phản ứng gốc 0,57, các đường dẫn android/app/build/generated/assets/react/debug/index.android.jsdành cho gói

android/app/build/generated/res/react/debugcho các tài sản. Vì vậy, các lệnh đầy đủ để đóng gói thủ công và xây dựng APK với gói và tài sản là:

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

và sau đó

./gradlew assembleDebug

Đường dẫn gói và tài sản

Lưu ý rằng các đường dẫn mà lớp tìm kiếm gói và các tài sản có thể thay đổi. Để tìm ra những đường dẫn đó ở đâu, hãy nhìn vào react.gradletệp trong node_modules/react-nativethư mục của bạn . Các dòng bắt đầu bằng def jsBundleDir =def resourcesDir =chỉ định các thư mục trong đó gradle tìm gói và tài sản tương ứng.


3

Đối với người dùng Windows nếu tất cả các bước được thực hiện đúng từ đây: https://facebook.github.io/react-native/docs/sign-apk-android.html

Bạn chỉ cần chạy: gradlew assembleRelease

Và tập tin của bạn sẽ là:

  • phát hành ứng dụng.apk
  • ứng dụng phát hành-unalign.apk

Vị trí: E:\YourProjectName\android\app\build\outputs\apk


Bạn có thể cài đặt / chia sẻ app-release.apk cho bất kỳ thiết bị nào
Dharam Mali

2
Thông thường, bản dựng gỡ lỗi có cấu hình khác với bản dựng phát hành (ví dụ: nó sử dụng API phân tầng). Điều này không hữu ích nếu bạn muốn một APK độc lập sử dụng cấu hình xây dựng khác với bản phát hành
Josh

APK này chỉ dành cho mục đích phát triển / Thử nghiệm.
Dharam Mali

3

Tôi đang phản ứng tự nhiên 0.55.4, về cơ bản tôi đã phải bó thủ công:

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

Sau đó kết nối thiết bị của bạn qua usb, bật gỡ lỗi usb. Xác nhận thiết bị được kết nối với adb devices.

Lần chạy cuối cùng react-native run-androidsẽ cài đặt apk gỡ lỗi trên điện thoại của bạn và bạn có thể chạy tốt với máy chủ dev

Ghi chú:

  • Từ 0.49.0, điểm vào là một index.js
  • gradlew assembleRelease chỉ tạo các apks không dấu phát hành không thể cài đặt

3

Có thể tạo phiên bản apk không dấu cho mục đích thử nghiệm để bạn có thể chạy trên điện thoại di động của mình.

Ban đầu tôi gặp lỗi màn hình đỏ như hầu hết được đề cập ở đây. nhưng tôi đã làm theo điều tương tự đã được đề cập ở đây và nó đã làm việc cho tôi.

Trên bảng điều khiển của bạn từ thư mục làm việc, chạy bốn lệnh này

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

Và sau đó tệp APK sẽ tạo trên: android \ app \ build \ output \ apk \ debug \ app-debug.apk


3

Chỉ trong trường hợp có người khác gần đây gặp phải vấn đề tương tự, tôi đang sử dụng React Native 0.59.8 (cũng được thử nghiệm với RN 0.60) và tôi có thể xác nhận một số câu trả lời khác, đây là các bước:

  1. Gỡ cài đặt phiên bản được biên dịch mới nhất của ứng dụng bạn đã cài đặt trên thiết bị của mình

  2. Chạy 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. chạy cd android/ && ./gradlew assembleDebug

  4. Tải ứng dụng-debug.apk của bạn trong thư mục android / app / build / output / apk / debug

chúc may mắn!


1
Không hoạt động !!!, nó tạo APK gỡ lỗi, nhưng ứng dụng vẫn cần máy chủ dev
aName

Điều này không thể hoạt động trong 0,59,8 phản ứng gốc, vì gradle dự kiến ​​gói sẽ ở trong android/app/build/generated/assets/react/debug/index.android.jsvà các tài sản sẽ ở android/app/build/generated/res/react/debugmức 0,57 phản ứng gốc.
TheBaj

Hoạt động tốt cho phản ứng bản địa 0,60>
Moso Akinyemi

0

Tôi đã tìm thấy một giải pháp thay đổi buildTypes như thế này:

buildTypes {
  release {
    signingConfig signingConfigs.release
  }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.