我认为这是问题所在。
一些背景信息
Traceview是一个图形化查看器,用于查看您使用Debug类记录代码中跟踪信息而创建的执行日志。Traceview可以帮助您调试应用程序并分析其性能。启用它会在sdcard根文件夹中创建一个.trace
文件,该文件可以通过ADB提取并由traceview批处理文件进行处理。它也可以被DDMS添加。
它是日志记录器内部使用的系统。通常情况下,除非您正在使用traceview提取跟踪文件,否则此错误不应影响您。您应该查看与您的应用程序直接相关的错误/日志。
如何启用它:
有两种方法可以生成跟踪日志:
- 在代码中包含Debug类并调用其方法,如
startMethodTracing()
和stopMethodTracing()
,以开始和停止将跟踪信息记录到磁盘。此选项非常精确,因为您可以指定确切的位置开始和停止记录跟踪数据。
- 使用DDMS的方法分析功能生成跟踪日志。此选项不太精确,因为您不修改代码,而是使用DDMS指定何时开始和停止记录。虽然您对记录开始和停止的位置没有更多控制,但如果您无法访问应用程序的代码,或者不需要精确的日志记录时间,则此选项很有用。
但是上述内容存在以下限制:
如果您正在使用Debug类,则应用程序必须具有写入外部存储器的权限(
WRITE_EXTERNAL_STORAGE
)。
如果您正在使用DDMS:Android 2.1及更早版本的设备必须存在SD卡,并且您的应用程序必须具有写入SD卡的权限。 Android 2.2及更高版本的设备不需要SD卡。跟踪日志文件直接流式传输到开发计算机。
因此,追踪文件访问需要两个条件:
1.) 写入跟踪日志文件的权限,即
WRITE_EXTERNAL_STORAGE
和
READ_EXTERNAL_STORAGE
。
2.) 带有足够空间的附加SD卡的模拟器。文档没有说明这仅适用于DDMS还是也适用于调试,因此我假设这对通过应用程序进行调试也是正确的。
我该如何处理这个错误:
现在的错误基本上是由于没有SD卡路径来创建跟踪文件或没有访问权限而导致的。这是一个旧的线程,但是赏金背后的开发人员要检查是否满足这两个先决条件。然后,您可以在模拟器的sdcard文件夹中搜索
.trace
文件。如果存在,它不应该给您带来问题,如果不存在,请尝试通过将
startMethodTracing
添加到您的应用程序来创建它。
我不确定为什么它在记录器启动时自动查找此文件。我认为当出现错误/日志事件时,记录器在内部尝试写入跟踪文件并未找到它,在这种情况下,它会抛出错误。经过查阅文档,我没有找到太多关于为什么会自动打开的参考。
但总的来说,这不会直接影响您,您应该检查直接应用程序日志/错误。
另外,Android 2.2及更高版本的设备不需要SD卡进行DDMS跟踪记录。跟踪日志文件直接流式传输到您的开发计算机。
Traceview的其他信息:
将跟踪文件复制到主机
在应用程序运行并且系统在设备或模拟器上创建了.trace跟踪文件之后,您必须将这些文件复制到开发计算机。您可以使用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工程师或将其发布为错误可能会有用。
更多信息请参见
文档。