ReactNative: onHost 생명주기 메소드가 없을 때



(글 작성한 시점의 최신 ReactNative ver: 0.40)


기존 Android 네이티브 앱에 ReactNative를 이식하기 위해서 ReactNative 공식 doc에서 가이드해주는 Integration With Existing Apps를 따라하고 있었다.



1. 이슈 내용


하라는대로 제대로 잘 따라한 것 같은데, 일단 첫번째 문제는 doc에서 사용하라는 onHost... 로 시작하는 생명주기 메소드들을 찾을 수가 없었다. (아래 스크린샷의 메소드)



일단 뭐 대충 보니 메소드 이름과 파라미터들은 달랐지만 onPause()onResume()onDestroy() 라는 메소드들이 있어서 '뭐 아직 문서가 업데이트 되지 않았나보다' 하고 대수롭지 않게 넘기고 onPause()onResume()onDestroy() 메소드들을 사용했다.


그러고나서 빌드하니 발생하는 RuntimeException:
IllegalAccessError??



2. 이슈 원인

일단 원인은 프로젝트 루트의 build.gradle 에서 maven 코드 블럭 추가시 잘못된 경로를 추가한 문제였다.


doc에 나오는 정확히 $rootDir/../node_modules/react-native/android 이 부분이다.

일반적으로 이 doc 문서를 보면서 차근차근 따라했다면, 프로젝트 루트안에 node_modules 폴더가 만들어졌으므로 node_modules 폴더가 저 경로 안에 위치할리가 없다.



3. 해결방법

해당 url을 $rootDir/node_modules/react-native/android 로 수정하면 앞에서 언급한 onHostPause()onHostResume()onHostDestroy() 메소드들을 사용할 수도 있고 RuntimeException도 당연히 해결할 수 있다. (또한 같은 이름의 class라 몰랐겠지만, 잘못 import 되었던 LifecycleState 클래스도 제대로 된 경로의 클래스를 import 될 것이다.)

댓글

이 블로그의 인기 게시물

5년차의 슬럼프

10대 여고생이 만난 프로그래밍 - 마이크로소프트웨어 31주년 컨퍼런스

About Me