개발 준비

npm install -g create-react-native-app

creact-react-native-app APP_NAME

apk 만들기

apk로 빌드를 하려면 npm run eject를 통해서 개발환경을 풀어야한다.

eject 시 두가지 옵션이 있다.

  • React Native: I'd like a regular React Native project.
  • ExpoKit: I'll create or log in with an Expo account to use React Native and the Expo SDK.
    -----------2017-08-18-------10.37.18

우선 ExpoKit이 로깅 확인 등에서 좋을 거 같아서 ExpoKit으로 선택하고, eject 후에 https://facebook.github.io/react-native/docs/signed-apk-android.html 를 참고하여 빌드 세팅을 했다.

그런데 빌드가 안 된다.

빌드 중

Process 'command './.expo-source/android/detach-scripts/prepare-detached-build.sh'' finished with non-zero exit value 127

같은 에러가 난다.

요건 npm install -g exp를 한번 해주면 된다.

그래도 빌드하다 보면 :app:exponentPrebuildStep 에서 .expo/PATH: No such file or directory 같은 에러가 나는데, 요건 exp path를 한번 실행해주면 된다.

빌드는 성공해서 app-release.apk가 잘 생성이 된다.

그런데 앱 크래시가 난다...

해당 apk를 설치하고 실행해보면 앱 크래시가 난다.

com.facebook.react.bridge.UnexpectedNativeTypeException: TypeError: expected dynamic type `string', but had type `int64'

안드로이드 스튜디오를 이용해서 에러 로그를 자세히 보니

08-18 01:43:14.134 6136-6175/? W/com.facebook.internal.Validate: FacebookActivity is not declared in the AndroidManifest.xml, please add com.facebook.FacebookActivity to your AndroidManifest.xml file. See https://developers.facebook.com/docs/android/getting-started for more info.

이런 로그가 있다.

혹시 이게 문제인가 싶어서 AndroidKanifest.xml에 관련 값 구글링해서 넣어줘도 앱 크래시가 난다.

ExpoKit 기반 빌드를 빼보자

혹시 expo가 문제인가 싶어서, 프로젝트 새로 만들고 js와 리소스들 그대로 카피한 다음 eject 할 때 ExpoKit 기반이 아닌 일반 React Native 기반으로 eject를 해봤다. 그리고 빌드 세팅 후 apk를 말은 다음 실행해봤다.

잘 된다.

ExpoKit에 뭔가 문제가 있거나, ExpoKit으로 eject 할 때 잘못 입력한 값이 있거나 그런 듯... 다시 해봐야 할 것 같다.