Як я можу генерувати apk, який може працювати без сервера з натиском реакції?


210

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

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

Я бачу, що в розділі документація на iOS документації є розділ Використання офлайн-пакету. Але я не міг зрозуміти, як зробити те ж саме для android. Чи можливо це? Якщо так, то як?

ОНОВЛЕННЯ: У відповіді на це питання ( Android не вдалося завантажити пакет JS ) сказано, що офлайн-пакет можна завантажити з сервера розробки. Але коли я отримую пакет із сервера розвитку, файли зображень не можуть бути завантажені.


перевірити цей простий приклад для створення apk-файлу: React Native Generate Release APK через Windows Command Prompt Android
sumit kumar pradhan

Відповіді:


202

Після відповіді Адітії Сінгх згенерований (непідписаний) 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, ви можете зберігати свій пароль у брелок, використовуючи тут інструкції, а не зберігати їх у простому тексті.

Потім відредагуйте додаток / build.gradle і переконайтесь, що там є такі (можливо, потрібно буде додати розділи з підписомConfigs signConfig):

...
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
Це найсучасніша і точна відповідь. Дякую.
Gokhan Sari

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

1
Я створюю apk, завантажую в Google play, але це не працює ... якийсь підказка?
Італо Родріго

2
Я не можу знайти папку Android / app, де це знаходиться?
DHLopez

6
Дякую, це не було, але я виявив, що це те, що я використовую expo для тестування, і створення нативної програми npm має іншу структуру, тож для подальшої довідки, якщо хтось отримає цю проблему, просто викиньте ваш проект, і тоді ви отримаєте ці папки, смішно, як у підручнику говориться про використання npm для створення програми, а потім розповідає про структуру, яка не існує при її використанні
DHLopez

193

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

Завантажте АПК на телефон. -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 / tools / index.android.bundle"

запустити mkdir android / app / src / main / активи


4
Дуже дякую за це, це спрацювало на мене. Єдине питання, яке я отримав, було це повідомлення: "Пропущені необхідні аргументи: bundle-output" en частина реакції-native-bundle, але це вирішується видаленням 2 "\" символів
guinunez

58
Мене вражає погана документація Facebook, де вони повністю пропустили react-native bundleчастину. Дякую за вашу відповідь!
технофіл

2
Я працюю з вікнами, працює і з цим gradlew.bat assembleRelease.
Табарес

12
Я отримую цю помилку Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES] . коли я намагаюся встановити apk.
розробник

18
якщо ви отримаєте помилку ENOENT: no such file or directory, open 'android/app/src/main/assets/index.android.bundle' запуститиmkdir android/app/src/main/assets
shashuec

31

Ви просто повинні використовувати для цього процесу андроїд-студію. Це просто простіше. Але спочатку запустіть цю команду у своєму реальному каталозі додатків:

Для новітньої версії "натиснення" (наприклад, реагувати на 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' у вас, коли ви реагуєте на рідний каталог додатків, вона попросить оновити gradle та деякі інші речі. перейдіть до збірки-> Створити підписаний APK та дотримуйтесь інструкцій звідти. Це справді прямо вперед.


Я також використовую Android Studio та Xcode для створення версій релізів для моїх програм React Native ... але генерацію андроїдів можна зробити за допомогою сценарію, як описано в @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/isissue/11586 Це може виправити проблему: CD android && ./gradlew installRelease
Ахмед Ашраф

Я спробував cd android && ./gradlew installReleaseі отримав цю помилкуTask 'assembleRelease.' not found in root project 'project'. Some candidates are: 'assembleRelease'.
ThomasReggi

Так, ви повинні створити файл Keystore. і відредагуйте файл 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' у вас, коли ви реагуєте на рідний каталог додатків, вона попросить оновити gradle та деякі інші речі. перейдіть до збірки-> Створити підписаний APK та дотримуйтесь інструкцій звідти. Це гаразд.


Це простий спосіб зробити це, якщо у вас встановлена ​​Android Studio (яка піклується про використання або створення Keystore). Дякую.
leosok

Гей .. швидке запитання .. чи потрібні вищезазначені кроки? Рідний докт реагує ніде про це не згадує ..
pravin

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, і ми просто додаємо до нього React Native у шматочки розміру, оскільки це приголомшливо.

Отже, підводячи підсумки, ось такі мої кроки:

1) Створити реактивний пучок:

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

Спробуйте нижче, він створить додаток-debug.apk у вашій папці root / 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 для запуску ... тож я думаю, що все ще використовується сервер розробників
nerdlinger

11

Якщо хтось хоче створити без ключів playstore, ця команда буде дуже корисною.

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

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


7

Перейдіть до каталогу проектів і запустіть команду:

cd android && ./gradlew assembleRelease

Це призведе до безпідписаного apk, якщо ви не зробили необхідну конфігурацію (як сказав Pedram).
Гохан Сарі

Це створить налагодження, випуск та непідписаний apk у створеній папці. Моїм наміром було поділитися випуском apk.
Sidharth Taneja

6

Якщо ви отримаєте помилку, пов’язану з index.android.js. Це відбувається тому, що ви використовуєте нову версію React (я використовую 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 клавіатурний інструмент повинен запускатися з 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 \ outputs \ apk app-release.apk та app-release-unsigned.apk, тепер встановіть app-release.apk на своєму пристрої Android.


Де папка Android \ app? Я не бачу його під своїм проектом (я бачу лише node_modules, а всередині нього немає андроїд / додаток)
DHLopez

1
@DHLopez вам потрібно використовувати чистий проект React Native, щоб мати доступ до папки Android. Якщо ви використовуєте Expo, вам доведеться від'єднати проект Expo за допомогою expo eject.
fxbayuanggara

5

Сподіваємось, це допоможе новачкам

Офіційний документ тут

Якщо у вас немає зберігання клавіш, ніж використовувати перед командою, ще пропустіть

Створення ключа підпису / файлу зберігання ключів Ви можете створити приватний ключ підпису за допомогою keytool. У Windows клавіатурний інструмент повинен запускатися з 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 у папці проекту. Відредагуйте файл android / gradle.properties та додайте наступне (замініть ***** правильним паролем зберігання клавіш, псевдонімом та паролем ключа), enableAapt2 set 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

потім додайте ці 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 {}

 signingConfig signingConfigs.release

тоді просто запустіть цю команду в терміналі андроїд-студії. Нижче команди будуть автоматизувати перш за все відповіді

якщо вікна

cd android
gradlew assembleRelease

якщо linux / mac

$ cd android
$ ./gradlew assembleRelease

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

gradlew clean

ніж знову

gradlew assembleRelease

1
Омг gradle clean... Я з цим боровся деякий час, отримуючи помилки побудови, дуже дякую за цю відповідь !!
nerdlinger

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

Шлях у графічному інтерфейсі в Android Studio

  • Відкрийте частину програми Android для програми React Native в студії Android (це означає лише відкриття папки Android для вашого власного проекту реагування за допомогою Android Studio)
  • Перейдіть на вкладку «Побудувати» вгорі
  • Перейдіть до розділу "Побудувати пакет / APK (и)"
  • Потім виберіть "Створити APK (файли)"
  • Це дозволить вам провести процес пошуку ваших ключів для підписання APK або створення ваших ключів, якщо їх у вас уже немає, що все дуже просто. Якщо ви просто займаєтесь, ви можете створити ці ключі та зберегти їх на робочому столі.
  • Після завершення цього процесу, і якщо збірка пройшла успішно, внизу в Android Studio з'явиться спливаюче вікно. Клацніть посилання в ньому з написом "Знайти" (APK)
  • Це перенесе вас до файлу apk, перемістіть його до свого Android-пристрою. Потім перейдіть до цього файлу на пристрої Android та встановіть його.

0

Використання андроїд-студії для генерації підписаного apk для Android-проекту react також є хорошим і простим варіантом: відкрити проект android для реагування в студії android та створити натискання клавіш та підписаний apk.


-2

Перегляньте офіційну документацію про створення реалізованої підписки APK

APK-повідомлення, що генерує реактивність


Це не є гарною відповіддю, навіть якщо він вирішив питання користувача, якого він не робить. Вони хочуть створити автономну версію APK для налагодження, а не версію.
користувач37309
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.