Как я могу создать apk, который может работать без сервера с react-native?

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

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

Я вижу, что есть раздел, использующий автономный пакет в разделе iOS документации. Но я не мог понять, как сделать то же самое для android. Возможно ли это? Если так, как?

обновление: об ответе на этот вопрос (react native android не удалось загрузить JS bundle) говорится, что автономный пакет можно загрузить с сервера разработчика. Но когда я получаю пакет с сервера разработки, файлы изображений не могут быть загружены.

9 ответов


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

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

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

место найти подпись apk под android/app/build/outputs/apk/app-release.apk


вам нужно будет создать ключ для подписания 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 на свой телефон. The -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.андроид.bundle'

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


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

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" в каталоге приложений react native, он попросит обновить gradle и некоторые другие вещи. перейдите в build - > Generate signed APK и следуйте инструкциям оттуда. Это действительно прямолинейно.


выполните эту команду:

react-native run-android --variant=release

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


если вы Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES].

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

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

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

Итак, подводя итог, вот мои шаги:

1) генерировать собственный пакет React:

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) профит!


для реагировать родной 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" в каталоге приложений react native, он попросит обновить gradle и некоторые другие вещи. перейдите в build - > Generate signed APK и следуйте инструкциям оттуда. Что окей.


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

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

поместите ключ my-release.файл хранилища ключей в каталоге 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\outputs\apk app-релиз.apk и app-release-без знака.apk теперь установите приложение-релиз.apk в вашем android устройстве.


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

cd android && ./gradlew assembleRelease

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

официальный док здесь

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

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

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

вы получите файл как my-release-key.хранилища ключей

Настройка переменных gradle Поместите ключ my-release-key.файл хранилища ключей в каталоге android / app в папке проекта. Отредактируйте файл android / gradle.свойства и добавьте следующее (замените * * * * * правильным паролем хранилища ключей, псевдонимом и паролем ключа), enableAapt2 установить false является обходным путем, как 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

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

ниже настройки по умолчанию

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
            }
        }

и внутри типа сборки release { }

 signingConfig signingConfigs.release

затем просто запустите эту команду в Android studio terminal Ниже команды автоматизируют прежде всего ответы

если windows

cd android
gradlew assembleRelease

если linux / mac

$ cd android
$ ./gradlew assembleRelease

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

gradlew clean

чем снова

gradlew assembleRelease