source

react-native를 사용하여 서버 없이 실행할 수 있는apk를 생성하려면 어떻게 해야 합니까?

nicesource 2022. 10. 15. 08:36
반응형

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.keystoreandroid/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.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) 이익!

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

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

필요한 것은 다음과 같습니다.

  1. android/app/build.gradle
project.ext.react = [
    ...
    bundleInDebug: true, // add this line
]
  1. 프로젝트의 루트 디렉토리에서 이 명령어를 실행합니다.
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
  1. 다음 ''를 실행합니다.' ''를 클릭합니다../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 생성에 대한 대응 공식 문서를 참조하십시오.

리액트 네이티브 생성 서명된 APK

언급URL : https://stackoverflow.com/questions/35935060/how-can-i-generate-an-apk-that-can-run-without-server-with-react-native

반응형