web-dev-qa-db-fra.com

Impossible de résoudre le symbole Android.support.v4.util.Pools dans react-native-gesture-handler

Je travaille sur un projet natif réactif.

Après avoir mis à jour mes modules en exécutant "npm install",

Je ne trouve pas la classe 'Pools' située dans 'Android.support.v4.util' dans 'react-native-gesture-handler'.

  1. Pourquoi cette erreur se produit-elle?
  2. Comment puis-je réparer cela?

1. erreur (dans le cas où exécuter "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. Réaction des informations sur l'environnement natif:

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")
}

J'attends la fin du projet de construction.

17
Sobright

J'avais ce même problème avec React Native 0.60.0 et aucune des réponses ci-dessus ne m'a donné de solution, j'ai donc résolu ce problème:

npm i jetifier
npx jetify

jetifier est un outil de transition AndroidX au format npm, avec un style compatible avec natif réactif.

Si vous utilisez React modules natifs avec un code Java code non converti en AndroidX et que votre application est AndroidX, vous en aurez probablement besoin)

donc, dans RN 0.60, vous avez besoin d'AndroidX

21
Andres Felipe
  • Projet ouvert utiliser AndroidStudio3.3 +

AS project

  • Cliquez sur le module Android [react-native-gesture-handler]
  • Click top Refactor -> Migrer vers AndroidX
  • Terminé
18
playSCforever

Ouverture du projet dans Android studio -> accédez au fichier spécifié dans RNGestureHandler

enlève ça

import Android.support.v4.util.Pools;

Et ajoutez ceci

import androidx.core.util.Pools;
5
Ammar Tariq

Une chose similaire m'est arrivée. J'ai vérifié Android sur https://developer.Android.com/reference/Android/support/v4/util/Pools

  • Allez sur Android/build.gradle

    • Dans la section dépendances ajoutez
      classpath "com.Android.support:support-compat:28.0.0-alpha1"

C'est la première fois que j'écris une réponse sur un débordement de pile, j'espère que c'est dans un bon format de réponse.

4
Mahir Kadić

Veuillez supprimer ces deux lignes de gradle.properties

Android.useAndroidX=true

Android.enableJetifier=true

2
Jaymin Panchal

J'étais également confronté au même problème. Assurez-vous simplement d'avoir mis à jour la version de react-native-gesture-handler. Si vous le faites, cela devrait fonctionner. pour moi, cela a fonctionné de cette façon.

2
Code Cooker

Rien ne fonctionnait pour moi mais cela a fonctionné.

Faire le enableJetifier=false dans gradle.properties

Android.useAndroidX=true
Android.enableJetifier=false
2
Siraj Alam

Pour que cela fonctionne, il suffit de modifier Android>gradle.properties fichier en ajoutant ces deux lignes:

Android.useAndroidX=true
Android.enableJetifier=true
1
MUSTAPHA GHLISSI

Apportez des modifications dans gradle.properties

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

ou

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

Appel npx jetify s'exécute dans la cible postinstall de votre package.json (chaque fois que vos dépendances sont mises à jour, vous devez à nouveau jetify)

1
DURGESH