Hermes는 페이스북이 React Native를 위해 만든 안드로이드용 자바스크립트 엔진이죠. 컴파일 시점에 자바스크립트를 미리 Bytecode로 만들어서 사용하니까 초기화 단계가 필요 없어져서 앱이 초기 구동되는 시간이 줄어들고, 모바일 환경에서 RN을 동작시키기 위해 필요한 스펙만을 구현한 경량 엔진이기 때문에 앱 크기(APK)가 줄어들고 메모리 사용량도 적어진다는 거죠. 여기를 보시면 어떤 구조로 동작하는지 이해가 쉽게 되실 거예요.
RN 0.60.2 버전부터 사용이 가능하고 android/app/build.gradle
에서 enableHermes
옵션만 true로 변경해주시면 됩니다. (너무 쉬우니까 불안)
project.ext.react = [
entryFile: "index.js",
enableHermes: true, // clean and rebuild if changing
]
기존 빌드가 있으면 깨끗하게 지운 뒤 다시 빌드하면 끝!
$ cd android && ./gradlew clean
$ react-native run-android
android/app/build.gradle
에서 enableProguardInReleaseBuilds
옵션을 true로 사용하고 계신다면 앱이 크래쉬가 발생하기 때문에 android/app/proguard-rules.pro
파일에 아래 룰을 추가해주셔야 해요. PR을 날려두긴 했는데 반영이 될지 모르겠네요. 이런 꼼꼼하지 못한 모습이 늘 아쉽네요.
-keep class com.facebook.hermes.unicode.** { *; }
모든 스펙이 구현된 엔진이 아니라고 이야기 드렸는데 Proxy가 누락되어 있어요. 그렇기 때문에 MobX 5 버전을 사용할 수 없어요. 얼마 전에 4에서 5로 버전을 올렸는데 이런 일이 ㅠ_ㅠ. 하지만 다행인 건 MobX가 Proxy를 사용하지 않는 4버전과 5버전을 동시에 유지 보수를 하고 있다는 겁니다. (개발자의 열정 인정!) 버전 간에 Breaking changes가 없기 때문에 쉽게 다운그레이드 할 수 있어요.
Cake는 4.4 버전도 지원하는데 실행에 문제가 있네요. React Native가 지원되는 버전에서는 동작해야 할 것 같은데 해결이 됐으면 좋겠네요. 해결되지 않으면 Multiple APK로 플랫폼 별로 나눠서 다른 엔진을 사용하도록 빌드해서 배포를 할지 안드로이드 최소 버전을 올릴지 고민이 될 것 같네요.
<aside> 💡 젤리빈에서도 동작하도록 수정됐고 다음 릴리즈에 반영된다고 하네요.
</aside>