🍣

【ReactNative】GradleとJDKのバージョンの組み合わせでビルドが通らない

2020/12/16に公開2

はじめに

今回はReactNativeAndroidのビルドをかけた時に発生したエラーについて紹介します。
特に、新規にセットアップした端末で既存ソースを動かした場合に発生しやすい内容のため、ハマる方も多いと思います。

何が起きたか

諸々の実行環境を新しくセットアップした端末でAndroidのビルドを行うとエラーが出るようになりました。

FAILURE: Build failed with an exception.

* What went wrong:
Could not initialize class org.codehaus.groovy.runtime.InvokerHelper

ビルドをかけているソース自体は別端末で正常に動作していることが確認できているため、
当該のエラーは端末環境に起因するものだと推察できます。

調べてみると、どうもGradleJDKのバージョンの組み合わせが原因のようです。

Gradleとは?

GradleWikiには以下のようにあります。

https://ja.wikipedia.org/wiki/Gradle

GradleはApache AntやApache Mavenのコンセプトに基づくオープンソースビルド自動化システムであり、プロジェクト設定の宣言にはApache Mavenが利用するXML形式ではなくGroovyベース、もしくはKotlin Scriptベースのドメイン固有言語 (DSL) を採用している。

要するに、ReactNativeの世界でAndroidの実行ファイルのビルドを担っているやつです。

原因

同じような内容のIssueGradleのプロジェクトに上がっていました。

https://github.com/gradle/gradle/issues/12599

上記のIssueの内容をかいつまんで説明すると・・・

  • GradleJDK 14では動作しなくなった
  • Gradleのバージョンを6.3に上げたところ動作するようになった

といったものでした。

ちなみに当該の端末でjava -versionを実行すると、しっかりとJDK 14の文字が。
※現在Javaの最新が15なので、未確認ですが同じ事象が発生するかもしれません。

ReactNativeではどこでGradleのバージョンを指定している?

原因はわかってきましたが、そもそもReactNativeではどこでGradleのバージョンを指定しているのでしょうか?
答えはandroid/gradle/wrapper/gradle-wrapper.propertiesです。
当該ファイルに以下の記載がありました。

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.2-all.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

これの3行目を以下のように修正

- distributionUrl=https\://services.gradle.org/distributions/gradle-6.2-all.zip
+ distributionUrl=https\://services.gradle.org/distributions/gradle-6.3-all.zip

これで問題なく動作するようになりました。

まとめ

今回はReactNaitveJDKGradleの組み合わせでビルドが行えなくなるエラーについて紹介しました。
端末や実行環境のバージョン依存のエラーはなかなか遭遇する機会もないので、一度ハマるとなかなか抜け出せないことが多いです。

今回は対象が既存ソースだったため最初から実行環境に目をつけて対処することができましたが、そうでない場合はもっと時間がかかったように思えます。
そういった場合にこの記事が役立ちましたら幸いです。

Discussion

wing3298wing3298

同じエラーだったのでバージョン合わせて無事解決しました!(@静岡のエンジニア

nekonikinekoniki

コメントありがとうございます。同郷ですね!
解決に役立ったようで何よりです!