我收到了上述错误:
错误打开跟踪文件:没有这样的文件或目录(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卡可能存在一些问题。
答案 0 :(得分:10)
这是因为您没有在计算机中安装minSdkVersion或targetSdkVersion。我现在已经测试过了。
例如,如果你的Manifest.xml中有这些行:
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
您只在计算机中安装了API17,它会报告错误。如果要测试它,请尝试安装其他API版本(在本例中为API 8)。
即便如此,这也不是一个重要的错误。这并不意味着您的应用是错误的。
抱歉我的表情。英语不是我的语言。 再见!
答案 1 :(得分:8)
我认为这是问题
一点背景
Traceview是一个图形查看器,用于通过使用Debug类在代码中记录跟踪信息创建的执行日志。 Traceview可以帮助您调试应用程序并分析其性能。启用它会在sdcard根文件夹中创建一个.trace
文件,然后由ADB提取并由traceview bat文件处理以进行处理。它也可以由DDMS添加。
这是记录器内部使用的系统。 一般情况下,除非您使用traceview提取跟踪文件,否则此错误不应该打扰您。您应该查看与您的应用程序直接相关的错误/日志
如何启用它:
有两种方法可以生成跟踪日志:
在代码中包含Debug类并调用其
startMethodTracing()
和stopMethodTracing()
等方法来启动和停止 将跟踪信息记录到磁盘。此选项非常精确 因为您可以准确指定启动位置和停止记录跟踪 代码中的数据。- 醇>
使用DDMS的方法分析功能生成跟踪日志。此选项不太精确,因为您不修改代码,而是修改代码 指定何时使用DDMS启动和停止日志记录。虽然你有 对于确切的记录开始和停止位置的控制较少,此选项是 如果您无法访问应用程序的代码,或者您是否有用,则非常有用 不需要精确的日志计时。
但上述
存在以下限制如果您正在使用Debug类,那么您的应用程序必须具有 写入外部存储(
WRITE_EXTERNAL_STORAGE
)的权限。如果您使用DDMS:Android 2.1及更早版本的设备必须具有SD 卡存在,您的申请必须有权写入 SD卡。 Android 2.2及更高版本的设备不需要SD卡。该 跟踪日志文件将直接流式传输到您的开发计算机。
因此,本质上traceFile访问需要两件事
1。)编写跟踪日志文件的权限,即
WRITE_EXTERNAL_STORAGE
和READ_EXTERNAL_STORAGE
以获得良好的衡量标准2。)带有足够空间的SD卡的仿真器。 doc没有说这是仅用于DDMS还是用于调试,所以我假设通过应用程序调试也是如此。
如何处理此错误:
现在,错误基本上是因为没有创建跟踪文件的sdcard路径或者没有访问它的权限。这是一个旧线程,但是赏金背后的开发者,检查是否满足两个先决条件。然后,您可以在模拟器中的sdcard文件夹中搜索.trace
文件。如果它存在,它不应该给你这个问题,如果它没有尝试通过将startMethodTracing
添加到你的应用程序来创建它。
我不确定为什么它会在记录器启动时自动查找此文件。我认为当发生错误/日志事件时,记录器会在内部尝试写入跟踪文件但找不到它,在这种情况下它会抛出错误。通过文档搜索,我没有找到太多的引用,为什么这是自动开启。
但一般情况下,这不会直接影响您,您应该检查直接的应用程序日志/错误。
另外,Android 2.2及更高版本的设备不需要SD卡来进行DDMS跟踪记录。跟踪日志文件直接流式传输到开发计算机。
有关Traceview的其他信息:
将跟踪文件复制到主机
您的应用程序运行后 并且系统已创建跟踪文件.trace on 在设备或模拟器中,您必须将这些文件复制到开发中 电脑。您可以使用adb pull复制文件。这是一个例子 它显示了如何从默认值复制示例文件calc.trace 仿真器上的位置到仿真器主机上的/ tmp目录 机:
adb pull /sdcard/calc.trace / tmp在Traceview中查看跟踪文件 运行Traceview并查看跟踪文件,输入traceview 。例如,在示例文件上运行Traceview 复制在上一节中,使用:
traceview / tmp / calc注意:如果您正在尝试查看的跟踪日志 启用ProGuard构建的应用程序(发布模式 (),某些方法和成员名称可能会被混淆。您可以使用 Proguard mapping.txt文件找出原始的未经模糊处理 名。有关此文件的更多信息,请参阅Proguard 文档。
我认为关于oncreate
语句定位或删除uses-sdk
的任何其他答案都不相关,但这是Android,我可能错了。将此问题重定向到Android工程师或将其作为错误发布
答案 2 :(得分:6)
尝试删除uses-sdk
部分表单AndroidManifest.xml
文件。它对我有用!
请勿使用配置太低的Android虚拟设备。让它成为中等。
答案 3 :(得分:5)
将这些代码写在这2行以下: -
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
没有重新安装它对我有用。
答案 4 :(得分:4)
我不想重新安装所有内容,因为我安装了很多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卡。
答案 5 :(得分:3)
您无法在模拟器中访问您的真实SD卡。您必须按照此tutorial中的步骤将您的模拟器指向开发环境中充当SD卡的目录。
答案 6 :(得分:1)
实际上,问题是未安装/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);
}
}
日志消息肯定会提供更多信息。