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.
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
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 .
$ 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