Реакция-родной запуск-Android Vs ./gradlew buildDebug - PullRequest
0 голосов
/ 20 октября 2018

Я заметил, что реакции-нативная и gradle имеют два разных выхода при сборке сборок Android.

  1. Реакция-нативная сборка, кажется, включает в себя некоторую предварительную работу из плагинов, таких как react-native-config
  2. act-native потерпит неудачу при сборке, если на нем нет устройства для установки (эмулятор в моем случае)
  3. другой вывод BUILD SUCCESSFUL, особенно error type 3 в моем случае
  4. установка - react-native только

Вопрос

Помимо части установки (4), почему части сборки этих двух команд отличаются?

Примеры выходных данных

реактивный родной-android

$ react-native run-android
Scanning folders for symlinks in /Users/Jackson/Sites/fnmultiapptest/node_modules (10ms)
JS server already running.
Building and installing the app on the device (cd android && ./gradlew installDebug)...

> Configure project :app 
Reading env from: .env
WARNING: Configuration 'compile' is obsolete and has been replaced with 'implementation' and 'api'.
It will be removed at the end of 2018. For more information see: http://d.android.com/r/tools/update-dependency-configurations.html
Observed package id 'build-tools;20.0.0' in inconsistent location '/Users/Jackson/.android/build-tools/android-4.4W' (Expected '/Users/Jackson/.android/build-tools/20.0.0')

> Configure project :react-native-config 
WARNING: Configuration 'compile' is obsolete and has been replaced with 'implementation' and 'api'.
It will be removed at the end of 2018. For more information see: http://d.android.com/r/tools/update-dependency-configurations.html

> Task :react-native-config:installDebugAndroidTest 
11:40:14 V/ddms: execute: running am get-config
11:40:14 V/ddms: execute 'am get-config' on 'emulator-5554' : EOF hit. Read: -1
11:40:14 V/ddms: execute: returning
Installing APK 'react-native-config-debug-androidTest.apk' on 'Nexus_5X_API_26(AVD) - 8.0.0' for react-native-config:debugAndroidTest
11:40:14 D/react-native-config-debug-androidTest.apk: Uploading react-native-config-debug-androidTest.apk onto device 'emulator-5554'
11:40:14 D/Device: Uploading file onto device 'emulator-5554'
11:40:14 D/ddms: Reading file permision of /Users/Jackson/Sites/fnmultiapptest/node_modules/react-native-config/android/build/outputs/apk/androidTest/debug/react-native-config-debug-androidTest.apk as: rw-r--r--
11:40:14 V/ddms: execute: running pm install -r -t "/data/local/tmp/react-native-config-debug-androidTest.apk"
11:40:15 V/ddms: execute 'pm install -r -t "/data/local/tmp/react-native-config-debug-androidTest.apk"' on 'emulator-5554' : EOF hit. Read: -1
11:40:15 V/ddms: execute: returning
11:40:15 V/ddms: execute: running rm "/data/local/tmp/react-native-config-debug-androidTest.apk"
11:40:15 V/ddms: execute 'rm "/data/local/tmp/react-native-config-debug-androidTest.apk"' on 'emulator-5554' : EOF hit. Read: -1
11:40:15 V/ddms: execute: returning
Installed on 1 device.


BUILD SUCCESSFUL in 2s
38 actionable tasks: 1 executed, 37 up-to-date
Running /Users/Jackson/.android/platform-tools/adb -s emulator-5554 reverse tcp:8081 tcp:8081
Starting the app on emulator-5554 (/Users/Jackson/.android/platform-tools/adb -s emulator-5554 shell am start -n com.workingproject/com.workingproject.MainActivity)...
Starting: Intent { cmp=com.workingproject/.MainActivity }
Error type 3
Error: Activity class {com.workingproject/com.workingproject.MainActivity} does not exist.

. / Gradlew assemblyDebug

$ ./gradlew assembleDebug

> Configure project :app 
Reading env from: .env
WARNING: Configuration 'compile' is obsolete and has been replaced with 'implementation' and 'api'.
It will be removed at the end of 2018. For more information see: http://d.android.com/r/tools/update-dependency-configurations.html

> Configure project :react-native-config 
WARNING: Configuration 'compile' is obsolete and has been replaced with 'implementation' and 'api'.
It will be removed at the end of 2018. For more information see: http://d.android.com/r/tools/update-dependency-configurations.html


BUILD SUCCESSFUL in 0s
50 actionable tasks: 50 up-to-date

Ответы [ 2 ]

0 голосов
/ 22 октября 2018

react-native run-android содержит команду ./gradlew installDebug

./gradlew installDebug используется, когда вам нужно отправить apk на устройство, тогда как ./gradlew assembleDebug просто используется для создания apk.

Если вам нужно взглянуть на перспективу, вы можете сказать, что ./gradlew assembleDebug является подмножеством процессов, выполняемых ./gradlew installDebug

Так что, по сути, если бы мне пришлось перечислять, процессы, выполняемые react-native run-android, включают -

  1. Запускает пакетный пакет metro, который будет прослушивать все ваши изменения js
  2. Создает apk, используя ./gradlew installDebug
  3. Проверяет наличие доступных устройств, если нет, то здесь происходит сбой.
  4. В случае успеха он устанавливает apk на устройство, то же самое, что вы можете прочитать из журналов, которые вы нам показали.
  5. В качестве последнего, он выполняет reverse tcp:8081 tcp:8081, который подключает ваш metro-упаковщикк эмулятору приложения / устройству

и ./gradlew assembleDebug просто строит апк.Ничего больше

Надеюсь, это поможет:)

PS: Если вы тщательно проверите, часть сборки react-native run-android прошла успешно, поэтому вы можете увидеть вывод BUILD SUCCESSFUL, но, с другой стороны,процессы терпят неудачу, это терпит неудачу как целая команда.

0 голосов
/ 22 октября 2018

По моему мнению, вы сравниваете две разные вещи.

  1. react-native run-android:

    он выполняет cd android && ./gradlew installDebug (что можно увидеть впечатные журналы), которые используются исключительно для установки уже созданного и подписанного apk или для сборки apk и немедленной установки его на работающем эмуляторе или на подключенном устройстве.
    И выдает ошибку, поскольку установка не удалась.

  2. ./gradlew assembleDebug:

    С другой стороны, ./gradlew assembleDebug используется только для сборки приложения. (Это означает, что вы можете создать отладочный APK с помощью этой команды.) As debug apkуспешно создан, он показывает сообщение "BUILD SUCCESSFUL"


REF: создать отладку APK

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...