とあるアプリを React Native で開発していて、Android 3.1 系統にアップグレードしたら、gradle sync が通らなくなってしまって修正しました。
次の2つのことが同時に発生したことが原因でした。
- gradle 4.2 を適用したこと
- @hoge/ と スコープを限定している npm モジュールを利用してる
によると、gradle4.2 で、path-separator-characters ( /, \, :, <, >, ", ?, * )を使用したパスの指定は deprecated になったようです。
アプリでは、@terrylinla/react-native-sketch-canvas を下記のコマンドでインストールしていました。
$npm i -s @terrylinla/react-native-sketch-canvas
$react-native link
こうすると、settings.gradle と app/build.gradle にそれぞれ次のような行が追加されます。
- settings.gradle
include ':@terrylinla/react-native-sketch-canvas'
project(':@terrylinla/react-native-sketch-canvas').projectDir = new File(rootProject.projectDir, '../node_modules/@terrylinla/react-native-sketch-canvas/android')
- app/build.gradle
compile project(':@terrylinla/react-native-sketch-canvas')
これらのファイルの、 @terrylinna/
のうち /
の文字が原因です。
Hotfix になるのですが、 @terrylinla/
を削除しても動作に支障はないので次のように修正して解決しました。
- settings.gradle
include ':@terrylinla/react-native-sketch-canvas'
project(':@terrylinla/react-native-sketch-canvas').projectDir = new File(rootProject.projectDir, '../node_modules/@terrylinla/react-native-sketch-canvas/android')
↓
include ':react-native-sketch-canvas'
project(':react-native-sketch-canvas').projectDir = new File(rootProject.projectDir, '../node_modules/@terrylinla/react-native-sketch-canvas/android')
- app/build.gradle
compile project(':@terrylinla/react-native-sketch-canvas')
↓
compile project(':react-native-sketch-canvas')