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


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

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

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

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

9 117

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 на свой телефон. Элемент -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.андроид.бандл'

запустите 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 Native bundle:

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> 

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

4) профит!

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

у меня есть другое решение:- Создание ключа подписи Вы можете создать закрытый ключ подписи с помощью keytool. В Windows keytool необходимо запускать из C:\Program файлы\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.файл хранилища ключей в каталоге 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 приложение-релиз.apk и приложение-релиз-без подписи.АПК теперь установите приложение-релиз.apk в вашем устройстве android.

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

cd android && ./gradlew assembleRelease

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

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

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

создание ключа подписи / файла хранилища ключей Вы можете создать закрытый ключ подписи с помощью keytool. В Windows keytool необходимо запускать из C:\Program файлы\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.хранилища ключей

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

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

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

если у вас есть какие-либо ошибки удалить папку build и выполнить команду

gradlew clean

чем снова

gradlew assembleRelease