2011-11-12 38 views
7

私はアンドロイドワールドを初めて利用しています。スタックトレースファイル '/data/anr/traces.txt'を開くことができません:許可が拒否されました

私はユーザー登録を申請しました。それは正常に動作していた。しかし、私は私の活動のファイルにスピナーを追加しようとしたとき、それはAVDでエラーを示していた、のように、

アプリケーション登録(プロセスcom.students)が予期せず を停止しました。もう一度お試しください。

が付属しています。

と私のログの猫はエラー

を示している「11-12 10:42:06.816:E/dalvikvm(313):スタック・トレース・ファイル 「/データ/ ANR /トレースを開くことができません。 txt ':許可が拒否されました」

実際にはどのようなエラーが表示されますか?どうすればそれを取り除くことができますか?

+2

adb root
adb shell touch /data/anr/traces.txt
また、使用しているコードと完全なスタックトレースを表示します。 –

+1

あなたのアプリケーションが何らかの理由でクラッシュしました(おそらくコードの不具合)。あなたは "スタックトレースを開くことができません"というエラーを無視することができます。これはアプリケーションのクラッシュの原因ではありません。スタックトレースとアプリケーションコードの関連部分を完全に投稿してください。 – Karthik

+0

エミュレータでSDカードをセットアップしないと、このエラーが発生することもあります。 –

答えて

3

これはAndroidに初めてのときに問題になっていました。それで、traces.txtに書き込めないというメッセージがプログラムの実際の問題ではないことを知りました。

したがって、この問題の解決策は、プログラムがクラッシュする実際の(このメッセージとは無関係の)理由を見つけて修正することです。その後、このメッセージ(クラッシュ報告システムの構成上の問題を反映しています)はもう発生しません。

+4

これはコメントです。私はあなたのエラーをどのように修正したかを示していません。 –

+0

これは実際には正解ですが、モデレータの編集後に現在公開されているものは私の以前の完全な再書込みであり、元のテキスト(質問者自身から)がなくても私はそれを編集したときに注意深く保持していた。 –

10

外部ストレージにアクセスしようとしています。マニフェストファイルで必要な権限が定義されていることを確認してください。これは追加することでできます

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

これは、私のテストデバイスの1つ、Android 2.3.6の書き込み権限エラーを解決していないようです。 – nmr

+10

この回答は**間違っていてかなり悪いアドバイスです**。まず、問題はアンドロイド自体であり、アプリケーションプログラムではありません。しかし、プログラムが書かれていても、この答えは明らかに間違っています** /データは外部ストレージパスではありません**。 –

4

このエラーはあなたのアプリとは関係ありません。アプリがクラッシュしたときに生成され、ユーザーがパブリッシャーに報告できるようにする参照スタックトレースファイル。そのエラーが表示されている理由は、あなたのアプリがアンドロイドマーケットにインストールされていないため、そのファイルに書き込む権限がないからです。デバッグ中にアプリが生成しているエラーはLogCatに表示され、エラーを説明するスタックトレースがそこにダンプされます。

+1

この回答は、特定のメッセージが障害報告メカニズムの問題を示していますが、何かがクラッシュした*実際の理由ではないという点で基本的には正しいです。クラッシュの原因(アプリケーションのクラッシュが発生していて、何か他のものが同時に発生するクラッシュではない場合)は、logcatやその他のデバッグツールで決定して修正する必要があります。私は、提供された説明のリンクについて、インストールされていないAndroidビルドの単純な誤った構成ではなく、市場にインストールされていないことに対する不足しているパーミッションについてはあまり確信していません。 –

+0

特に、現在のデバイスでは、このファイルは世界的に書き込み可能です。 –

+0

@ChrisStratton私は自分自身でこの問題に直面したので、この回答を投票しています。アプリが信頼できない(Playストアから来ていない)ため、何らかの調査の結果、失敗の理由が確かに見つかった。これは、カーネルレベルで実施されるポリシーです。私はそれを見るためにカーネルログを見なければならなかった。だからサニの答えはあなたが言及したようなソース/プルーフによって裏付けされていませんが、かなり正確です。 –

1

/data/anr/traces.txtの操作には、rootユーザーまたはシステムユーザーchmodが必要です。
参考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; 
} 

そして私は、次のようにシェルで問題を扱います。
adb shell kill -3 ${APP_PID}

関連する問題