Как я могу сгенерировать apk, который может работать без сервера с реагированием?

Я построил свое приложение, я могу запустить его на своем локальном симуляторе (а также на своем устройстве Android в той же сети, изменив сервер отладки).

Тем не менее, я хочу создать apk, который я могу отправить кому-то без доступа к серверу разработки, и я хочу, чтобы он мог тестировать приложение.

Я вижу, есть раздел Использование автономного пакета на iOS разделе документации. Но я не мог понять, как сделать то же самое для Android. Это возможно? Если так, то как?

ОБНОВЛЕНИЕ: В ответе на этот вопрос (реакция родного андроида не смогла загрузить пакет JS) говорится, что автономный пакет можно загрузить с сервера разработки. Но когда я получаю пакет с сервера разработки, файлы изображений не могут быть загружены.

Ответ 1

После ответа Адитьи Сингха сгенерированный (неподписанный) apk не будет установлен на моем телефоне. Я должен был создать подписанный apk, используя инструкции здесь.

У меня сработало следующее:

$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

Поместите файл my-release-key.keystore каталог android/app в папке вашего проекта. Затем отредактируйте файл ~/.gradle/gradle.properties и добавьте следующее (замените **** на правильный пароль хранилища ключей, псевдоним и пароль ключа)

MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=****
MYAPP_RELEASE_KEY_PASSWORD=****

Если вы используете MacOS, вы можете сохранить свой пароль в связке ключей, следуя приведенным здесь инструкциям, вместо того, чтобы хранить его в виде открытого текста.

Затем отредактируйте app/build.gradle и убедитесь, что имеется следующее (возможно, необходимо добавить разделы с signatureConfigs signatureConfig):

...
android {
    ...
    defaultConfig { ... }
    signingConfigs {
        release {
            if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
                storeFile file(MYAPP_RELEASE_STORE_FILE)
                storePassword MYAPP_RELEASE_STORE_PASSWORD
                keyAlias MYAPP_RELEASE_KEY_ALIAS
                keyPassword MYAPP_RELEASE_KEY_PASSWORD
            }
        }
    }
    buildTypes {
        release {
            ...
            signingConfig signingConfigs.release
        }
    }
}
...

Затем выполните команду cd android &&./gradlew assembleRelease,

Для Windows 'cd android', а затем запустите gradlew assembleRelease и найдите ваш подписанный apk в каталоге android/app/build/outputs/apk/app-release.apk

Ответ 2

Вам нужно будет создать ключ для подписи apk. Используйте ниже, чтобы создать свой ключ:

 keytool -genkey -v -keystore my-app-key.keystore -alias my-app-alias -keyalg RSA -keysize 2048 -validity 10000

Используйте пароль при запросе

После того, как ключ сгенерирован, используйте его для генерации устанавливаемой сборки:

 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/

Генерация сборки с использованием Gradle

 cd android && ./gradlew assembleRelease

Загрузите APK на свой телефон. Флаг -r заменит существующее приложение (если оно существует)

adb install -r ./app/build/outputs/apk/app-release-unsigned.apk

Более подробное описание упоминается здесь: https://facebook.github.io/react-native/docs/signed-apk-android.html

ОБНОВЛЕНИЕ: Основано на комментариях @shashuec и @Fallen

если вы получили ошибку

ENOENT: нет такого файла или каталога, откройте "android/app/src/main/assets/index.android.bundle"

запустите mkdir android/app/src/main/assets

Ответ 3

Запустите эту команду:

react-native run-android --variant=release

Обратите внимание, что --variant=release доступен только в том случае, если вы настроили подпись с cd android && ./gradlew assembleRelease.

Ответ 4

Вы должны просто использовать студию Android для этого процесса. Это просто проще. Но сначала запустите эту команду в своем родном каталоге приложений:

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/

Затем используйте Android-студию, чтобы открыть папку "android", в которой вы реагируете на родной каталог приложений, он попросит обновить gradle и некоторые другие вещи. перейдите к build- > Создайте подписанный APK и следуйте инструкциям оттуда. Это действительно прямо.

Ответ 5

для React Native 0.49 и выше

Вы должны перейти в каталог проекта на терминале и выполнить эту команду

1 - mkdir android/app/src/main/assets
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

если под 0,49

  1 - mkdir android/app/src/main/assets
  2 - 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

Затем используйте android studio, чтобы открыть папку "android" в вашем собственном каталоге приложений, он попросит обновить gradle и некоторые другие вещи. перейдите на build-> Создать подписанный APK и следуйте инструкциям оттуда. Это хорошо.

Ответ 6

Если вы получите Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES].

Я попытался использовать метод @Aditya для создания файла unsigned APK и установить его, но когда я пошел устанавливать его на планшет Android, он дал мне ошибку Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES].

Я предполагаю, что это связано с тем, что файл APK не был подписан, и планшет был недоволен этим. Таким образом, после генерации файла пакета React Native я смог создать подписанный файл APK, как обычно, через Android Studio.

Кстати, наше приложение является полностью функциональным Android-приложением, которое уже существует в Play Store, и мы просто добавляем React Native к ним в кусочки размером с укусом, потому что это потрясающе.

Итак, чтобы подвести итог, были следующие шаги:

1) Создать реактивный родной пучок:

react-native bundle --platform android --dev false --entry-file index.android.js --bundle-output android/<your-package-name>/src/main/assets/index.android.bu‌​ndle --assets-dest android/<your-package-name>/src/main/res/ 

2) Создайте подписанный файл APK из Android Studio.

3) Установите подписанный файл APK на USB-устройство:

adb -d install -r <path_to_signed_apk> 

Флаг -d просто сообщает adb для установки на подключенном USB-устройстве, в том случае, если у вас работает эмулятор. Если вы хотите установить какой-либо эмулятор, опустите флаг -d.

4) Прибыль!

Ответ 7

У меня есть другое решение: - Создание ключа подписи Вы можете создать закрытый ключ подписи с помощью keytool. В Windows keytool должен запускаться из C:\Program Files\Java\jdkx.x.x_x\bin.

$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

Поместите файл my-release-key.keystore в каталог android/app в папке проекта.

Отредактируйте файл android/app/build.gradle в папке проекта и добавьте конфигурацию подписи

android {
....
signingConfigs { 
  release { 

      storeFile file('my-release-key.keystore') 
      storePassword 'yourpassword' 
      keyAlias 'my-key-alias' 
      keyPassword 'yourpassword' 

  } 
}}}


buildTypes {release {signingConfig signingConfigs.release}}

и запустите

gradlew assembleRelease

Это даст вам два файла в android\app\build\output\apk app-release.apk и app-release-unsigned.apk теперь установите app-release.apk в свое устройство Android.

Ответ 8

Перейдите в каталог проекта и запустите команду:

cd android && ./gradlew assembleRelease

Ответ 9

Если вы получаете сообщение об ошибке index.android.js. Это потому, что вы используете новую версию React-native (я использую 0.55.4). Просто замените "index.android.js" на "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/

Ответ 10

Надеюсь, это поможет новым новичкам

Официальный документ здесь

Если у вас нет хранилища ключей, чем использовать до команды, иначе пропустите

Генерация ключа подписи/файла хранилища ключей. Вы можете создать личный ключ подписи, используя keytool. В Windows keytool должен запускаться из C:\Program Files\Java\jdkx.x.x_x\bin.

$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

вы получите файл типа my-release-key.keystore

Настройка переменных gradle Поместите файл my-release-key.keystore в каталог android/app в папке вашего проекта. Отредактируйте файл Android/gradle.properties и добавьте следующее (замените ***** с правильным паролем хранилища ключей, псевдонимом и паролем ключа), enableAapt2 установить фальшь обходной путь, как и Android Gradle версии 3.0 проблем

MYAPP_RELEASE_STORE_FILE=my-release-key.keystore
MYAPP_RELEASE_KEY_ALIAS=my-key-alias
MYAPP_RELEASE_STORE_PASSWORD=*****
MYAPP_RELEASE_KEY_PASSWORD=*****

android.enableAapt2=false

затем добавьте эти app/buid.gradle (приложение)

ниже конфигурации по умолчанию

signingConfigs {
        release {
            if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
                storeFile file(MYAPP_RELEASE_STORE_FILE)
                storePassword MYAPP_RELEASE_STORE_PASSWORD
                keyAlias MYAPP_RELEASE_KEY_ALIAS
                keyPassword MYAPP_RELEASE_KEY_PASSWORD
            }
        }

и Inside Build type release {}

 signingConfig signingConfigs.release

затем просто запустите эту команду в терминале студии Android. Ниже команды будут автоматизировать, прежде всего ответы

если окна

cd android
gradlew assembleRelease

если Linux/Mac

$ cd android
$ ./gradlew assembleRelease

если вы получили какую-либо ошибку, удалите всю папку сборки и выполните команду

gradlew clean

чем снова

gradlew assembleRelease

Ответ 11

Для получения последних версий реагируйте на родные версии для связывания проекта

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/

IOS

react-native bundle --entry-file index.js --platform ios --dev false --bundle-output ios/main.jsbundle --assets-dest ios

Ответ 12

Использование android studio для создания подписанного apk для реагирующего проекта android также является хорошим и простым вариантом, откройте Android-проект реагирования в android studio и сгенерируйте нажатие клавиш и подписанный apk.

Ответ 13

Графический интерфейс в Android Studio

  • Откройте приложение Android для приложения React Native в Android Studio (это означает, что вы откроете папку android вашего собственного реактивного проекта в Android Studio)
  • Перейдите на вкладку "Сборка" вверху
  • Перейдите к "Build Bundle (s)/APK (s)"
  • Затем выберите "Build APK (s)"
  • Это проведет вас через процесс поиска ваших ключей для подписания APK или создания ваших ключей, если у вас их еще нет, что очень просто. Если вы только тренируетесь, вы можете сгенерировать эти ключи и сохранить их на рабочем столе.
  • Как только этот процесс завершится и сборка прошла успешно, в Android Studio появится всплывающее окно. Нажмите на ссылку внутри, которая говорит "найти" (APK)
  • Это приведет вас к файлу apk, перенесите его на ваше устройство Android. Затем перейдите к этому файлу на устройстве Android и установите его.

Ответ 15

Попробуйте ниже, он сгенерирует app-debug.apk в вашей корневой /android/app/build/output/apk/debug папке

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

затем перейдите в папку Android и запустите

./gradlew assembleDebug