40 votes

Cordova Android emulation - Error : Impossible de lire la propriété 'semver' de null

J'essaie d'émuler une application Android avec Cordova, mais je reçois ce message d'erreur :

Construit le(s) apk(s) suivant(s) : /Users/jnj/cordova/hello/platforms/Android/build/outputs/apk/Android-debug.apk ANDROID_HOME=/Users/jnj/Library/Android/sdk JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_151.jdk/Contents/Home

Erreur : Impossible de lire la propriété 'semver' de null

Des solutions ?

64voto

Daniel Points 391

Cela est dû à l'utilisation d'un émulateur avec une version instable de l'API Developer Preview.

Vous avez probablement un appareil utilisant l'API 27 (Android 8.1).

Ouvrez votre AVD, supprimez ce périphérique et relancez l'opération.

Il est également utile d'utiliser --target <emulator_name> lors du lancement de l'émulateur si vous en avez plusieurs.

Pour obtenir une liste des noms disponibles à utiliser, appelez la commande emulate avec --list

1 votes

J'ai eu cette erreur aujourd'hui, et je l'ai corrigée en supprimant mon émulateur 8.1 et en installant un émulateur 8.0. Le correctif en amont n'a-t-il pas encore été appliqué ?

1 votes

C'est exact. Android Studio 3.1.2 utilise un émulateur par défaut instable, API 27 (Oreo). La suppression de cet émulateur et l'utilisation d'un émulateur stable (API 8.0 ou inférieure) résout le problème.

0 votes

Note : J'ai découvert que --list ne fonctionne qu'avec run c'est-à-dire, cordova run --list .

62voto

oidualc Points 709

Le puissant Chris a raison, c'est le problème et il l'a corrigé en amont (merci Chris !). Cependant, pour compléter sa réponse, pour les personnes qui, comme moi, ne peuvent pas mettre à jour Cordova-Android pour inclure le correctif, la correction est la suivante (pour Cordova-Android v6.4.0) :

  • trouver le chemin <project_root>/platforms/android/cordova/lib/emulator.js
  • trouver la ligne avd.target = 'Android ' + level.semver + ' (API level ' + api_level + ')';
  • remplacez-le par avd.target = 'Android ' + (level ? level.semver : '') + ' (API level ' + api_level + ')';

Voici l'extrait pertinent patch .

0 votes

Merci, y a-t-il un moyen de faire un crochet ou quelque chose pour que la plateforme add réapplique le correctif ?

0 votes

@themis bien sûr, fondamentalement "level" est erronément censé être toujours défini, mais ce n'est pas le cas, en particulier pas lorsque vous utilisez une version non encore publiée d'Android. Cela provoque un crash de tout le script lorsqu'il essaie d'accéder à level.semver (la version d'Android), mais puisque cette info n'est pas obligatoire pour que l'émulateur fonctionne, le code (level ? level.semver : '') est comme : "hey, est-ce que 'level' est défini ? Si oui, donnez-moi son information semver, sinon ne vous en faites pas, laissez-le vide".

0 votes

Mais je dois le faire à chaque fois que j'ajoute le projet Android

9voto

The Mighty Chris Points 848

Il s'agit d'un bogue dans la méthode list_images de cordova-Android, qui se plante lorsqu'elle rencontre une version d'Android sur votre système qui n'est pas dans sa liste : https://github.com/apache/cordova-Android/pull/422

Vous pouvez appliquer le correctif manuellement dans platforms/android/cordova/emulator.js au sein de votre projet

1voto

Zack Points 143

J'ai eu un problème similaire et ce que j'ai fait c'est d'exécuter adb devices sur le terminal pour vérifier si mon appareil était bien connecté ou non et j'ai constaté que mon appareil n'était pas correctement connecté, je pense qu'il y avait un problème avec mon câble USB, j'ai donc débranché le câble et je l'ai rebranché et j'ai exécuté la même commande adb devices puis il a montré que mon appareil était connecté. Mon problème a été résolu, j'espère que cela aidera quelqu'un d'autre.

0voto

Harry B Points 485

Pour moi, sur un Mac, ce qui suit était nécessaire pour que le sdk fonctionne dans l'émulateur :

Ouvrir Android Studio (et ouvrir votre projet s'il ne s'ouvre pas au démarrage)

Sélectionnez "Tools -> AVD Manager" pour ouvrir l'outil de gestion des périphériques.

Cliquez avec le bouton droit de la souris sur l'image concernée (ou créez-en une si nécessaire).

Sélectionnez "Cold Boot Now" et attendez que l'émulateur démarre.

Dans un terminal, accédez au dossier dans lequel se trouve votre fichier d'enregistrement. platforms y config.xml . Où cordova les commandes peuvent être exécutées

Liste des dispositifs disponibles avec adb devices (Installez-le s'il indique qu'il n'est pas disponible) pour obtenir une liste des appareils en cours d'exécution, et récupérer votre ID d'EMULATEUR. Pour moi, à cette occasion, c'était emulator-5554 .

Exécutez la commande cordova run android --target "emulator-5554" remplacement de emulator-5554 avec votre propre référence.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X