0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[SDK46] hermesをオンにするとAndroidのreleaseビルドでクラッシュする

Posted at

発生した問題

  • Androidのreleaseビルドでのみクラッシュする
    • 実機でアプリを起動直後にクラッシュする
  • debugビルドでは問題ない。エラーもなくエミュレータで立ち上がる
  • 実機をMacに有線で繋ぎAndroid StudioのLogcatを開くと以下のエラーを確認できる(本当はもっとたくさん出てる)
java. lang. Exception: No launchable update was found. If this is a bare workflow app, make sure you have configured expo-updates correctly in android/app/build.gradle.
com.facebook.jni.CppException: Compiling JS failed: Wrong bytecode version. Expected 85 but got 84 Buffer size

環境

  • expo: 46.0.16
  • react: 18.0.0
  • react-native: 0.69.6

経緯

  • SDK44 -> SDK46へアップグレード完了
  • 実機でreleaseビルドが問題なく動くことを確認する
  • Upgrade Helperに沿って修正したタイミングでAndroidのhermesをオフにしてしまったことに気づく
  • app/build.gradleenableHermes: trueとする
  • releaseビルドでクラッシュする問題が発生

解決策

https://github.com/facebook/react-native/issues/34114
このissueに記載されている解決策に沿ってhermesCommandの一文を消す

app/build.gradle
project.ext.react = [
    enableHermes: true,
    cliPath: new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/cli.js",
    // ここの一文を消す→ hermesCommand: new File(["node", "--print", "require.resolve('hermes-engine/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/%OS-BIN%/hermesc",
    composeSourceMapsPath: new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/scripts/compose-source-maps.js",
]

これで問題が解決しました。
ちょっともう記憶にないのですが、以前expo-modulesに移行したときに移行ドキュメントに従って追加したhermesCommandが原因だったようです。

振り返り

エラー文で検索するとexpo-updateや、依存しているsentry-expoを疑う投稿が複数あり、Androidのreleaseビルドのみクラッシュするという症状も同じだったので、その方向で調査を続けてだいぶ時間を溶かしてしまいました。
今回の自分の問題はhermesをオフにすれば消えるので、hermesの設定周りからもう少し早く見直すべきでした。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?