Побудувати та встановити неподписаний apk на пристрої без сервера розробки?


166

Оскільки я новачок у реальній реакції, тому, якщо в кроках є щось не так, дайте мені знати.

Я створив власний додаток для Android з використанням команди відповідно до документації

реагувати-рідний андроїд

під час роботи на пристрої була використана наступна команда

react-native run-android

що дає мені вихід 2 apk-файлів у моєму папці проекту / android / app / build / outputs / apk

введіть тут опис зображення

тепер, коли я використовую для установки цього apk після установки, він запитує сервер розробки для підключення до пакетів JS. Але моя вимога полягає в тому, що користувачеві не доведеться боротися з сервером розробки, просто йому потрібно встановити apk і все зроблено.

Переглянули деякі питання stackoverflow, але не корисно для створення неподписаного apk, який не потребує сервер розробки.

Чи можете ви, хлопці, допомогти мені знайти спосіб, як створити і непідписаний APK в реагуванні рідного?


1
Запустіть "реагувати нативним початком", він буде сервер вашого js пакету в режимі розробки. Мета полягає в тому, щоб ви могли редагувати 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

Потім створити файли 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 Іншим підходом може бути зміна скриптів gradle.


3
Якщо комусь не вистачає активів: це працювало для мене--assets-dest ./android/app/src/main/res/
— Хуан Солано

11
І якщо це робить мені великий червоний екран, коли я запускаю програму? (Примітка. Я запускаю це безпосередньо після викидання)
— Simon Forsberg

3
Як взяти збірку для останньої версії, оскільки ми не hve index.android.js?
— Vivek

9
Люди з останньою версією, будь ласка, змініть точку входу на --entry-файл index.js, дякую.
— Рішабх Бхатія

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 для нової реактивної версії, де 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:

cd android/
./gradlew assembleDebug

Тоді ви можете знайти свій apk тут:

cd app/build/outputs/apk/

11
І якщо це робить мені великий червоний екран, коли я запускаю додаток? (Примітка: я запускаю це безпосередньо після викидання)
— Simon Forsberg

2
@SimonForsberg, якщо ви використовуєте реакцію ^ 0,5, змініть точку входу на 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 не працює без пакувального сервера.
— Вішал Чходвані

1
Це не спрацює, тому що для цього потрібен сервер розробників
— sheriff_paul

1
У мене така ж проблема, коли генерувати налагодження APK, я міг би встановити його, але мені потрібен сервер розробки, і коли я використовую APK випуску, я не зміг встановити його на свій телефон, я не знаю, що помиляється з цим
— aName

62

Останнє оновлення

У вашому каталозі кореневих проектів

Переконайтеся, що у вас вже є каталог Android / app / src / main / tools / , якщо не створити каталог, після цього створіть новий файл і збережіть як index.android.bundleі поставте свій файл у такий андроїд / додаток / src / main / активи / index.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/

cd android && ./gradlew assembleDebug

Тоді ви можете отримати apkв app / build / outputs / apk / debug / app-debug.apk


Ця відповідь справді спрацьовує, дуже дякую,
— Ім'я

Ця відповідь справді спрацьовує, дуже дякую,
— Ім'я

@jeeva: як підключити додаток до сервера розробки рідних реагуючих?
— Mayur Baldha

Точка, яка створюється index.android.bundle, дійсно важлива для того, щоб не використовувати сервер розвитку в хості.
— Лі Елтон

@ Mayur Balha: Ви можете підключитися назад через usb або wifi (підключено в одній мережі). Для підключення Wi-Fi назад до сервера у вашому додатку реакції струсіть свій мобільний на емуляторі, натисніть Win + R, потім натисніть налаштування Dev. термінал введіть "ifconfig"), як 192.168.1.1:8080, потім знову натисніть кнопку "ОК", або натисніть Win + R для перезавантаження емулятора, тепер ви зможете побачити підключення програми до розробки (воно буде працювати лише для налагодження, а не для випуску 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 / output / apk /
  • Gradle 3.0+: android / app / build / outputs / apk / release /

Ви можете, будь ласка, докладно розібратися і як це вирішує проблему?
— Пріал

Я отримував помилку при відкритті в 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 у будь-якому корені проекту
— Anuj

1
Зауважте, що це --entry-file index.android.jsпотрібно замінити --entry-file index.jsна новіші проекти, які мають index.jsзамість index.android.jsкореня свого каталогу проектів.
— дака

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

І ваш файл буде:

  • app-release.apk
  • app-release-unaligned.apk

Розташування: E:\YourProjectName\android\app\build\outputs\apk


Ви можете встановити / поділити app-release.apk на будь-якому пристрої
— Дхарам Малі

2
Зазвичай збірка налагоджень має іншу конфігурацію, ніж збірка випусків (наприклад, вона використовує інтерфейс API). Це не допоможе, якщо ви хочете отримати автономний APK, який використовує іншу конфігурацію збірки від випуску
— Josh

Цей 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

Потім підключіть свій пристрій через usb, увімкніть налагодження usb. Перевірте підключений пристрій за допомогою adb devices.

Нарешті, запустіть, react-native run-androidякий встановить налагодження 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. Отримайте додаток-debug.apk у папці android / app / build / outputs / apk / debug

Щасти!


1
Не працює !!!, він генерує APK для налагодження, але додатку все ще потрібен сервер розробників
— aName

Це не може працювати в нативному режимі 0,59,8, оскільки gradle очікує, що пакет буде вбудований, android/app/build/generated/assets/react/debug/index.android.jsа активи будуть мати статус старого android/app/build/generated/res/react/debug0,57.
— TheBaj

Чудово працює для реакції на рідну 0,60>
— Moso Akinyemi

0

Я знайшов рішення про зміну типів buildTypes таким:

buildTypes {
  release {
    signingConfig signingConfigs.release
  }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.