Android 打开跟踪文件时出错:没有此类文件或目录(2)
我得到了上述错误: 打开跟踪文件时出错:没有此类文件或目录(2) 当我在模拟器上运行android应用程序时。有人能告诉我这可能是什么原因吗 我使用的是android-sdk-20,下面的行添加到了AndroidManifest.xml中Android 打开跟踪文件时出错:没有此类文件或目录(2),android,eclipse,android-emulator,logcat,android-sdcard,Android,Eclipse,Android Emulator,Logcat,Android Sdcard,我得到了上述错误: 打开跟踪文件时出错:没有此类文件或目录(2) 当我在模拟器上运行android应用程序时。有人能告诉我这可能是什么原因吗 我使用的是android-sdk-20,下面的行添加到了AndroidManifest.xml中 <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="15" /> 我还添加了一行: <uses-permission android:name="android.
<uses-sdk android:minSdkVersion="14" android:targetSdkVersion="15" />
我还添加了一行:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
因为我认为写入sd卡可能会有一些问题。您将无法在emulator中访问真正的sd卡。您必须按照本文中的步骤将emulator定向到开发环境中充当SD卡的目录。尝试删除
uses sdk
部件表单AndroidManifest.xml
文件。这对我有用
不要使用配置过低的Android虚拟设备。让它是中等的。我不想重新安装所有东西,因为我安装了这么多SDK版本,而且我的开发环境设置得恰到好处。重新安装需要很长时间 对我来说,有效的方法是删除,然后重新创建Android虚拟设备,确保输入SD卡大小的值(我使用了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卡。将所有代码写在这两行下面:-
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
它对我有效,无需重新安装。发生这种情况是因为您的计算机中尚未安装minSdkVersion或targetSdkVersion。我现在已经测试过了 例如,如果Manifest.xml中有这些行:
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
如果您的计算机中只安装了API17,它将向您报告错误。如果要测试它,请尝试安装其他API版本(在本例中为API 8)
即便如此,这也不是一个重要的错误。这并不意味着你的应用程序是错误的
对不起我的表情。英语不是我的语言。
再见 我认为这就是问题所在 一点背景 Traceview是执行日志的图形查看器,您可以使用调试类在代码中记录跟踪信息来创建执行日志。Traceview可以帮助您调试应用程序并分析其性能。启用它将在SD卡根文件夹中创建一个
.trace
文件,然后ADB可以提取该文件,并由traceview bat文件处理。它也可以通过DDMS添加
它是记录器内部使用的系统通常情况下,除非您使用traceview提取跟踪文件,否则此错误不会困扰您。您应该查看与应用程序直接相关的错误/日志
如何启用它:
有两种方法可以生成跟踪日志:
startMethodTracing()
和stopMethodTracing()
,以启动和停止
将跟踪信息记录到磁盘。这个选项非常精确
因为您可以精确地指定开始和停止日志跟踪的位置
代码中的数据write\u external\u storage
)
如果您使用的是DDMS:Android2.1及更早版本的设备必须具有SD
卡存在,并且您的应用程序必须具有向
SD卡。Android 2.2及更高版本的设备不需要SD卡。这个
跟踪日志文件直接流式传输到开发计算机
因此,本质上,traceFile访问需要两件事
1.)允许写入跟踪日志文件,即write_EXTERNAL_STORAGE
和READ_EXTERNAL_STORAGE
,以便进行良好测量
2.)带有SD卡且具有足够空间的模拟器。文档没有说明这是否仅适用于DDMS,也适用于调试,因此我假设通过应用程序进行调试也是如此
如何处理此错误:
现在,这个错误本质上是由于没有sdcard路径来创建跟踪文件,或者没有访问它的权限。这是一个旧线程,但是赏金背后的开发人员,检查是否满足两个先决条件。然后,您可以在emulator的sdcard文件夹中搜索.trace
文件。如果它存在,它不应该给你这个问题,如果它不尝试通过将startMethodTracing
添加到你的应用程序来创建它。我不知道为什么它会在记录器启动时自动查找此文件。我认为,当发生错误/日志事件时,记录器会在内部尝试写入跟踪文件,但没有找到它,在这种情况下,它会抛出错误。在浏览了文档之后,我没有找到太多关于为什么会自动打开该文件的参考。 但通常这不会直接影响您,您应该检查直接应用程序日志/错误。 另外,Android 2.2和更高版本的设备不需要SD卡来记录DDMS跟踪。跟踪日志文件
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);
}
}