Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 打开跟踪文件时出错:没有此类文件或目录(2)_Android_Eclipse_Android Emulator_Logcat_Android Sdcard - Fatal编程技术网

Android 打开跟踪文件时出错:没有此类文件或目录(2)

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.

我得到了上述错误:

打开跟踪文件时出错:没有此类文件或目录(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卡可能会有一些问题。

您将无法在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()
    ,以启动和停止 将跟踪信息记录到磁盘。这个选项非常精确 因为您可以精确地指定开始和停止日志跟踪的位置 代码中的数据

  • 使用DDMS的方法分析功能生成跟踪日志。此选项不太精确,因为您不修改代码,而是 指定何时使用DDMS启动和停止日志记录。虽然你有 对日志记录开始和停止的确切位置控制较少,此选项是 如果您没有访问应用程序代码的权限,或者 不需要精确的日志计时

  • 但对于上述情况,存在以下限制

    如果您使用的是Debug类,则应用程序必须具有 写入外部存储器的权限(
    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);
        }
    }