Побудувати та встановити неподписаний 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.