はじめに
普段ReactNativeでアプリを開発する際には、react-native run-android
で自動的にAndroidのプロジェクトが生成されるので、build.gradleに指定するReactNativeのrepositoryについて意識することは少ないと思います。
ただ、今回ReactNativeのNativeUiComponentのライブラリを作るために1からAndroidプロジェクトを作成してbuild.gradleも記述したためにハマってしまったことを書き留めておきます。
問題
早速build.gradleに以下のように記述し、ReactNativeの最新版を利用するようにしていました。
dependencies {
compile 'com.facebook.react:react-native:+'
}
ですが、作成したNativeUiComponentを実際に使ってみると、どうもうまく動かない。 javaのエラーであるはずのメソッドがなかったり、存在しないclassをimportしていたりと、ライブラリを作るために使っているReactNativeと、それを利用する側のアプリで利用しているReactNativeのバージョンが違うような挙動を示しました。
両方最新のバージョンを使うようにしているはずなのにおかしいなとハマってしまいました。
原因
調べてみると、今現在のReactNativeの最新バージョンが0.54.2
であるのに対して、mavenやjcenterにあるReactNativeは最新バージョンが0.20.1
とかなり古いことが原因であることがわかりました。
対処法
Androidプロジェクトで最新のReactNativeを利用する場合は、npm install react-native
でインストールしておきつつ、
repositories {
maven {
url "$rootDir/../node_modules/react-native/android"
}
}
dependencies {
compile 'com.facebook.react:react-native:+'
}
こんな感じでnode_modules/react-native/android
にjarやaarがおいてあるのでそちらを参照するようにしましょう。
終わりに
記事にまとめている最中に見つけたissueですが、同じ問題に対して同じ対処法が示されていました。
基本的に普通にアプリを作る際には気にしなくて良いですが、NativeUiComponentのライブラリを作りたいと思っている方はお気をつけください。