react-native를 사용하여 서버없이 실행할 수있는 APK를 어떻게 생성 할 수 있습니까?


210

내 앱을 만들었고 로컬 에뮬레이터 (및 디버그 서버를 변경하여 동일한 네트워크 내의 내 Android 장치)에서 실행할 수 있습니다.

그러나 개발 서버에 액세스하지 않고도 누군가에게 보낼 수있는 APK를 만들고 싶습니다. 애플리케이션을 테스트 할 수 있기를 바랍니다.

설명서의 iOS에서 오프라인 번들 사용 섹션이 있습니다. 그러나 안드로이드에서 똑같이 달성하는 방법을 알 수 없었습니다. 이게 가능해? 그렇다면 어떻게?

업데이트 : 이 질문에 대한 답변 ( Android가 JS 번들을로드하지 못했습니다 )은 오프라인 번들을 개발 서버에서 다운로드 할 수 있다고합니다. 그러나 개발 서버에서 번들을 얻을 때 이미지 파일을로드 할 수 없습니다.


답변:


202

Aditya Singh의 답변에 따라 생성 된 (서명되지 않은) apk가 내 전화에 설치되지 않습니다. here 지침을 사용하여 서명 된 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을 편집하고 다음이 있는지 확인하십시오 (signingConfigs signingConfig가있는 섹션을 추가해야 할 수도 있음).

...
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 assembleReleasecommand 를 실행 하고 아래에서 서명 된 APK를 찾으십시오.android/app/build/outputs/apk/app-release.apk


10
가장 최신의 정확한 답변입니다. 감사.
Gokhan Sari

2
app-release.apk가 설치되지 않습니다. 무엇이 문제입니까?
Balasubramanian

1
APK를 만들고 Google Play에 업로드했지만 작동하지 않습니다 ... 힌트?
Italo Rodrigo

2
android / app 폴더를 찾을 수 없습니다. 어디에 있습니까?
DHLopez

6
고마워하지는 않았지만 테스트에 엑스포를 사용하고 있고 네이티브 앱 생성 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

휴대 전화에 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의 의견을 기반으로 함

오류가 발생하면

중요 : 그러한 파일이나 디렉토리가 없으면 'android / app / src / main / assets / index.android.bundle'을여십시오.

mkdir android / app / src / main / assets를 실행하십시오.


4
이것에 대해 많은 감사, 그것은 나를 위해 일했다. (가) 파트 네이티브 번들 반응 도중하지만이 "\"기호를 삭제하여 해결된다 "번들 출력을 필수 인수 누락 :는"단지 내가했다있어이 메시지 발행
guinunez

58
나는 페이스 북의 가난한 문서가 그들이 react-native bundle부분 을 완전히 생략 한 것에 놀랐습니다 . 답변 주셔서 감사합니다!
technophyle

2
나는 창문으로 작업하고 있으며 이것도 함께 작동 gradlew.bat assembleRelease합니다.
Tabares

12
이 오류가 발생 Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES] 합니다. APK를 설치하려고 할 때.
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

이 과정에서 안드로이드 스튜디오를 사용해야합니다. 더 간단합니다. 그러나 먼저 react 네이티브 앱 디렉토리 에서이 명령을 실행하십시오.

최신 버전의 react-native (예 : 네이티브 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 및 기타 항목을 업그레이드하도록 요청합니다. 빌드-> 서명 된 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
Ahmed Ashraf

시도 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
Ahmed Ashraf

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 및 기타 항목을 업그레이드하도록 요청합니다. 빌드-> 서명 된 APK 생성으로 이동하여 지침을 따르십시오. 좋아요


이는 Android Studio가 설치되어있는 경우 (Keystore 사용 또는 생성을 관리하는) 쉬운 방법입니다. 감사.
leosok

이봐 .. 빠른 질문이 있습니다 .. 위의 단계가 필요합니까? 반응 네이티브 문서는 어디에도 언급하지 않습니다 ..
pravin

1
@ pravin 필요하지 않습니다. apk 생성 방법 중 하나입니다.
Yasin Ugurlu 's

12

당신이 얻는다면 Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES].

서명되지 않은 APK 파일을 생성하고 설치하는 @Aditya의 방법을 사용해 보았습니다.하지만 Android 태블릿에 설치하려고 할 때 오류가 발생했습니다. Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES] .

APK 파일이 서명되지 않았고 태블릿이 이것에 만족하지 않았기 때문이라고 생각합니다. 따라서 React Native 번들 파일을 생성 한 후 정상적으로 Android Studio를 통해 서명 된 APK 파일을 생성 할 수있었습니다.

그건 그렇고, 우리의 앱은 Play 스토어에 이미 존재하는 완벽하게 작동하는 Android 앱이며 크기가 큰 조각으로 React Native를 추가하고 있습니다.

요약하면 다음과 같습니다.

1) React Native 번들 생성 :

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) Android Studio에서 서명 된 APK 파일을 생성하십시오.

3) 서명 된 APK 파일을 USB 장치에 설치하십시오.

adb -d install -r <path_to_signed_apk> 

-d플래그 adb는 에뮬레이터도 실행중인 경우 연결된 USB 장치에 설치하라는 메시지 만 표시합니다. 에뮬레이터에 설치하려면 -d플래그를 삭제하십시오 .

4) 이익!


11

아래를 시도하면 루트 / android / app / build / outputs / apk / debug 폴더에 app-debug.apk가 생성됩니다.

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

그런 다음 안드로이드 폴더로 이동하여 실행하십시오.

./gradlew assembleDebug


여기서 생성 된 APK는 Metro를 실행해야합니다 ... 그래서 여전히 dev 서버를 사용하고 있다고 생각합니다
nerdlinger

11

플레이 스토어 키없이 빌드하려는 경우이 명령이 매우 유용합니다.

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

빌드가 완료되면 릴리스 빌드 파일에서 apk를 찾을 수 있습니다.


7

프로젝트 디렉토리로 이동하여 다음 명령을 실행하십시오.

cd android && ./gradlew assembleRelease

Pedram이 말한 것처럼 필요한 구성을하지 않으면 서명되지 않은 apk가 생성됩니다.
Gokhan Sari

생성 된 폴더에 디버그, 릴리스 및 서명되지 않은 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에서 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 \ outputs \ apk app-release.apk 및 app-release-unsigned.apk에 두 개의 파일이 제공되며 이제 app-release.apk를 안드로이드 장치에 설치하십시오.


android \ app 폴더는 어디에 있습니까? 내 프로젝트에서 볼 수 없습니다 (노드 _ 모듈 만 볼 수 있으며 그 안에는 안드로이드 / 앱이 없습니다)
DHLopez

1
@DHLopez 당신은 안드로이드 폴더에 액세스 할 수있는 순수한 React Native 프로젝트를 사용해야합니다. 엑스포를 사용하는 경우 엑스포 꺼내기를 사용하여 엑스포 프로젝트를 분리해야합니다.
fxbayuanggara 2016 년

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 세트 거짓 안드로이드 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
            }
        }

및 내부 빌드 유형 릴리스 {}

 signingConfig signingConfigs.release

그런 다음 간단히 안드로이드 스튜디오 터미널 에서이 명령을 실행하십시오. 아래 명령은 모든 답변 위에 자동화됩니다.

창문이면

cd android
gradlew assembleRelease

리눅스 / 맥이라면

$ cd android
$ ./gradlew assembleRelease

오류가 발생하면 모든 빌드 폴더를 삭제하고 명령을 실행하십시오.

gradlew clean

다시보다

gradlew assembleRelease

1
omg gradle clean... 나는 그 빌드 오류를 얻는 동안 잠시 동안 이것으로 어려움을 겪었습니다.이 답변에 너무 감사드립니다!
nerdlinger

5

프로젝트를 번들로 제공하는 최신 반응 기본 버전의 경우

기계적 인조 인간

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의 GUI 방식

  • Android Studio에서 React Native 앱의 Android 앱을 열어 두십시오 (이것은 Android Studio로 반응 네이티브 프로젝트의 Android 폴더를 여는 것을 의미합니다)
  • 상단의 "빌드"탭으로 이동
  • "번들 /들 빌드 APK"로 이동
  • 그런 다음 "Build APK (s)"를 선택하십시오.
  • APK를 서명하기 위해 키를 찾거나 키가없는 경우 키를 만드는 과정을 안내합니다. 방금 연습하는 경우 이러한 키를 생성하여 바탕 화면에 저장할 수 있습니다.
  • 해당 프로세스가 완료되고 빌드가 성공하면 Android Studio에서 아래로 팝업이 표시됩니다. "locate"(APK)라는 링크를 클릭하십시오
  • apk 파일로 이동하여 Android 장치로 옮깁니다. 그런 다음 Android 장치에서 해당 파일로 이동하여 설치하십시오.

0

안드로이드 스튜디오를 사용하여 반응의 안드로이드 프로젝트에 서명 된 apk를 생성하는 것도 좋고 쉬운 옵션입니다. 안드로이드 스튜디오에서 반응의 안드로이드 프로젝트를 열고 키 입력 및 서명 apk를 생성하십시오.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.