Как я могу создать 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.bundle --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 устройстве.
надеюсь, это поможет начинающим новичкам
официальный док здесь
если у вас нет ключей, чем использовать перед командой еще пропустить
создание ключа подписи / файла хранилища ключей Вы можете создать закрытый ключ подписи с помощью 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