error al abrir el archivo de rastreo: no existe dicho archivo o directorio (2)

Estoy obteniendo el error anterior:

error al abrir el archivo de rastreo: no existe dicho archivo o directorio (2)

cuando ejecuto mi aplicación de Android en el emulador. ¿Puede alguien decirme cuál podría ser la posible razón para esto?

Estoy usando android-sdk-20 y las líneas a continuación se agregan a AndroidManifest.xml

 

También he agregado la línea:

  

ya que pensé que podría haber algún problema al escribir en la tarjeta sd.

Sucede porque no ha instalado minSdkVersion o targetSdkVersion en su computadora. Lo probé en este momento.

Por ejemplo, si tiene esas líneas en su Manifest.xml:

  

Y si ha instalado solo la API17 en su computadora, le informará un error. Si desea probarlo, intente instalar la otra versión de API (en este caso, API 8).

Aun así, no es un error importante. No significa que tu aplicación esté equivocada.

Perdón por mi expresión. El inglés no es mi idioma ¡Adiós!

Yo pienso que éste es el problema

Un poco de fondo

Traceview es un visor gráfico para los registros de ejecución que usted crea usando la clase Debug para registrar información de rastreo en su código. Traceview puede ayudarlo a depurar su aplicación y perfilar su rendimiento. Habilitarlo crea un archivo .trace en la carpeta raíz de la tarjeta SD que luego puede ser extraído por ADB y procesado por el archivo traceview bat para su procesamiento. También puede ser agregado por el DDMS.

Es un sistema utilizado internamente por el registrador. En general, a menos que esté utilizando traceview para extraer el archivo de rastreo, este error no debería molestarlo. Debería ver los errores / registros directamente relacionados con su aplicación

¿Cómo lo habilito?

Hay dos formas de generar registros de seguimiento:

  1. Incluya la clase Debug en su código y llame a sus métodos, como startMethodTracing() y stopMethodTracing() , para iniciar y detener el registro de la información de rastreo en el disco. Esta opción es muy precisa porque puede especificar exactamente dónde comenzar y detener el registro de datos de rastreo en su código.

  2. Use la función de creación de perfiles de métodos de DDMS para generar registros de seguimiento. Esta opción es menos precisa porque no modifica el código, sino que especifica cuándo iniciar y detener el registro con DDMS. Aunque tiene menos control sobre dónde comienza y dónde se detiene el registro, esta opción es útil si no tiene acceso al código de la aplicación, o si no necesita un tiempo de registro preciso.

Pero las siguientes restricciones existen para lo anterior

Si está utilizando la clase Debug, su aplicación debe tener permiso para escribir en el almacenamiento externo ( WRITE_EXTERNAL_STORAGE ).

Si está utilizando DDMS: Android 2.1 y los dispositivos anteriores deben tener una tarjeta SD presente y su aplicación debe tener permiso para escribir en la tarjeta SD. Android 2.2 y dispositivos posteriores no necesitan una tarjeta SD. Los archivos de registro de seguimiento se transmiten directamente a su máquina de desarrollo.

Entonces, en esencia, el acceso a traceFile requiere dos cosas

1.) Permiso para escribir un archivo de registro de seguimiento, es decir WRITE_EXTERNAL_STORAGE y READ_EXTERNAL_STORAGE por si READ_EXTERNAL_STORAGE

2.) Un emulador con una tarjeta SD conectada con suficiente espacio. El documento no dice si esto es solo para DDMS, sino también para la depuración, así que estoy asumiendo que esto también es cierto para la depuración a través de la aplicación.

¿Qué hago con este error?

Ahora el error es esencialmente una caída de no tener la ruta de la tarjeta SD para crear un archivo de rastreo o no tener permiso para acceder a él. Este es un hilo viejo, pero el desarrollador detrás de la recompensa, verifica si cumplen con los dos requisitos previos. Luego puede ir a buscar el archivo .trace en la carpeta sdcard en su emulador. Si existe, no debería estar dándote este problema, si no intenta crearlo agregando el startMethodTracing a tu aplicación.
No estoy seguro de por qué busca automáticamente este archivo cuando el registrador se activa. Creo que cuando ocurre un evento de error / log, el registrador intenta escribir internamente en el archivo de rastreo y no lo encuentra, en cuyo caso arroja el error . Habiendo revisado los documentos, no encuentro demasiadas referencias de por qué esto está activado automáticamente. Pero, en general, esto no le afecta directamente, debe verificar los registros / errores directos de la aplicación. Además, aparte de Android 2.2 y dispositivos posteriores, no es necesaria una tarjeta SD para el registro de rastreo DDMS. Los archivos de registro de seguimiento se transmiten directamente a su máquina de desarrollo.

Información adicional sobre Traceview:

Copia de archivos de rastreo en una máquina host

Después de que su aplicación se haya ejecutado y el sistema haya creado sus archivos de rastreo .trace en un dispositivo o emulador, debe copiar esos archivos en su computadora de desarrollo. Puede usar adb pull para copiar los archivos. Aquí hay un ejemplo que muestra cómo copiar un archivo de ejemplo, calc.trace, desde la ubicación predeterminada en el emulador al directorio / tmp en la máquina host del emulador:

adb pull /sdcard/calc.trace / tmp Visualización de archivos de rastreo en Traceview Para ejecutar Traceview y ver los archivos de seguimiento, ingrese traceview. Por ejemplo, para ejecutar Traceview en los archivos de ejemplo copiados en la sección anterior, use:

traceview / tmp / calc Nota: Si está intentando ver los registros de seguimiento de una aplicación creada con ProGuard habilitado (creación del modo de lanzamiento), algunos métodos y nombres de miembros podrían estar ofuscados. Puede usar el archivo Proguard mapping.txt para descubrir los nombres originales no utilizados. Para obtener más información sobre este archivo, consulte la documentación de Proguard.

Creo que cualquier otra respuesta con respecto al posicionamiento de declaraciones oncreate o la eliminación de uses-sdk no están relacionadas, pero esto es Android y podría estar equivocado. Sería útil redirigir esta pregunta a un ingeniero de Android o publicarla como un error

Más en los documentos

Intenta eliminar la parte de uses-sdk archivo AndroidManifest.xml . funcionó para mí!

No use el dispositivo virtual Android con una configuración demasiado baja. Deja que sea medio.

Escriba todo su código debajo de estas 2 líneas:

  super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); 

Me funcionó sin volver a instalarlo.

No quería reinstalar todo porque tengo tantas versiones de SDK instaladas y mi entorno de desarrollo está configurado correctamente. Volver a configurarlo lleva demasiado tiempo.

Lo que funcionó para mí fue eliminar y luego volver a crear el dispositivo virtual de Android, asegurándome de poner un valor para el tamaño de la tarjeta SD (utilicé 200 MiB).

captura de pantalla de la pantalla de creación de AVD

Información Adicional:

mientras que lo anterior arregla el problema temporalmente, es recurrente. Acabo de probar mi aplicación en Android Studio y vi esto en el registro de salida que no había visto antes en 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 

Sospecho que los cambios en el registro no se guardan en la tarjeta SD, por lo que cuando LogCat intenta acceder a los registros, no están allí, lo que provoca el mensaje de error. El acto de eliminar el AVD y volver a crearlo elimina los archivos, y el siguiente lanzamiento es un lanzamiento nuevo, lo que permite a LogCat acceder a la tarjeta SD virtual.

No tendrá acceso a su tarjeta sd real en el emulador. Deberá seguir los pasos de este tutorial para dirigir su emulador a un directorio en su entorno de desarrollo que actúe como su tarjeta SD.

En realidad, el problema es que /sys/kernel/debug no está montado, o que el kernel en ejecución no tiene trazadores de rastreo comstackdos, por lo que /sys/kernel/debug/tracing no está disponible. Este es el código que arroja el error ( 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); } } 

El mensaje de registro definitivamente podría ser un poco más informativo.

Intereting Posts