개발 서버가없는 장치에서 서명되지 않은 APK를 빌드하고 설치 하시겠습니까?


166

내가 반응 네이티브에 익숙하지 않으므로 단계에 문제가 있으면 알려주십시오.

설명서에 따라 명령을 사용하여 반응 네이티브 안드로이드 앱을 만들었습니다.

반응 네이티브 안드로이드

장치에서 실행하는 동안 다음 명령이 사용되었습니다

반응 네이티브 런 안드로이드

프로젝트 폴더 / android / app / build / outputs / apk 에 2 개의 apk 파일이 출력됩니다.

여기에 이미지 설명을 입력하십시오

이제 설치 후이 apk를 설치하는 데 사용하면 개발 서버가 JS 번들을 연결하도록 요청합니다. 그러나 필자의 요구 사항은 사용자가 apk를 설치하기 만하면 개발 서버로 어려움을 겪지 않아도되고 모든 것이 완료됩니다.

일부 스택 오버 플로우 질문을 겪었 지만 개발 서버가 필요없는 서명되지 않은 apk를 작성하는 데 도움이되지 않습니다.

여러분은 네이티브 네이티브 반응으로 APK를 작성하고 서명하지 않는 방법을 찾는 데 도움을 줄 수 있습니까?


1
'react-native start'를 실행하면 개발 모드에서 js 번들이 서버됩니다. 목적은 js 파일을 즉석에서 편집 할 수 있도록하는 것입니다. 사용 릴리스 모드에는 필요한 번들이 포함되어 있으므로 서버가 필요하지 않습니다. 아래 답변 참조
kar

답변:


250

디버그 빌드를 위해 번들을 수동으로 작성해야합니다.

번들 디버그 빌드 :

#React-Native 0.59
react-native bundle --dev false --platform android --entry-file index.js --bundle-output ./android/app/src/main/assets/index.android.bundle --assets-dest ./android/app/src/main/res

#React-Native 0.49.0+
react-native bundle --dev false --platform android --entry-file index.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest ./android/app/build/intermediates/res/merged/debug

#React-Native 0-0.49.0
react-native bundle --dev false --platform android --entry-file index.android.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest ./android/app/build/intermediates/res/merged/debug

그런 다음 번들링 후 APK를 빌드하십시오.

$ cd android
#Create debug build:
$ ./gradlew assembleDebug
#Create release build:
$ ./gradlew assembleRelease #Generated `apk` will be located at `android/app/build/outputs/apk`

추신 또 다른 접근법은 gradle 스크립트를 수정하는 것입니다.


3
누군가 자산이없는 경우 : 이것은 저에게 --assets-dest ./android/app/src/main/res/
Juan Solano

11
그리고이 작업을 수행하면 앱을 시작할 때 큰 빨간색 화면이 표시됩니까? (참고 : 추출 후 바로 실행합니다)
Simon Forsberg

3
index.android.js가 없기 때문에 최신 버전으로 빌드하는 방법은 무엇입니까?
Vivek

9
최신 버전의 사용자는 시작 지점을 --entry-file index.js로 변경하십시오. 감사합니다.
Rishabh Bhatia

4
react-native bundle --dev false --platform android --entry-file index.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest. index.js가
iOS

101

다음 단계를 따르십시오.

js 번들 :

프로젝트 루트에 index.android.js가 있으면 다음을 실행하십시오.

react-native bundle --dev false --platform android --entry-file index.android.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest ./android/app/build/intermediates/res/merged/debug

프로젝트 루트에 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

디버그 APK 생성 :

cd android/
./gradlew assembleDebug

그런 다음 여기에서 APK를 찾을 수 있습니다.

cd app/build/outputs/apk/

11
그리고이 작업을 수행하면 앱을 시작할 때 큰 빨간색 화면이 표시됩니까? (참고 : 추출 후 바로 실행 중)
Simon Forsberg 18

2
@SimonForsberg react ^ 0.5를 사용하는 경우 진입 점을 App.js 또는 index.android.js 대신 index.js로 변경하십시오. react-native bundle --dev false --platform android --entry-file index.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest ./android/app/build/intermediates/res/merged/debug
d.bayo

3
작동하지 않습니다.이 명령은 APK 작성 명령이지만 해당 APK는 패키지 서버없이 실행되지 않습니다.
Vishal Chhodwani

1
이 dev에 서버가 필요하기 때문에이 작업 않을 것입니다
sheriff_paul

1
디버그 -APK를 생성 할 때도 동일한 문제가 발생하지만 설치할 수는 있지만 개발자 서버가 필요하며 릴리스 APK를 사용할 때 휴대 전화에 설치할 수 없습니다. 잘못되었습니다
aName

62

최근 업데이트

루트 프로젝트 디렉토리에서

android / app / src / main / assets / 디렉토리가 있는지 확인하십시오. 디렉토리를 만들지 않은 경우 새 파일을 만든 후 다른 이름으로 저장하고 index.android.bundle파일을 다음 android / app / src / main / assets / index.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/

cd android && ./gradlew assembleDebug

그럼 당신은 얻을 수 있습니다 apk에서 응용 프로그램 / 빌드 / 출력 / APK / 디버그 / 앱 debug.apk


이 답변은 실제로 효과가 있습니다. 대단히 감사합니다
aName

이 답변은 실제로 효과가 있습니다. 대단히 감사합니다
aName

@jeeva : 반응 네이티브의 개발 서버에 응용 프로그램을 다시 연결하는 방법은 무엇입니까?
Mayur Baldha

index.android.bundle호스트에서 개발 서버를 사용하지 않기 위해서는 생성 시점이 중요합니다.
Lee Elton

@ Mayur Balha : 동일한 네트워크에 연결된 USB 또는 Wi-Fi를 통해 다시 연결할 수 있습니다. WiFi가 반응 앱에서 서버에 다시 연결하려면 에뮬레이터에서 모바일을 흔들어 Win + R을 누른 다음 dev 설정을 클릭하십시오. "서버 호스트 및 포트 디버그"아래로 스크롤하십시오 .IP 주소와 포트를 입력하십시오 (Windows는 cmd는 "ipconfig"를 입력하거나 Mac은 open 터미널은 "ifconfig"를 192.168.1.1:8080과 같이 입력 한 다음 확인을 다시 누르십시오. 또는 에뮬레이터 프레스 재로드를 위해 Win + R을 누르십시오. 앱이 다시 개발에 연결되는 것을 볼 수 있습니다 (릴리즈 APK가 아닌 디버그에서만 작동합니다).
예바

29

나와 함께 프로젝트 디렉토리에서 다음 명령을 실행하십시오.

네이티브 이전 버전을 반응 시키려면 (root에 index.android.js가 표시됨) :

mkdir -p android/app/src/main/assets && rm -rf android/app/build && 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 && cd android && ./gradlew clean assembleRelease && cd ../

네이티브 네이티브 버전 반응 (루트에 index.js 참조) :

mkdir -p android/app/src/main/assets && rm -rf android/app/build && 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 && cd android && ./gradlew clean assembleRelease && cd ../

apk 파일은 다음 위치에 생성됩니다.

  • Gradle <3.0 : android / app / build / outputs / apk /
  • Gradle 3.0 이상 : android / app / build / outputs / apk / release /

좀 더 정교하게 설명해 주시면 어떻게 문제를 해결합니까?
Priyal

index.android.bundle에서 오류가 발생하여 제안으로 해결했습니다. 감사합니다 ... :)
zephyr

6
나를 위해$ mkdir -p android/app/src/main/assets && rm -rf android/app/build && 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 && cd android && ./gradlew assembleDebug
Arif

파일을 찾을 수 없음 : 프로젝트 루트에서 index.android.js
Anuj

1
참고 --entry-file index.android.js필요로 대체 할 --entry-file index.js이 새로운 프로젝트를 위해 index.js대신 index.android.js자신의 프로젝트 디렉토리의 루트입니다.
daka

8

첫 번째 응답 을 수행 한 후 다음을 사용하여 앱을 실행할 수 있습니다.

react-native run-android --variant=debug

패키저가 필요없이 앱이 실행됩니다.


1
가장 간단한 대답은 가장 효율적이며, 완벽하게 작동했으며, 여러 명령 줄과 수많은 js 구성을 테스트하는 데 며칠이 걸렸으며 모든 것이 이것으로 재개되었습니다.
Nicolas Silva

4

반응 네이티브 0.57부터는 gradle이 번들을 찾을 것으로 예상하고 디렉토리가 변경 된 디렉토리가 있기 때문에 이전에 제공된 답변 중 더 이상 작동하지 않습니다.

반응 네이티브 번들이없는 간단한 방법

디버그 빌드를 빌드하는 가장 간단한 방법은 react-native bundle명령을 전혀 사용하지 않고 단순히 app/build.gradle파일을 수정하는 것 입니다.

파일 의 project.ext.react맵 안에 항목을 app/build.gradle추가하십시오 bundleInDebug: true. --dev빌드 가되지 않게하려면 (경고 및 축소 된 번들 없음) devDisabledInDebug: true동일한 맵에 항목을 추가해야합니다 .

반응 네이티브 번들

어떤 이유로 react-native bundle번들을 생성 하기 위해 명령 을 사용해야하거나 ./gradlew assembleDebug번들 및 자산으로 APK를 생성하려면 번들과 자산을 올바른 경로에 배치해야합니다. 그들을 찾으십시오.

반응 네이티브 0.57부터 해당 경로는 android/app/build/generated/assets/react/debug/index.android.js번들에 대한 경로 입니다.

그리고 android/app/build/generated/res/react/debug자산을 위해. 따라서 번들 및 자산으로 APK를 수동으로 번들링하고 빌드하는 전체 명령은 다음과 같습니다.

react-native bundle --dev false --platform android --entry-file index.js --bundle-output ./android/app/build/generated/assets/react/debug/index.android.bundle --assets-dest ./android/app/build/res/react/debug

그리고

./gradlew assembleDebug

번들 및 자산 경로

gradle이 번들을 찾는 경로와 자산은 변경 될 수 있습니다. 이러한 경로의 위치를 ​​찾으 react.gradle려면 node_modules/react-native디렉토리 에서 파일을보십시오 . 행 은 gradle이 번들과 자산을 각각 찾는 디렉토리를 지정 def jsBundleDir =하고 def resourcesDir =지정합니다.


3

Windows 사용자의 경우 모든 단계가 올바르게 수행 된 경우 : https://facebook.github.io/react-native/docs/signed-apk-android.html

다음 만 실행하면됩니다. gradlew assembleRelease

그리고 파일은 다음과 같습니다.

  • app-release.apk
  • app-release-unaligned.apk

위치: E:\YourProjectName\android\app\build\outputs\apk


app-release.apk를 모든 장치에 설치 / 공유 할 수 있습니다
Dharam Mali

2
일반적으로 디버그 빌드는 릴리스 빌드와 구성이 다릅니다 (예 : 스테이징 API 사용). 릴리스와 다른 빌드 구성을 사용하는 독립형 APK를 원하는 경우에는 도움이되지 않습니다.
Josh

이 APK는 개발 / 테스트 용입니다.
다람 말리

3

나는 기본 0.55.4에 반응하고 있으며 기본적으로 수동으로 묶어야했습니다.

react-native bundle --dev false --platform android --entry-file index.js --bundle- 
output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets- 
dest ./android/app/build/intermediates/res/merged/debug

그런 다음 USB를 통해 장치를 연결하고 USB 디버깅을 활성화하십시오. 로 연결된 장치를 확인하십시오 adb devices.

마지막으로 실행 react-native run-android 하면 휴대 전화에 디버그 APK가 설치되며 개발자 서버에서 정상적으로 실행할 수 있습니다

노트 :

  • 0.49.0부터 진입 점은 단일 index.js
  • gradlew assembleRelease 설치할 수없는 릴리스 서명되지 않은 APK 만 생성

3

테스트 목적으로 서명되지 않은 apk 버전을 생성하여 모바일에서 실행할 수 있습니다.

처음에 여기에 언급 된 것처럼 빨간색 화면 오류가 발생했습니다. 그러나 나는 여기에 언급 된 것과 같은 것을 따랐고 그것은 나를 위해 일했다.

작업 디렉토리의 콘솔에서 다음 네 가지 명령을 실행하십시오.

react-native bundle --dev false --platform android --entry-file index.js --bundle-output ./android/app/build/intermediates/assets/debug/index.android.bundle --assets-dest ./android/app/build/intermediates/res/merged/debug

cd android

gradlew assembleDebug

gradlew assembleRelease

그리고 APK 파일은 android \ app \ build \ outputs \ apk \ debug \ app-debug.apk에 생성됩니다.


3

누군가 다른 사람 이이 같은 문제에 최근 들어간 경우, React Native 0.59.8 (RN 0.60으로 테스트 됨)을 사용하고 있으며 다른 답변 중 일부를 확인할 수 있습니다. 단계는 다음과 같습니다.

  1. 기기에 설치 한 최신 버전의 앱 제거

  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

  3. 운영 cd android/ && ./gradlew assembleDebug

  4. android / app / build / outputs / apk / debug 폴더에 app-debug.apk를 가져옵니다.

행운을 빕니다!


1
작동하지 않습니다 !!!, 그것은 디버그 APK를 생성하지만 응용 프로그램은 여전히 ​​dev 서버가 필요합니다
aName

gradle은 번들이 들어있을 것으로 예상 android/app/build/generated/assets/react/debug/index.android.js하고 자산 android/app/build/generated/res/react/debug이 반응 네이티브 0.57을 기준으로하므로 반응 네이티브 0.59.8에서는 작동하지 않습니다 .
TheBaj

네이티브 0.60 반응에 잘 작동합니다.
Moso Akinyemi

0

다음과 같이 buildTypes를 변경하는 솔루션을 찾았습니다.

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