はじめに
人生初のAndroidアプリ開発に挑戦した矢先、非常に面倒なエラーに出くわしました。
React Native を使った Android アプリ開発環境を構築中に、Android Studio で androidフォルダ を開いた際に以下のエラーが発生。
同じエラーで詰まっている方の参考になれば幸いです。
こちらのエラー対処は自己責任でお願いします
発生したエラー
Exception java.lang.NoSuchFieldError: Class org.gradle.jvm.toolchain.JvmVendorSpec
does not have member field 'org.gradle.jvm.toolchain.JvmVendorSpec IBM_SEMERU'
[in thread "Daemon worker"]
環境
| 項目 | バージョン |
|---|---|
| Metro | v0.84.3 |
| Gradle | 9.3.1 |
| compileSdkVersion | 36 |
| buildToolsVersion | 36.0.0 |
| Kotlin | 2.1.20 |
原因
Gradle 9.x で JvmVendorSpec.IBM_SEMERU フィールドが削除されたことが原因でした。
また、android/build.gradle の AGP バージョンが省略されているため、
Upgrade Assistant での自動修正もできない状態になっています。
React Native の Gradle Plugin がこのフィールドを参照しようとするため、Gradle 9系では NoSuchFieldError が発生します。
最新バージョンを適用していても、React Native 側がまだ Gradle 9 に未対応なため起きる問題っぽい。
解決方法
1. gradle-wrapper.properties を修正
android/gradle/wrapper/gradle-wrapper.properties を開き、Gradle のバージョンを 8系にダウングレードします。
# 変更前
distributionUrl=https\://services.gradle.org/distributions/gradle-9.3.1-bin.zip
# 変更後
distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-all.zip
2. android/build.gradle の SDK バージョンを安定版に変更
buildscript {
ext {
buildToolsVersion = "35.0.0"
minSdkVersion = 24
compileSdkVersion = 35
targetSdkVersion = 35
ndkVersion = "27.1.12297006"
kotlinVersion = "2.1.20"
}
repositories {
google()
mavenCentral()
}
dependencies {
classpath("com.android.tools.build:gradle:8.13.2") //ここでバージョン設定を忘れない!
classpath("com.facebook.react:react-native-gradle-plugin")
classpath("org.jetbrains.kotlin:kotlin-gradle-plugin")
}
}
apply plugin: "com.facebook.react.rootproject"
3. キャッシュをクリアして再ビルド
cd android
./gradlew clean
その後、Android Studio で File → Sync Project with Gradle Files を実行します。後は勝手にDownloadが始まります。
android studio上で実行しましょう
まとめ
| 問題 | 原因 | 対処 |
|---|---|---|
JvmVendorSpec IBM_SEMERU エラー |
Gradle 9系では該当フィールドが削除済み | Gradle 8.13 にダウングレード |
React Native はまだ Gradle 9 に対応していないため、現時点では Gradle 8.13を手動で設定するのがいいみたいです。公式の対応を待ちつつ、バージョン管理に注意しながら開発を進めていきます。
より賢い方法があれば教えてください...!