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


211

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

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

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

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


проверьте этот простой пример для создания apk-файла: Реагируйте с помощью Native Generate Release APK через командную строку Windows Android
sumit kumar pradhan

Ответы:


204

После ответа Адитьи Сингха сгенерированный (без знака) 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


10
Это самый актуальный и точный ответ. Спасибо.
Гохан Сари

2
app-release.apk не устанавливается. в чем будет проблема?
Баласубраманян

1
Я создаю apk, загружаю в google play, но он не работает ... какой-то намек?
Итало Родриго

2
Я не могу найти папку android / app, где она находится?
DHLopez

6
Спасибо, это не так, но я обнаружил, что это потому, что я использую expo для тестирования, а приложение create native npm имеет другую структуру, поэтому для дальнейшего использования, если кто-то столкнется с этой проблемой, просто извлеките ваш проект, а затем вы получите эти папки, забавно, как учебник говорит вам использовать npm для создания приложения, а затем рассказывает о структуре, которой не существует, когда вы его используете
DHLopez

194

Вам нужно будет создать ключ для подписи 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


4
Большое спасибо за это, это сработало для меня. Единственной проблемой, которую я получил, было это сообщение: «Отсутствуют обязательные аргументы: bundle-output» en в компонентеact-native-bundle, но эта
проблема

59
Я поражен плохой документацией Facebook, где они полностью пропустили react-native bundleчасть. Спасибо за Ваш ответ!
технофил

2
Я работаю с Windows, работает с этим gradlew.bat assembleReleaseтакже.
Табарес

12
Я получаю эту ошибку Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES] . когда я пытаюсь установить апк.
developernaren

18
если вы получите ошибку, ENOENT: no such file or directory, open 'android/app/src/main/assets/index.android.bundle' запуститеmkdir android/app/src/main/assets
shashuec

31

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

Для более новой версии реакции-нативной (например, реакция нативной 0.49.0 и т. Д.)

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.0 и ниже)

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-> Generate подписанный APK и следуйте инструкциям оттуда. Это действительно прямо вперед.


Я также использую Android Studio и XCode для создания версий выпуска для своих приложений React Native ... но генерация Android может быть выполнена с помощью сценария, описанного @Aditya Singh
WiRa

Эта функция больше не нужна proandroiddev.com/...
onmyway133

30

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

react-native run-android --variant=release

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


@jasan Я нашел другую проблему, подобную вашей, здесь: github.com/facebook/react-native/issues/11586 Это может решить проблему: cd android && ./gradlew installRelease
Ахмед Ашраф

Я попытался cd android && ./gradlew installReleaseи получил эту ошибкуTask 'assembleRelease.' not found in root project 'project'. Some candidates are: 'assembleRelease'.
ThomasReggi

Да, вы должны создать файл хранилища ключей. и отредактируйте файл Gradle. Следуйте этим инструкциям, чтобы решить эту проблему. facebook.github.io/react-native/docs/signed-apk-android.html
Ахмед Ашраф

21

для 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-> Generate подписанный APK и следуйте инструкциям оттуда. Это хорошо.


Это простой способ сделать это, если у вас установлена ​​Android Studio (которая позаботится об использовании или создании хранилища ключей). Спасибо.
Леосок

Эй .. есть быстрый вопрос .. требуются ли вышеуказанные шаги? Реакция родного
дока

1
@Pravin это не требуется, это один из методов генерации apk.
Ясин Угурлу

12

Если ты получишь Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES].

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

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

Кстати, наше приложение является полнофункциональным 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> 

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

4) Прибыль!


11

Попробуйте ниже, он сгенерирует 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


Сгенерированный здесь APK требует Metro для запуска ... так что я думаю, что он все еще использует сервер dev
nerdlinger

11

Если кто-то хочет собрать без ключей PlayStore, эта команда будет очень полезна.

# react-native run-android --variant=release

После завершения сборки вы можете найти apk в файле сборки релиза.


7

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

cd android && ./gradlew assembleRelease

Это сгенерирует неподписанный apk, если вы не выполнили необходимую настройку (как сказал Педрам).
Гохан Сари

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

6

Если вы получаете сообщение об ошибке 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/

5

У меня есть другое решение: - Создание ключа подписи Вы можете создать личный ключ подписи, используя 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.


Где находится папка android \ app? Я не вижу его в своем проекте (я вижу только node_modules, а внутри него нет android / приложения)
DHLopez

1
@DHLopez Вы должны использовать чистый проект React Native, чтобы иметь доступ к папке Android. Если вы используете Expo, то вы должны отсоединить проект Expo, используя exject eject.
fxbayuanggara

5

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

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

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

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

1
О боже gradle clean... Я боролся с этим некоторое время, получая эти ошибки сборки, большое спасибо за этот ответ !!
ботаник

5

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

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


3

GUI способ в 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 и установите его.

0

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


-2

Обратитесь к официальной официальной документации о создании подписанного APK

Реактивно-генерирующая подписанная APK


Это не очень хороший ответ, даже если он отвечает на вопрос пользователя, а это не так. Они хотят создать автономный отладочный APK, а не релизный.
user37309
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.