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.