18
votes

I am working on react-native project.

After I update my modules by running 'npm install',

I cannot find class 'Pools' which located in 'android.support.v4.util' in 'react-native-gesture-handler'.

  1. Why Is this error occur?
  2. How can I fix this?

1.error (In case run "react-native run-android") -cmd

Task :react-native-gesture-handler:compileDebugJavaWithJavac FAILED
D:\weneepl\project_y-test2_t\project_y\node_modules\react-native-gesture-handler\android\src\main\java\com\swmansion\gesturehandler\react\RNGestureHandlerEvent.java:3: error: cannot find symbol
import android.support.v4.util.Pools;
                              ^
  symbol:   class Pools
  location: package android.support.v4.util
D:\weneepl\project_y-test2_t\project_y\node_modules\react-native-gesture-handler\android\src\main\java\com\swmansion\gesturehandler\react\RNGestureHandlerEvent.java:19: error: package Pools does not exist
  private static final Pools.SynchronizedPool<RNGestureHandlerEvent> EVENTS_POOL =
                            ^
D:\weneepl\project_y-test2_t\project_y\node_modules\react-native-gesture-handler\android\src\main\java\com\swmansion\gesturehandler\react\RNGestureHandlerStateChangeEvent.java:3: error: cannot find symbol
import android.support.v4.util.Pools;
                              ^
  symbol:   class Pools
  location: package android.support.v4.util
D:\weneepl\project_y-test2_t\project_y\node_modules\react-native-gesture-handler\android\src\main\java\com\swmansion\gesturehandler\react\RNGestureHandlerStateChangeEvent.java:18: error: package Pools does not exist
  private static final Pools.SynchronizedPool<RNGestureHandlerStateChangeEvent> EVENTS_POOL =
                            ^
D:\weneepl\project_y-test2_t\project_y\node_modules\react-native-gesture-handler\android\src\main\java\com\swmansion\gesturehandler\react\RNGestureHandlerEvent.java:20: error: package Pools does not exist
          new Pools.SynchronizedPool<>(TOUCH_EVENTS_POOL_SIZE);
                   ^
D:\weneepl\project_y-test2_t\project_y\node_modules\react-native-gesture-handler\android\src\main\java\com\swmansion\gesturehandler\react\RNGestureHandlerStateChangeEvent.java:19: error: package Pools does not exist
          new Pools.SynchronizedPool<>(TOUCH_EVENTS_POOL_SIZE);
                   ^
Note:D:\weneepl\project_y-test2_t\project_y\node_modules\react-native-gesture-handler\android\src\main\java\com\swmansion\gesturehandler\react\RNGestureHandlerButtonViewManager.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
6 errors

2.React Native Environment Info:

System:
      OS: Windows 10
      CPU: (4) x64 Intel(R) Core(TM) i5-7500 CPU @ 3.40GHz
      Memory: 7.59 GB / 15.96 GB
    Binaries:
      Yarn: 1.15.2 - C:\Program Files (x86)\Yarn\bin\yarn.CMD
      npm: 6.9.0 - C:\Program Files\nodejs\npm.CMD
    IDEs:
      Android Studio: Version  3.4.0.0 AI-183.5429.30.34.5452501

3.package.json

{
 "name": "project_y",
 "version": "0.0.1",
 "private": true,
 "scripts": {
 "start": "react-native run-android",
 "gradle-clean": "cd android & gradlew clean",
 "start-root": "react-native run-android --root",
 "test": "jest",
 "bundle": "react-native bundle --platform android --dev false --entry-file     
 index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/",
 "build": "cd android & gradlew assembleDebug"
 },
 "dependencies": {
  "axios": "^0.18.0",
  "moment": "^2.24.0",
  "prop-types": "^15.7.2",
  "react": "16.6.3",
  "react-native": "0.58.5",
  "react-native-android-open-settings": "^1.3.0",
  "react-native-custom-checkbox": "^1.5.2",
  "react-native-gesture-handler": "^1.0.16",
  "react-native-grid-list": "^1.0.9",
  "react-native-image-resizer": "^1.0.1",
  "react-native-kakao-logins": "^1.3.6",
  "react-native-linear-gradient": "^2.5.3",
  "react-native-picker-select": "^6.0.0",
  "react-native-shadow": "^1.2.2",
  "react-native-super-grid": "^3.0.3",
  "react-native-svg": "^9.2.4",
  "react-native-vector-icons": "^6.3.0",
  "react-native-webview": "^5.5.0",
  "react-navigation": "^3.3.2",
  "react-redux": "^6.0.1",
  "redux": "^4.0.1"
 },
 "devDependencies": {
  "babel-core": "7.0.0-bridge.0",
  "babel-jest": "24.1.0",
  "jest": "24.1.0",
  "metro-react-native-babel-preset": "0.52.0",
  "react-test-renderer": "16.6.3",
  "redux-devtools": "^3.5.0"
 },
 "jest": {
   "preset": "react-native"
 },
 "rnpm": {
  "assets": [
    "./assets/fonts/",
    "resources/fonts"
  ]
 }
}

4.build.gradle(app/)

apply plugin: "com.android.application"

import com.android.build.OutputFile

project.ext.react = [
entryFile: "index.js"
]

apply from: "../../node_modules/react-native/react.gradle"
def enableSeparateBuildPerCPUArchitecture = false
def enableProguardInReleaseBuilds = false

android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion

defaultConfig {
    applicationId "com.projecty.projecty"
    minSdkVersion rootProject.ext.minSdkVersion
    targetSdkVersion rootProject.ext.targetSdkVersion
    versionCode 10
    versionName "1.9"
}
splits {
    abi {
        reset()
        enable enableSeparateBuildPerCPUArchitecture
        universalApk false  // If true, also generate a universal APK
        include "armeabi-v7a", "x86", "arm64-v8a"
    }
}
buildTypes {
    release {
        minifyEnabled enableProguardInReleaseBuilds
        proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
    }
}
applicationVariants.all { variant ->
    variant.outputs.each { output ->

        def versionCodes = ["armeabi-v7a":1, "x86":2, "arm64-v8a": 3]
        def abi = output.getFilter(OutputFile.ABI)
        if (abi != null) {  // null for the universal-debug, universal-release variants
            output.versionCodeOverride =
                    versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
        }
    }
}
}

dependencies {
 implementation 'com.google.android.gms:play-services-base:12.0.0'
 implementation 'com.android.installreferrer:installreferrer:1.0'
 implementation 'com.igaworks.adbrix:abx-common-rm:+'

 implementation project(':react-native-webview')
 implementation project(':react-native-android-open-settings')
 implementation project(':react-native-kakao-logins')
 implementation project(':react-native-svg')
 implementation project(':react-native-linear-gradient')
 implementation project(':react-native-vector-icons')
 implementation project(':react-native-gesture-handler')

 implementation fileTree(dir: "libs", include: ["*.jar"])
 implementation "com.android.support:appcompat- 
 v7:${rootProject.ext.supportLibVersion}"
 compile(name: 'IgawSSP_v2.0.6a', ext: 'aar')
 repositories {
    flatDir {
        dirs 'libs'
    }
 }
implementation "com.facebook.react:react-native:+"  // From node_modules
}


task copyDownloadableDepsToLibs(type: Copy) {
 from configurations.compile
 into 'libs'
}

subprojects {
 repositories {
    mavenCentral()
    maven { url 
 'http://devrepo.kakao.com:8088/nexus/content/groups/public/' }
 }
}

5.build.gradle(android/)

buildscript {
    ext {
        buildToolsVersion = "28.0.2"
        minSdkVersion = 16
        compileSdkVersion = 28
        targetSdkVersion = 28
        supportLibVersion = "28.0.0"
    }
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.3.2'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        mavenLocal()
        google()
        jcenter()
        flatDir {
            dirs 'libs'
        }
        maven {
            url 'https://dl.bintray.com/igaworks/AdbrixRmSDK'
        }
        maven {
            // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
            url "$rootDir/../node_modules/react-native/android"
        }
        mavenCentral()
        maven {
            url 'http://devrepo.kakao.com:8088/nexus/content/groups/public/'
        }


    }
}


task wrapper(type: Wrapper) {
    gradleVersion = '4.7'
    distributionUrl = distributionUrl.replace("bin", "all")
}

I expect the complete of build project.

9

9 Answers

26
votes

I was having this same issue with React Native 0.60.0 and none of above answers gave me a solution, so i fixed with this:

npm i jetifier
npx jetify

jetifier is an AndroidX transition tool in npm format, with a react-native compatible style.

If you use React Native modules with native Java code that isn't converted to AndroidX, and your app is AndroidX, you probably need this

so, in RN 0.60 you need AndroidX

19
votes
  • Open project use AndroidStudio3.3+

AS project

  • Click module android[react-native-gesture-handler]
  • Click top Refactor -> Migrate to AndroidX
  • Done
6
votes

Opened the project in android studio -> browse to the specified file in RNGestureHandler

remove this

import android.support.v4.util.Pools;

And add this

import androidx.core.util.Pools;
4
votes

Similar thing happened to me. I checked android documentation at https://developer.android.com/reference/android/support/v4/util/Pools

  • Go to android/build.gradle

    • In section dependencies add
      classpath "com.android.support:support-compat:28.0.0-alpha1"

This is my first time writing answer on stack overflow, I hope it is in good answer format.

2
votes

Please remove these two lines from gradle.properties

android.useAndroidX=true

android.enableJetifier=true

2
votes

Nothing was working for me but this worked.

Make the enableJetifier=false in gradle.properties

android.useAndroidX=true
android.enableJetifier=false
2
votes

I was also facing the same issue. Just make sure that you've updated the version of react-native-gesture-handler. If you do so then it should work. for me it worked this way.

1
votes

Make changes in gradle.properties

android.useAndroidX=true
android.enableJetifier=true
npm install --save-dev jetifier

or

npm install jetifier
npx jetify
npx react-native run-android

Call npx jetify run in the postinstall target of your package.json (Any time your dependencies update you have to jetify again)

1
votes

To make that working just edit android>gradle.properties file by adding these two lines:

android.useAndroidX=true
android.enableJetifier=true