上記のエラーが発生しています:
トレースファイルを開く際のエラー:そのようなファイルまたはディレクトリはありません(2)
エミュレータでAndroidアプリケーションを実行するとき。誰かがこれの考えられる理由を教えてもらえますか?
私はAndroid-sdk-20を使用していますが、AndroidManifest.xmlに以下の行が追加されています
<uses-sdk Android:minSdkVersion="14" Android:targetSdkVersion="15" />
次の行も追加しました。
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
私はSDカードへの書き込みに何らかの問題があるかもしれないと思ったので。
コンピュータにminSdkVersionまたはtargetSdkVersionをインストールしていないために発生します。私は今それをテストしました。
たとえば、Manifest.xmlにこれらの行がある場合:
<uses-sdk
Android:minSdkVersion="8"
Android:targetSdkVersion="17" />
また、コンピューターにAPI17のみをインストールすると、エラーが報告されます。テストする場合は、他のAPIバージョン(この場合はAPI 8)をインストールしてみてください。
それでも、それは重要なエラーではありません。アプリが間違っているという意味ではありません。
私の表現についてすみません。英語は私の言語ではありません。バイバイ!
これが問題だと思う
少しの背景
Traceviewは、Debugクラスを使用してコードにトレース情報を記録することで作成した実行ログのグラフィカルビューアーです。 Traceviewは、アプリケーションをデバッグし、そのパフォーマンスをプロファイルするのに役立ちます。これを有効にすると、sdcardルートフォルダーに.trace
ファイルが作成され、ADBによって抽出され、処理のためにtraceview batファイルによって処理されます。 DDMSによって追加することもできます。
これは、ロガーによって内部的に使用されるシステムです。 一般に、traceviewを使用してトレースファイルを抽出しない限り、このエラーは煩わしいものではありません。アプリケーションに直接関連するエラー/ログを確認する必要があります。
有効にする方法:
トレースログを生成するには、2つの方法があります。
デバッグクラスをコードに含め、
startMethodTracing()
やstopMethodTracing()
などのメソッドを呼び出して、ディスクへのトレース情報のロギングを開始および停止します。このオプションは非常に正確です。コード内のトレースデータのロギングを開始および停止する場所を正確に指定できるからです。DDMSのメソッドプロファイリング機能を使用して、トレースログを生成します。このオプションは、コードを変更せず、DDMSを使用してロギングをいつ開始および停止するかを指定するため、あまり正確ではありません。ロギングの開始と停止の正確な制御はあまりできませんが、このオプションは、アプリケーションのコードにアクセスできない場合や、正確なログタイミングが必要ない場合に便利です。
ただし、上記には次の制限があります
Debugクラスを使用している場合、アプリケーションには外部ストレージ(
WRITE_EXTERNAL_STORAGE
)への書き込み権限が必要です。DDMSを使用している場合:Android 2.1以前のデバイスにはSDカードが存在し、アプリケーションにSDカードへの書き込み権限が必要です。 Android 2.2以降のデバイスにはSDカードは必要ありません。トレースログファイルは、開発マシンに直接ストリーミングされます。
本質的に、traceFileアクセスには2つのことが必要です
1.)適切な測定のためのトレースログファイル、つまり
WRITE_EXTERNAL_STORAGE
およびREAD_EXTERNAL_STORAGE
を書き込む権限2.)SDCardが十分なスペースで接続されたエミュレーター。ドキュメントは、これがDDMSだけでなくデバッグにも当てはまるとは言っていないので、アプリケーションを介したデバッグにも当てはまると思います。
このエラーで何をしますか:
現在、このエラーは、基本的に、トレースファイルを作成するためのSDカードパスがないか、アクセスするためのアクセス許可がないことによるフォールアウトです。これは古いスレッドですが、賞金の背後にある開発者は、2つの前提条件を満たしているかどうかを確認してください。次に、エミュレータのsdcardフォルダーで.trace
ファイルを検索します。存在する場合、startMethodTracing
をアプリに追加して作成しようとしても、この問題は発生しません。
ロガーが起動したときにこのファイルを自動的に検索する理由がわかりません。エラー/ログイベントが発生すると、ロガーは内部でトレースファイルへの書き込みを試みますが、ファイルを見つけられません。エラーがスローされる場合。ドキュメントを精査しても、これが自動的にオンになる理由についてあまり多くの参照を見つけることができません。しかし、一般的にこれは直接あなたに影響を与えません、あなたは直接アプリケーションログ/エラーをチェックするべきです。また、Android 2.2以降のデバイスは、DDMSトレースロギング用のSDカードを必要としません。トレースログファイルは、開発マシンに直接ストリーミングされます。
Traceviewの追加情報:
ホストマシンへのトレースファイルのコピー
アプリケーションを実行し、システムがデバイスまたはエミュレーターでトレースファイル.traceを作成した後、それらのファイルを開発コンピューターにコピーする必要があります。 adb pullを使用してファイルをコピーできます。エミュレータのデフォルトの場所からエミュレータホストマシンの/ tmpディレクトリにサンプルファイルcalc.traceをコピーする方法を示す例を次に示します。
adb pull /sdcard/calc.trace/tmp Traceviewでのトレースファイルの表示Traceviewを実行してトレースファイルを表示するには、traceviewと入力します。たとえば、前のセクションでコピーしたサンプルファイルでTraceviewを実行するには、次を使用します。
traceview/tmp/calc注:ProGuardを有効にしてビルドされたアプリケーション(リリースモードビルド)のトレースログを表示しようとすると、一部のメソッド名とメンバー名が難読化される場合があります。 Proguard mapping.txtファイルを使用して、難読化されていない元の名前を把握できます。このファイルの詳細については、Proguardのドキュメントを参照してください。
oncreate
ステートメントの配置またはuses-sdk
の削除に関する他の答えは関係ないと思いますが、これはAndroidであり、間違っている可能性があります。この質問をAndroidエンジニアにリダイレクトするか、バグとして投稿すると便利です
docs の詳細
uses-sdk
part form AndroidManifest.xml
ファイルを削除してみてください。それは私のために働いた!
低すぎる構成でAndroid仮想デバイスを使用しないでください。中程度にしましょう。
この2行の下にすべてのコードを記述します。
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
再インストールすることなく、私にとってはうまくいきました。
多くのSDKバージョンがインストールされており、開発環境が適切にセットアップされているため、すべてを再インストールしたくありませんでした。再度セットアップするのに時間がかかりすぎます。
私のために働いたのは、SDカードサイズの値を確実に入れて、Android仮想デバイスを削除してから再作成することでした(200 MiBを使用しました)。
上記は一時的に問題を解決しますが、繰り返し発生します。 Android Studio内でアプリケーションを試したところ、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
ログへの変更はSDカードに保存されていないので、LogCatがログにアクセスしようとしてもログに存在しないため、エラーメッセージが表示されます。 AVDを削除して再作成すると、ファイルが削除されます。次の起動は新規起動であり、LogCatが仮想SDカードにアクセスできるようにします。
エミュレータで実際のsdカードにアクセスできなくなります。 SDカードとして動作する開発環境のディレクトリにエミュレータを向けるには、この tutorial の手順に従う必要があります。
実際、問題は、/sys/kernel/debug
がマウントされていないか、実行中のカーネルにftraceトレーサーがコンパイルされていないため、/sys/kernel/debug/tracing
が使用できないことです。これはエラーをスローするコードです(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);
}
}
ログメッセージは間違いなくもう少し有益なものになるでしょう。