erreur lors de l’ouverture du fichier de trace: aucun fichier ou répertoire de ce type (2)

Je reçois l’erreur ci-dessus:

erreur lors de l’ouverture du fichier de trace: aucun fichier ou répertoire de ce type (2)

lorsque je lance mon application Android sur l’émulateur. Quelqu’un peut-il me dire quelle pourrait être la raison possible de cela?

J’utilise android-sdk-20 et les lignes ci-dessous sont ajoutées à AndroidManifest.xml

 

J’ai aussi ajouté la ligne:

  

comme je pensais qu’il pourrait y avoir un problème avec l’écriture sur la carte SD.

Cela se produit parce que vous n’avez pas installé le minSdkVersion ou targetSdkVersion dans votre ordinateur. Je l’ai testé maintenant.

Par exemple, si vous avez ces lignes dans votre fichier Manifest.xml:

  

Et vous n’avez installé que l’API17 sur votre ordinateur, il vous signalera une erreur. Si vous voulez le tester, essayez d’installer l’autre version de l’API (dans ce cas, l’API 8).

Malgré tout, ce n’est pas une erreur importante. Cela ne signifie pas que votre application est incorrecte.

Désolé pour mon expression. L’anglais n’est pas ma langue. Au revoir!

Je pense que c’est ça le problème

Un peu de fond

Traceview est un visualiseur graphique pour les journaux d’exécution que vous créez en utilisant la classe Debug pour consigner les informations de suivi dans votre code. Traceview peut vous aider à déboguer votre application et à définir ses performances. L’ .trace en créant un fichier .trace dans le dossier racine de sdcard qui peut ensuite être extrait par ADB et traité par le fichier chauve-souris de traceview pour traitement. Il peut également être ajouté par le DDMS.

C’est un système utilisé en interne par l’enregistreur. En général, sauf si vous utilisez traceview pour extraire le fichier de trace, cette erreur ne devrait pas vous déranger. Vous devriez regarder les erreurs / logs directement liés à votre application

Comment puis-je l’activer:

Il existe deux manières de générer des journaux de trace:

  1. Incluez la classe Debug dans votre code et appelez ses méthodes telles que startMethodTracing() et stopMethodTracing() pour démarrer et arrêter la journalisation des informations de trace sur le disque. Cette option est très précise car vous pouvez spécifier exactement par où commencer et arrêter la journalisation des données de trace dans votre code.

  2. Utilisez la fonctionnalité de profilage de méthode de DDMS pour générer des journaux de suivi. Cette option est moins précise car vous ne modifiez pas le code, mais spécifiez plutôt quand démarrer et arrêter la journalisation avec DDMS. Bien que vous ayez moins de contrôle sur le démarrage et l’arrêt exacts de la journalisation, cette option est utile si vous n’avez pas access au code de l’application ou si vous n’avez pas besoin de minutage précis.

Mais les ressortingctions suivantes existent pour ce qui précède

Si vous utilisez la classe Debug, votre application doit avoir l’autorisation d’écrire sur le stockage externe ( WRITE_EXTERNAL_STORAGE ).

Si vous utilisez DDMS: Android 2.1 et les appareils antérieurs doivent avoir une carte SD présente et votre application doit être autorisée à écrire sur la carte SD. Les appareils Android 2.2 et ultérieurs n’ont pas besoin d’une carte SD. Les fichiers journaux de trace sont diffusés directement sur votre ordinateur de développement.

Donc, essentiellement, l’access traceFile nécessite deux choses

1.) Autorisation d’écrire un fichier journal de trace, à savoir WRITE_EXTERNAL_STORAGE et READ_EXTERNAL_STORAGE pour une bonne mesure

2.) Un émulateur avec une carte SD avec un espace suffisant. Le document ne dit pas si cela ne concerne que DDMS mais aussi pour le débogage, donc je suppose que cela est également vrai pour le débogage via l’application.

Que dois-je faire avec cette erreur:

Maintenant, l’erreur est essentiellement une erreur de ne pas avoir le chemin sdcard pour créer un fichier de trace ou de ne pas avoir l’autorisation d’y accéder. Ceci est un ancien thread, mais le développeur derrière la prime, vérifiez si les deux conditions préalables sont remplies. Vous pouvez ensuite rechercher le fichier .trace dans le dossier sdcard de votre émulateur. S’il existe, cela ne devrait pas vous startMethodTracing de problème, s’il ne tente pas de le créer en ajoutant startMethodTracing à votre application.
Je ne sais pas pourquoi il recherche automatiquement ce fichier lorsque l’enregistreur démarre. Je pense que lorsqu’un événement d’erreur / journal se produit, l’enregistreur tente en interne d’écrire dans le fichier de trace et ne le trouve pas, auquel cas l’erreur est renvoyée. Après avoir parcouru les documents, je ne trouve pas trop de références à la raison pour laquelle cela est automatiquement activé. Mais en général, cela ne vous concerne pas directement, vous devriez vérifier les journaux / erreurs des applications directes. En outre, les périphériques Android 2.2 et ultérieurs n’ont pas besoin d’une carte SD pour la journalisation DDMS. Les fichiers journaux de trace sont diffusés directement sur votre ordinateur de développement.

Informations complémentaires sur Traceview:

Copie des fichiers de trace sur une machine hôte

Une fois que votre application a été exécutée et que le système a créé vos fichiers de trace .trace sur un périphérique ou un émulateur, vous devez copier ces fichiers sur votre ordinateur de développement. Vous pouvez utiliser adb pull pour copier les fichiers. Voici un exemple qui montre comment copier un fichier d’exemple, calc.trace, de l’emplacement par défaut de l’émulateur vers le répertoire / tmp sur la machine hôte de l’émulateur:

adb pull /sdcard/calc.trace / tmp Affichage des fichiers de trace dans Traceview Pour exécuter Traceview et afficher les fichiers de trace, entrez traceview. Par exemple, pour exécuter Traceview sur les exemples de fichiers copiés dans la section précédente, utilisez:

traceview / tmp / calc Remarque: Si vous essayez d’afficher les journaux de trace d’une application créée avec ProGuard activé (génération en mode de publication), certains noms de méthode et de membre peuvent être masqués. Vous pouvez utiliser le fichier Proguard mapping.txt pour déterminer les noms originaux non masqués. Pour plus d’informations sur ce fichier, consultez la documentation Proguard.

Je pense que toute autre réponse concernant le positionnement des instructions oncreate ou la suppression des uses-sdk n’est pas liée, mais c’est Android et je peux me tromper. Serait utile de redirect cette question vers un ingénieur Android ou de la poster en tant que bogue

Plus dans les docs

Essayez de supprimer le fichier de formulaire AndroidManifest.xml composant uses-sdk . ça a fonctionné pour moi!

N’utilisez pas le périphérique virtuel Android avec une configuration trop faible. Que ce soit moyen.

Écrivez tout votre code ci-dessous 2 lignes: –

  super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); 

Cela a fonctionné pour moi sans réinstaller à nouveau.

Je ne voulais pas tout réinstaller car j’ai tellement de versions de SDK installées et que mon environnement de développement est configuré correctement. Sa mise en place prend beaucoup trop de temps.

Ce qui a fonctionné pour moi était la suppression, puis la recréation du périphérique virtuel Android, en étant certain de mettre une valeur pour la taille de la carte SD (j’ai utilisé 200 Mio).

capture d'écran de l'écran de création AVD

Information additionnelle:

Bien que ce qui précède corrige le problème temporairement, il est récurrent. Je viens d’essayer mon application dans Android Studio et j’ai vu cela dans le journal de sortie que je n’avais pas remarqué auparavant dans Eclipse:

 "/Applications/Android Studio.app/sdk/tools/emulator" -avd AVD_for_Nexus_S_by_Google -netspeed full -netdelay none WARNING: Data partition already in use. Changes will not persist! WARNING: SD Card image already in use: /Users/[user]/.android/avd/AVD_for_Nexus_S_by_Google.avd/sdcard.img ko:Snapshot storage already in use: /Users/[user]/.android/avd/AVD_for_Nexus_S_by_Google.avd/snapshots.img 

Je suppose que les modifications apscopes au journal ne sont pas enregistrées sur la carte SD. Par conséquent, lorsque LogCat tente d’accéder aux journaux, elles ne sont pas présentes, provoquant le message d’erreur. Le fait de supprimer l’AVD et de le recréer supprime les fichiers, et le lancement suivant est un nouveau lancement, permettant à LogCat d’accéder à la carte SD virtuelle.

Vous n’aurez pas access à votre vraie carte SD dans l’émulateur. Vous devrez suivre les étapes de ce didacticiel pour diriger votre émulateur vers un répertoire de votre environnement de développement en tant que carte SD.

En fait, le problème est que /sys/kernel/debug n’est pas monté ou que le kernel en cours d’exécution n’a pas de traceurs ftrace compilés, de sorte que /sys/kernel/debug/tracing est indisponible. Ceci est le code renvoyant l’erreur ( platform_frameworks_native/libs/utils/Trace.cpp ):

 void Tracer::init() { Mutex::Autolock lock(sMutex); if (!sIsReady) { add_sysprop_change_callback(changeCallback, 0); const char* const traceFileName = "/sys/kernel/debug/tracing/trace_marker"; sTraceFD = open(traceFileName, O_WRONLY); if (sTraceFD == -1) { ALOGE("error opening trace file: %s (%d)", strerror(errno), errno); sEnabledTags = 0; // no tracing can occur } else { loadSystemProperty(); } android_atomic_release_store(1, &sIsReady); } } 

Le message de journal pourrait certainement être un peu plus informatif.