web-dev-qa-db-fra.com

L'exécution a échoué pour la tâche ': react-native-gesture-handler: compileDebugJavaWithJavac'

Je corrige un problème d'incompatibilité lié à AndroidX en ajoutant 2 lignes à gradle.properties sous Android pour mon projet RN 0.59.

Android.useAndroidX=true
Android.enableJetifier=true

Maintenant, il y a une autre erreur avec run-Android relatif à react-native-gesture-handler. Alors je yarn remove le courant react-native-gesture-handler de 1.2.0 et l'ajouter à nouveau. La nouvelle version est 1.3.0. Voici l'erreur:

> Task :react-native-gesture-handler:compileDebugJavaWithJavac
C:\D\code\js\emps_app\node_modules\react-native-gesture-handler\Android\src\main\Java\com\swmansion\gesturehandler\react\RNGestureHandlerEvent.Java:3: error: package Android.support.v4.util does not exist
import Android.support.v4.util.Pools;
                              ^
C:\D\code\js\emps_app\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 =
                            ^
C:\D\code\js\emps_app\node_modules\react-native-gesture-handler\Android\src\main\Java\com\swmansion\gesturehandler\react\RNGestureHandlerStateChangeEvent.Java:3: error: package Android.support.v4.util does not exist
import Android.support.v4.util.Pools;
                              ^
C:\D\code\js\emps_app\node_modules\react-native-gesture-handler\Android\src\main\Java\com\swmansion\gesturehandler\react\RNGestureHandlerStateChangeEvent.Java:19: error: package Pools does not exist
  private static final Pools.SynchronizedPool<RNGestureHandlerStateChangeEvent> EVENTS_POOL =
                            ^
C:\D\code\js\emps_app\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);
                   ^
C:\D\code\js\emps_app\node_modules\react-native-gesture-handler\Android\src\main\Java\com\swmansion\gesturehandler\react\RNGestureHandlerStateChangeEvent.Java:20: error: package Pools does not exist
          new Pools.SynchronizedPool<>(TOUCH_EVENTS_POOL_SIZE);
                   ^
Note: C:\D\code\js\emps_app\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

> Task :react-native-gesture-handler:compileDebugJavaWithJavac FAILED

FAILURE: Build failed with an exception.

L'erreur est liée à 6 paquets manquants et je suppose qu'elle est toujours liée à Androidx. Mais je n'ai aucune idée de comment y remédier. Il existe un problème (pour RN-gesture-handler) suggérant une rétrogradation vers la version 1.0.5 pour la correction mais je n'aimerais pas utiliser une version aussi ancienne.

5
user938363

Selon mon ouverture, cette erreur se produit en raison d'une installation et d'une liaison incomplètes de la bibliothèque npm. Suit ces étapes: - Exécutez d'abord cette commande dans votre projet (npm install --save react-native-gesture-handler). Liez ensuite cette bibliothèque en exécutant cette commande (lien React-native). Exécutez ensuite votre projet sur des appareils ou un simulateur, cela fonctionnera. Si cela ne fonctionne pas, installez et liez manuellement cette bibliothèque à partir du lien ci-dessous. https://www.npmjs.com/package/react-native-gesture-handler

0
kumar ujjawal

Voici une autre réponse pour les personnes utilisant RN <0,60, tout comme l'OP. J'utilise react-native-gesture-handler v 1.3.0 car c'était la dernière version avant la mise à jour de la bibliothèque vers AndroidX.

Bien que le PO se soit heurté à cela en ajoutant

Android.useAndroidX=true
Android.enableJetifier=true

à son projet, je l'ai involontairement ajouté en ajoutant une autre bibliothèque qui avait été convertie en AndroidX, react-native-safe-area-context. Je m'attendais à ce que ma build échoue quand il est arrivé à cette bibliothèque, mais je suis vraiment confus quand il a échoué avant cela, lors de la construction de react-native-gesture-handler. Apparemment, si useAndroidX et enableJetifier sont définis sur true n'importe où dans la build, cela affecte toute la build.

J'ai résolu le problème en corrigeant la nouvelle bibliothèque pour rétablir AndroidX. J'ai obtenu le patch ici .

0
chetstone

$ npm i react-native-gesture-handler

$ react-native link react-native-gesture-handler

Installer Jetifier ->

$ npm install --save-dev jetifier

ou

$ yarn add -D jetifier

Ensuite -> Modifiez votre package.json et ajoutez un script de post-installation: "postinstall": "npx jetify", comme ceci:

{
    "version": "2.0.0",
    "lockfileVersion": 1,
    "requires": true,
    "scripts": {
          "postinstall": "npx jetify"
    },
    ....
 }

$ npm install ou $ yarn

$ npx jetify

lien

0
Wasi Sadman