안드로이드 빌드 및 테스트

2020-12-16 hit count image

RN(react native)로 개발한 프로젝트를 안드로이드(Android)용으로 빌드하고 디바이스에서 테스트해봅시다.

개요

지금까지 개발한 RN(react native)를 안드로이드(Android)용으로 빌드하여 디바이스에 올리고 테스트하는 방법을 소개하겠습니다. 여기에서는 Mac(맥)에서 안드로이드(Android)용 서명 키(Signing Key)를 생성하고 빌드할 예정입니다. 이 블로그는 RN(react native)의 공식 사이트를 참고하였으며 상세한 설명은 공식 사이트를 참고하시기 바랍니다.

이 블로그는 연재물입니다. 아래에 내용을 함께 참고하시길 바랍니다.

안드로이드 서명 키 생성

Mac에서 터미널 프로그램을 열고 RN(react native) 프로젝트 폴더에 android/app 폴더로 이동합니다.

cd [your path]/android/app

아래에 명령어를 통해 안드로이드(Android)용 서명 키(Signing Key)를 발급합니다.

# keytool -genkey -v -keystore my-release-key.keystore -alias my-key-alias -keyalg RSA -keysize 2048 -validity 10000

keytool -genkey -v -keystore [key-name].keystore -alias [key alias] -keyalg RSA -keysize 2048 -validity 10000

Enter keystore password:
Re-enter new password:
What is your first and last name?
  [Unknown]:
What is the name of your organizational unit?
  [Unknown]:
What is the name of your organization?
  [Unknown]:
What is the name of your City or Locality?
  [Unknown]:
What is the name of your State or Province?
  [Unknown]:
What is the two-letter country code for this unit?
  [Unknown]:
Is CN=*****, OU=Unknown, O=Unknown, L=*****, ST=*****, C=***** correct?
  [no]:

Enter key password for <my-key-alias>
    (RETURN if same as keystore password):

전부 입력을 하고 나면 RN(react native) 프로젝트 폴더 하위에 android/app 폴더에 my-release-key.keystore 파일이 생성된 것을 확인할 수 있습니다.

서명 키 설정

서명 키(Signing Key)가 생성되면 gradle에 키를 설정해야합니다. android/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=*****

아래에 코드를 android/app/build.gradle 파일에 추가합니다.

...
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
        }
    }
}
...

빌드

RN(react native)가 있는 프로젝트 폴더에서 android 폴더로 이동한 후 아래에 명령어로 빌드합니다.

# cd android
./gradlew assembleRelease

빌드된 파일은 아래에 경로에 생성됩니다.

android/app/build/outputs/apk/release/app-release.apk

우리는 이 부분에서 아래와 같은 에러가 발생했습니다.

...
Execution failed for task ':app:lintVitalRelease'.
> Lint found fatal errors while assembling a release target.
...

좋은 방법은 아니지만, 우리는 android/app/build.gradle 파일에 아래에 내용을 추가하여 이 부분을 해결했습니다.

...
android {
  ...
  lintOptions {
      checkReleaseBuilds false
      // Or, if you prefer, you can continue to check for errors in release builds,
      // but continue the build even when errors are found:
      abortOnError false
  }
  ...
}
...

빌드된 파일 테스트

안드로이드 디바이스(Android Device)에 기존에 설치된 앱을 삭제하고 아래에 명령어를 실행하여 빌드 파일을 위한 테스트를 진행하세요.

react-native run-android --variant=release

에러 대응

공식 사이트에 내용을 통해 위와 같이 진행했지만 우리는 실제로 아래와 명령어를 통해 빌드 파일을 생성할 때와

./gradlew assembleRelease

아래에 명령어로 직접 디바이스에서 테스할 때,

react-native run-android --variant=release

아래와 같은 에러가 발생하였습니다.

java.lang.RuntimeException: Unable to load script from assets 'index.android.bundle'. Make sure your bundle is packaged correctly or you're running a packager server.

해결 방법으로 아래의 명령어를 먼저 입력하여 index.android.bundle을 생성한 후

react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle

빌드를 하거나

./gradlew assembleRelease

직접 디바이스에 올려 테스트했습니다.

react-native run-android --variant=release

제 블로그가 도움이 되셨나요? 하단의 댓글을 달아주시면 저에게 큰 힘이 됩니다!

앱 홍보

책 홍보

블로그를 운영하면서 좋은 기회가 생겨 책을 출판하게 되었습니다.

아래 링크를 통해 제가 쓴 책을 구매하실 수 있습니다.
많은 분들에게 도움이 되면 좋겠네요.

스무디 한 잔 마시며 끝내는 React Native, 비제이퍼블릭
스무디 한 잔 마시며 끝내는 리액트 + TDD, 비제이퍼블릭
[심통]현장에서 바로 써먹는 리액트 with 타입스크립트 : 리액트와 스토리북으로 배우는 컴포넌트 주도 개발, 심통
Posts