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