react-native를 사용하여 서버 없이 실행할 수 있는apk를 생성하려면 어떻게 해야 합니까?
앱을 만들었습니다. 로컬 에뮬레이터(및 디버깅 서버를 변경하여 같은 네트워크 내의 Android 장치)에서 실행할 수 있습니다.
그러나 개발 서버에 접속하지 않고 누군가에게 보낼 수 있는 APK를 구축하여 어플리케이션을 테스트할 수 있도록 하고 싶습니다.
설명서의 "iOS에서 오프라인 번들 사용" 섹션이 있습니다.하지만 안드로이드를 위해 어떻게 같은 일을 할 수 있는지 알 수 없었다.이게 가능합니까?만약 그렇다면, 어떻게?
업데이트: 이 질문에 대한 답변(Android가 JS 번들을 로드하지 못함)에서 오프라인 번들을 개발 서버에서 다운로드할 수 있다고 합니다.그러나 개발 서버에서 번들을 얻으면 이미지 파일을 로드할 수 없습니다.
Aditya Singh의 답변에 따라 생성된 (서명되지 않은) 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
및 password로 )
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 assembleRelease
명령어 및 서명된APK 를 검색합니다.android/app/build/outputs/apk/app-release.apk
, 「」android/app/build/outputs/apk/release/app-release.apk
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/
그라들을 사용하여 빌드 생성
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'를 여십시오.번들'
mkdir Android/app/src/main/maintroad 실행
이 과정에는 안드로이드 스튜디오를 사용하면 됩니다.그것은 단지 간단하다.그러나 먼저 react native app 디렉토리에서 다음 명령을 실행합니다.
react-native의 새로운 버전(예를 들어 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를 사용하여 네이티브 앱 디렉토리의 '안드로이드' 폴더를 열면 gradle과 다른 것들을 업그레이드하라는 메시지가 나타납니다.build-> 서명된 APK 생성으로 이동하여 지시에 따릅니다.정말 직설적이에요.
다음 명령을 실행합니다.
react-native run-android --variant=release
:
--variant=release
에 서명을 설정한 경우에만 사용할 수 있습니다.cd android && ./gradlew assembleRelease
.
플레이스토어 키를 사용하지 않고 빌드하는 경우 이 명령어는 매우 유용합니다.
# react-native run-android --variant=release
빌드 완료 후 릴리스 빌드 파일에서 apk를 찾을 수 있습니다.
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를 사용하여 네이티브 앱 디렉토리의 '안드로이드' 폴더를 열면 gradle과 다른 것들을 업그레이드하라는 메시지가 나타납니다.build-> 서명된 APK 생성으로 이동하여 지시에 따릅니다.그거 괜찮네.
아래에서 시도하면 앱 디버깅이 생성됩니다.root/mapk/app/build/mapk/mapk 폴더상의 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
Android 폴더로 이동하여 실행
./gradlew assembleDebug
Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]
.
되지 않은 APK 하는 @만, 때, @Aditya의 했습니다.Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]
.
APK 파일이 서명되지 않았고 태블릿이 이를 달가워하지 않았기 때문이라고 생각합니다.React Native 번들 파일을 생성한 후 정상적으로 Android Studio를 통해 서명된 APK 파일을 생성할 수 있었습니다.
덧붙여서, 우리 앱은 Play Store에 이미 존재하고 있는 완전히 기능하는 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.bundle --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) 이익!
프로젝트 디렉토리로 이동하여 다음 명령을 실행합니다.
cd android && ./gradlew assembleRelease
그것이 새로운 초보자들에게 도움이 되기를 바란다.
공식 문서는 이쪽
keystore가 없는 경우 before 명령어를 사용하지 않으면 건너뜁니다.
서명키/Keystore 파일 생성 키툴을 이용하여 개인 서명키를 생성할 수 있습니다.Windows 의 경우, 키툴은 C 에서 실행할 필요가 있습니다.\Program Files\Java\jdkx.x_x\bin.
$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
my-release-key와 같은 파일을 얻을 수 있습니다.키스토어
gradle 변수 설정 my-release-key를 배치합니다.프로젝트 폴더의 Android/app 디렉토리에 있는 keystore 파일.Android/gradle.properties 파일을 편집하고 다음 항목을 추가합니다(******를 올바른 키스토어 비밀번호, 에일리어스 및 키 비밀번호로 바꿉니다). enableAapt2 set false는 회피책입니다(안드로이드 그라들 버전 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
그런 다음 이 앱/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
Android studio 단말기에서 이 명령어를 실행하면 아래 명령어는 위의 모든 답변에서 자동으로 실행됩니다.
윈도우
cd android
gradlew assembleRelease
Linux/mac의 경우
$ cd android
$ ./gradlew assembleRelease
오류가 발생하면 모든 빌드 폴더를 삭제하고 명령을 실행합니다.
gradlew clean
다시 한 번
gradlew assembleRelease
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/
다른 해결책이 있습니다.- 서명 키 생성 키 도구를 사용하여 개인 서명 키를 생성할 수 있습니다.Windows 의 경우, 키툴은 C 에서 실행할 필요가 있습니다.\Program Files\Java\jdkx.x_x\bin.
$ keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000
my-release-key를 놓습니다.프로젝트 폴더의 Android/app 디렉토리에 있는 keystore 파일.
프로젝트 폴더에서 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 앱 릴리스에서 두 개의 파일이 제공됩니다.apk 및 app-release-uncored.apk가 앱 릴리스를 설치합니다.apk를 선택합니다.
첫번째
cd android
그런 다음 실행
./gradlew installRelease
마지막으로 여기서 APK를 찾을 수 있습니다.
Project\android\app\build\outputs\apk\release\app-release.apk
Android Studio의 GUI 방식
- React Native 앱의 Android 앱 부분을 Android Studio에서 엽니다(이것은 Android Studio에서 반응 네이티브 프로젝트의 Android 폴더를 여는 것을 의미합니다).
- 상단의 "빌드" 탭으로 이동합니다.
- "Build Bundle / APK"로 이동합니다.
- 그런 다음 "Build APK(s)"를 선택합니다.
- 이 절차에서는 APK에 서명하기 위한 키를 찾거나 아직 키가 없는 경우 키를 작성하는 절차를 안내합니다.연습 중인 경우 이러한 키를 생성하여 바탕화면에 저장할 수 있습니다.
- 이 프로세스가 완료되고 빌드가 성공하면 Android Studio에서 아래 팝업이 나타납니다."locate"(APK)라고 표시된 링크를 클릭합니다.
- 그러면 apk 파일로 이동하여 안드로이드 장치로 이동합니다.그런 다음 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
- WINDOW 사용자에게 유용한 스크립트
이러한 코드를 패키지에 복사 붙여넣습니다.아래 json 파일
* VS Code
--Enable NPM SCRIPT
--Now you can directly run scripts from here
"android": "react-native run-android",
"clean-run-android": "cd android && ./gradlew clean && cd.. && react-native run-android ",
"start": "node node_modules/react-native/local-cli/cli.js start --reset-cache",
"reset": "rm -rf node_modules/ && npm cache clear && watchman watch-del-all && npm i",
"debug-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 && cd app/src/main/res/ && rmdir /S /Q raw && rmdir /S /Q drawable-mdpi",
"release-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/build/intermediates/res/merged/release/ && cd android && ./gradlew assembleRelease && cd..",
"install-apk": "cd android && ./gradlew installRelease",
"release-aab": "cd android && ./gradlew bundleRelease"
dev-server를 사용하지 않고 디버깅 APK를 생성합니다.
개발 서버 없이 실행할 수 있는 디버깅 APK(테스트용)를 생성하려면 다음 링크를 참조하십시오.
https://stackoverflow.com/a/65762142/7755579https.com/a/65762142/7755579
필요한 것은 다음과 같습니다.
android/app/build.gradle
project.ext.react = [
...
bundleInDebug: true, // add this line
]
- 프로젝트의 루트 디렉토리에서 이 명령어를 실행합니다.
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
또는 (Mac Linux)gradlew assembleDebug
inside (Windows) ★★/android
표시
실패 시 Android .
는 ★★★★★★★★★★★★★★★★★★../gradlew assembleRelease
는 동작하지 않게 되었지만, 다음의 동작은 가능합니다.
./gradlew :app:assembleRelease
이 댓글 덕분에
만이 나에게가 있었다 - ★★★★★★★★★★★★★★★★★★★★★★★★★★」yarn android --variant=release
나에게 있어서 이것은 효과가 있었다(MACOS)
오픈 터미널
cd project_directory
이 명령어를 실행합니다.
yarn start
다른 터미널 열기
다음 명령어를 실행합니다.
cd android
./gradlew assembleRelease
안드로이드 스튜디오를 사용하여 리액트의 안드로이드 프로젝트를 위한 서명된 apk를 생성하는 것도 좋고 쉬운 옵션입니다.안드로이드 스튜디오에서 리액트의 안드로이드 프로젝트를 열고 키 스트로크와 서명된 apk를 생성합니다.
서명된 APK 생성에 대한 대응 공식 문서를 참조하십시오.
언급URL : https://stackoverflow.com/questions/35935060/how-can-i-generate-an-apk-that-can-run-without-server-with-react-native
'source' 카테고리의 다른 글
HeidiSQ 시작 시 액세스 거부 메시지l (0) | 2022.10.25 |
---|---|
Python 데이터 구조 정렬 목록(알파벳순) (0) | 2022.10.25 |
현재 사용 가능한 GPU를 텐서플로우에서 얻는 방법 (0) | 2022.10.15 |
동기화되지 않은 정적 메서드가 정적 클래스 변수를 수정하지 않는 경우 스레드 안전합니까? (0) | 2022.10.15 |
MariaDB/MySQL에서 잠금 없이 삭제?(InnoDB) (0) | 2022.10.15 |