2011-11-12 22 views
7

Sono nuovo nel mondo Android.Impossibile aprire il file di traccia di stack '/data/anr/traces.txt': Autorizzazione negata

Ho fatto un'applicazione di una registrazione utente. Sta funzionando bene. ma quando ho provato ad aggiungere un filatore al mio file di attività, è stato mostrato un errore di avd, come,

la registrazione della domanda (com.students di processo) si è fermato inaspettatamente. per favore riprova

viene.

ed il mio registro gatto sta mostrando l'errore

"11-12 ottobre: ​​42: 06,816: E/dalvikvm (313): Impossibile aprire il file di traccia dello stack '/ dati/ANR/tracce. txt ': Autorizzazione negata "

Qual è in realtà quell'errore? Come posso liberarmene?

+2

Mostra il codice che si sta utilizzando e anche il completo stack trace. –

+1

L'applicazione si è arrestata in modo anomalo a causa di qualche altra ragione (errore nel codice). È possibile ignorare l'errore "Impossibile aprire la traccia dello stack ..", non è la causa del blocco dell'applicazione. Si prega di inviare lo stack-trace completo e la porzione pertinente del codice dell'applicazione. – Karthik

+0

Si potrebbe anche ottenere questo errore se non si imposta la SDCard sul proprio emulatore. –

risposta

3

Questo era un problema che avevo quando ero nuovo ad Android. Poi ho appreso che il messaggio sull'impossibilità di scrivere su trace.txt non era il vero problema con il programma.

La soluzione a questo problema è quindi di trovare e correggere il motivo effettivo (non correlato a questo messaggio) del programma in arresto anomalo. Quindi questo messaggio (che riflette un problema di configurazione nel sistema di segnalazione degli arresti anomali) non si verificherà più.

+4

Questo dovrebbe essere un commento. Non mostro come hai corretto il tuo errore. –

+0

Questa è davvero la risposta corretta - tuttavia sono un po 'a disagio con il fatto che dopo la modifica di un moderatore ciò che è attualmente in mostra è la mia riscrittura precedentemente descritta di esso, senza il testo originale (dal richiedente stesso) che io avevo accuratamente conservato quando l'ho modificato. –

10

Si sta tentando di accedere alla memoria esterna. Assicurati di avere l'autorizzazione necessaria definita nel tuo file Manifest. Questo può essere fatto aggiungendo

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
+2

Questo non sembra risolvere l'errore di permesso di scrittura per uno dei miei dispositivi di test, Android 2.3.6 – nmr

+10

Questa risposta è ** assolutamente errata e un pessimo consiglio **. Innanzitutto, il problema è con Android stesso, non con il programma applicativo.Ma anche se fosse il programma in fase di scrittura, questa risposta è ovviamente errata in quanto **/data non è un percorso di archiviazione esterna **. –

4

Questo errore non ha nulla a che fare con la tua app. Il file di traccia dello stack di riferimento che viene generato quando l'app si arresta in modo anomalo, in modo che l'utente possa segnalarlo al publisher. Il motivo per cui vedi questo errore è che la tua app non è stata installata attraverso il mercato Android, quindi non ha il permesso di scrivere su quel file. Gli errori che la tua app sta generando durante il debug possono essere visti in LogCat e una traccia dello stack verrà scaricata lì descrivendo l'errore.

+1

Questa risposta è fondamentalmente corretta in quanto il particolare messaggio indica un problema nel meccanismo di segnalazione degli errori, ma non il reale * motivo per cui qualcosa è andato in crash *. La causa del crash (se si tratta in effetti di un crash di un'app sviluppata e non di un crash temporaneo di qualcos'altro) dovrebbe essere determinata con logcat e/o altri strumenti di debug e risolti. Sono meno certo riguardo al link di spiegazione offerto il permesso mancante di non essere un'installazione di mercato (piuttosto che una semplice errata configurazione della build di Android installata) - qualche riferimento a questa teoria? –

+0

In particolare, sui dispositivi attuali, questo file è scrivibile in tutto il mondo. –

+0

@ChrisStratton Sto votando questa risposta mentre mi sono imbattuto in questo problema e dopo alcune indagini ho scoperto che il motivo del fallimento era perché l'app non era affidabile (non proveniva dal Play Store). Questa è una politica applicata a livello di kernel. Ho dovuto guardare i log del kernel per vederlo. Quindi la risposta di Sani è piuttosto accurata, anche se non supportata da alcuna fonte/prova come hai detto :) –

1

L'operazione su /data/anr/traces.txt richiede utente root o di sistema chmod.
Rif ActivityManagerService#dumpStackTraces codice:

public static File dumpStackTraces(boolean clearTraces, ArrayList<Integer> firstPids, 
     ProcessCpuTracker processCpuTracker, SparseArray<Boolean> lastPids, String[] nativeProcs) { 
    String tracesPath = SystemProperties.get("dalvik.vm.stack-trace-file", null); 
    if (tracesPath == null || tracesPath.length() == 0) { 
     return null; 
    } 

    File tracesFile = new File(tracesPath); 
    try { 
     if (clearTraces && tracesFile.exists()) tracesFile.delete(); 
     tracesFile.createNewFile(); 
     FileUtils.setPermissions(tracesFile.getPath(), 0666, -1, -1); // -rw-rw-rw- 
    } catch (IOException e) { 
     Slog.w(TAG, "Unable to prepare ANR traces file: " + tracesPath, e); 
     return null; 
    } 

    dumpStackTraces(tracesPath, firstPids, processCpuTracker, lastPids, nativeProcs); 
    return tracesFile; 
} 

E mi occupo del problema nella shell come segue.
adb root
adb shell touch /data/anr/traces.txt
adb shell kill -3 ${APP_PID}

Problemi correlati