2011-11-12 15 views
7

Jestem nowy w świecie Androida.Nie można otworzyć pliku śledzenia stosu "/data/anr/traces.txt": Odmowa uprawnień

Złożyłem wniosek o rejestrację użytkownika. Wszystko działało dobrze. ale gdy próbowałem dodać pokrętło do mojego pliku aktywności, to pokazywał błąd w AVD, jak,

wniosku o rejestrację (com.students procesowe) przestał niespodziewanie. spróbuj ponownie

przychodzi.

i mój kot log pokazuje błąd

„11-12 10: 42: 06,816: E/dalvikvm (313): Nie można otworzyć pliku śledzenia stosu „/ data/ANR/śladów. txt ': Odmowa uprawnień "

Co to za błąd? Jak mogę się tego pozbyć?

+2

Pokaż kod, którego używasz, a także kompletny stos-śledzenia. –

+1

Twoja aplikacja uległa awarii z jakiegoś innego powodu (może być to błąd w kodzie). Możesz zignorować błąd "Nie można otworzyć stosu ..", nie jest to przyczyną awarii aplikacji. Opublikuj kompletny ślad stosu i odpowiednią część kodu aplikacji. – Karthik

+0

Ten błąd może również zostać wyświetlony, jeśli nie skonfigurujesz karty SD na swoim emulatorze. –

Odpowiedz

3

To był problem, który miałem, gdy byłem nowy na Androida. Wtedy dowiedziałem się, że komunikat o tym, że nie można zapisać do pliku traces.txt, nie był rzeczywistym problemem z programem.

Rozwiązaniem tego problemu jest znalezienie i skorygowanie faktycznego (niezwiązanego z tym komunikatem) powodu awaryjnego programu. Wtedy ta wiadomość (która odzwierciedla problem z konfiguracją w systemie zgłaszania awarii) nie będzie już występować.

+4

To powinien być komentarz. Nie pokazuję, jak naprawiłeś swój błąd. –

+0

To naprawdę jest poprawna odpowiedź - jednak czuję się trochę niekomfortowo z tym, że po edycji moderatora, co jest obecnie wyświetlane, jest to moje wcześniej w pełni ujawnione jego ponowne napisanie, bez oryginalnego tekstu (od samego pytającego pytającego), który dokładnie to zachowałem, kiedy to zredagowałem. –

10

Próbujesz uzyskać dostęp do pamięci zewnętrznej. Upewnij się, że masz niezbędne uprawnienia zdefiniowane w pliku Manifestu. Można to zrobić, dodając:

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

To nie rozwiązuje błędu uprawnień do zapisu dla jednego z moich urządzeń testowych, Android 2.3.6 – nmr

+10

Ta odpowiedź jest ** całkowicie niepoprawna i bardzo zła rada **. Po pierwsze, problem dotyczy samego Androida, a nie aplikacji.Ale nawet jeśli był to program napisany, ta odpowiedź jest oczywiście błędna, ponieważ **/data nie jest ścieżką External Storage **. –

4

Ten błąd nie ma nic wspólnego z Twoją aplikacją. Plik śledzenia stosu referencyjnego jest generowany, gdy aplikacja się zawiesza, aby użytkownik mógł zgłosić to wydawcy. Powodem, dla którego widzisz ten błąd, jest to, że Twoja aplikacja nie została zainstalowana na rynku Android, więc nie ma uprawnień do zapisu do tego pliku. Błędy generowane przez twoją aplikację podczas debugowania można zobaczyć w LogCat, a ślad stosu zostanie porzucony tam, opisując błąd.

+1

Ta odpowiedź jest zasadniczo poprawna, ponieważ konkretny komunikat oznacza problem w mechanizmie zgłaszania awarii, ale nie faktyczny * powód, dla którego coś się zawiesiło *. Przyczyna awarii (jeśli rzeczywiście jest to awaria tworzonej aplikacji, a nie przypadkowa awaria innego zdarzenia), należy ustalić za pomocą narzędzia logcat i/lub innych narzędzi do debugowania i naprawić. Jestem mniej pewny co do oferowanego wyjaśnienia, łączącego brakujące pozwolenie, aby nie być instalacją rynkową (zamiast prostej błędnej konfiguracji zainstalowanej wersji Androida) - jakiekolwiek odniesienia do tej teorii? –

+0

W szczególności na bieżących urządzeniach ten plik jest zapisywalny na całym świecie. –

+0

@ChrisStratton Głosuję na tę odpowiedź, ponieważ sam wpadłem na ten problem i po pewnym dochodzeniu dowiedziałem się, że przyczyną niepowodzenia była w rzeczywistości aplikacja niezaufana (nie pochodzi ze Sklepu Play). To jest polityka wymuszana na poziomie jądra. Musiałem spojrzeć na logi jądra, żeby to zobaczyć. Tak więc odpowiedź Sani jest całkiem dokładna, chociaż nie jest poparta żadnym źródłem/dowodem, o którym wspomniałeś :) –

1

Operacja na/data/anr/traces.txt wymaga uprawnień użytkownika root lub systemu.
Ref kod ActivityManagerService#dumpStackTraces:

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; 
} 

i mam poradzić sobie z problemem w skorupkach w następujący sposób.
adb root
adb shell touch /data/anr/traces.txt
adb shell kill -3 ${APP_PID}

Powiązane problemy