web-dev-qa-db-fra.com

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 en être la raison?

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

<uses-sdk Android:minSdkVersion="14" Android:targetSdkVersion="15" />

J'ai aussi ajouté la ligne:

<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />

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

63
Ankit Jain

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

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

<uses-sdk
Android:minSdkVersion="8"
Android:targetSdkVersion="17" />

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

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

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

10
Aurumque

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

Un peu de fond

Traceview est une visionneuse graphique pour les journaux d'exécution que vous créez à l'aide de la classe Debug pour consigner les informations de traçage dans votre code. Traceview peut vous aider à déboguer votre application et à profiler ses performances. L'activer crée un fichier .trace Dans le dossier racine de la carte mémoire qui peut ensuite être extrait par ADB et traité par le fichier de trace traceview pour le 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 devez consulter les erreurs/journaux directement liés à votre application.

Comment l'activer:

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

  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 où démarrer 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 trace. Cette option est moins précise car vous ne modifiez pas le code, mais vous spécifiez quand démarrer et arrêter la journalisation avec DDMS. Bien que vous ayez moins de contrôle sur le début et la fin de la journalisation, cette option est utile si vous n’avez pas accès au code de l’application ou si vous n’avez pas besoin du minutage précis du journal.

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

Si vous utilisez la classe Debug, votre application doit avoir le droit d'écrire sur un stockage externe (WRITE_EXTERNAL_STORAGE).

Si vous utilisez DDMS: Android 2.1 et les appareils antérieurs doivent avoir une carte SD et votre application doit être autorisée à écrire sur la carte SD. Android 2.2 et les périphériques ultérieurs n’ayant pas besoin de carte SD, les fichiers journaux de suivi sont transmis directement à votre ordinateur de développement.

Donc, essentiellement, l'accès traceFile nécessite deux choses

1.) Autorisation d'écrire un fichier journal de suivi, c'est-à-dire WRITE_EXTERNAL_STORAGE Et READ_EXTERNAL_STORAGE Pour une bonne mesure

2.) Un émulateur avec une carte SD attachée avec un espace suffisant. La doc ne dit pas si c'est seulement pour DDMS mais aussi pour le débogage, donc je suppose que c'est également vrai pour le débogage via l'application.

Que dois-je faire avec cette erreur:

Maintenant, l'erreur est essentiellement due à l'absence du chemin de la carte sd pour créer un fichier de trace ou de l'autorisation d'accéder à celui-ci. Ceci est un vieux fil, mais le développeur derrière la prime, vérifiez si vous remplissez les deux conditions préalables. Vous pouvez ensuite rechercher le fichier .trace Dans le dossier sdcard de votre émulateur. S'il existe, il ne devrait pas vous donner ce problème, s'il ne tente pas de le créer en ajoutant le startMethodTracing à votre application.
Je ne sais pas pourquoi il recherche automatiquement ce fichier lorsque le consignateur s’engage. Je pense qu’en cas d’erreur/journal, le consignateur tente en interne d’écrire dans le fichier de trace et ne le trouve pas. Au cas où cela jetterait l'erreur. Après avoir parcouru la documentation, 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 affecte pas directement, vous devez vérifier les journaux/erreurs d'application directs. De plus, les appareils Android = Android 2.2 et les versions ultérieures ne nécessitent pas de carte SD pour la journalisation de la trace DDMS). Les fichiers journaux de trace sont transmis directement à votre ordinateur de développement.

Informations complémentaires sur Traceview:

Copie de fichiers de trace sur une machine hôte

Une fois votre application exécutée et le système 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 exemple de fichier, calc.trace, de l'emplacement par défaut de l'émulateur dans le répertoire/tmp de 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 générée avec ProGuard activé (version en mode de validation), il est possible que certains noms de méthode et de membre soient masqués. Vous pouvez utiliser le fichier mapping.txt de Proguard pour déterminer les noms d'origine non obscurcis. Pour plus d'informations sur ce fichier, voir la documentation Proguard.

Je pense que toute autre réponse concernant le positionnement des instructions oncreate ou la suppression de uses-sdk Ne sont pas liées, mais ceci est Android et je pourrais me tromper. Serait utile de redirigez cette question vers un ingénieur Android ou postez-la sous forme de bogue)

Plus dans le docs

8
Slartibartfast

Essayez de retirer le uses-sdk forme partielle AndroidManifest.xml fichier. cela a fonctionné pour moi!

N'utilisez pas le Android Périphérique virtuel avec une configuration trop basse. Laissez-le être moyen.

6
ANemati

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

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

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

5
Sudip

Je ne voulais pas tout réinstaller, car de nombreuses versions du SDK sont installées et mon environnement de développement est parfaitement configuré. Le remettre en place prend beaucoup trop de temps.

Ce qui a fonctionné pour moi a été de supprimer, puis de recréer le Android Virtual Device, étant certain de saisir une valeur pour la taille de la carte SD (j’ai utilisé 200 Mio).

screenshot of the AVD creation screen

Information additionnelle:

bien que ce qui précède corrige temporairement le problème, il est récurrent. Je viens d'essayer mon application dans Android Studio et je l'ai vu dans le journal de sortie, ce 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 soupçonne que les modifications apportées au journal ne sont pas enregistrées sur la carte SD. Par conséquent, lorsque LogCat tente d’accéder aux journaux, ils ne sont pas là, ce qui provoque le message d’erreur. Le fait de supprimer l’AVD et de le recréer supprime les fichiers. Le prochain lancement est un nouveau lancement permettant à LogCat d’accéder à la carte SD virtuelle.

4
Kyle Falconer

Vous n'aurez pas accès à votre vraie carte SD dans l'émulateur. Vous devrez suivre les étapes de ce tutoriel pour diriger votre émulateur vers un répertoire de votre environnement de développement faisant office de carte SD.

3
Erol

En fait, le problème est que soit /sys/kernel/debug n'est pas monté, ou que le noyau en cours d'exécution n'a pas de traceurs ftrace compilé afin que /sys/kernel/debug/tracing est indisponible. C’est le code qui renvoie 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 du journal pourrait certainement être un peu plus informatif.

1
eMPee584