¿Es posible depurar C / C ++ en Android Studio?

Estoy escribiendo una aplicación de Android que incluye código C / C ++ que se compila junto con el código Java. Mi aplicación se bloquea durante la ejecución del código nativo.

¿Hay una manera de pasar a través de Android C / C + + fuente e inspeccionar las variables como es posible con la fuente de Java?

No necesariamente estoy buscando una forma de paso a través de la fuente de Android Studio . Ésta es obviamente la solución ideal, sin embargo, si necesito utilizar una herramienta externa después de iniciar la aplicación de Studio, está bien. Quiero ser capaz de pasar a través de la línea de ejecución por línea e inspeccionar las variables.

Android Studio 1.0.2
Android NDK r10d

Edit: A partir de la respuesta inmediata de, "Utilizar Eclipse con ADT plugin", permítanme añadir más requisitos.
Este proyecto comenzó como un proyecto Eclipse ADT. Sin embargo, ahora he migrado a Android Studio. Mi proyecto ahora se construye utilizando Gradle, y la estructura de mi directorio de proyectos refleja esto. Estoy dispuesto a usar Eclipse; No estoy dispuesto a cambiar mi estructura de proyecto para volver a Eclipse desde Android Studio. Si hay una forma de abrir el proyecto de Android Studio en Eclipse y depurarlo de esa manera, explíquenos el proceso.

A partir de la versión 1.3+ Preview Android Studio admite la depuración de C ++, citando Android M Developer Preview & Tools :

Lo más notable es una característica muy solicitada de nuestros desarrolladores de Android NDK y juegos: código de edición y depuración de código C / C ++. Basado en la plataforma JetBrains Clion, el complemento Android Studio NDK ofrece funciones como la refactorización y la finalización del código C / C ++ junto con el código Java. El soporte de código Java y C / C ++ está integrado en una experiencia de desarrollo gratuita para los desarrolladores de aplicaciones para Android.

[ACTUALIZAR]

A partir de julio de 2015, Android Studio DOES apoya NDK.

Puede obtener más información al respecto en este enlace .


[OLD] NDK todavía no es compatible con Android Studio.

Cuando tenemos que lidiar con NDK, la única solución es usar Eclipse.

EDITAR

Básicamente, mantenemos el proyecto Eclipse con la función NDK (mapa en nuestro caso) y el proyecto Gradle con otras características (no mapa). Así que todo lo que tiene que hacerse con NDK, lo hacemos en Eclipse y luego incluimos cambios en el proyecto Gradle.

Para ser más precisos, dentro del directorio /src/main/ creamos otro directorio llamado jniLibs y ponemos el archivo *.so jniLibs compilado dentro de las carpetas específicas de la arquitectura (armeabi-v7a, armeabi, x86 …). Luego en la clase principal del proyecto Gradle simplemente agregó una línea

 static { System.loadLibrary("OurNDKLibName"); } 

Puede agregar esta línea sólo una vez por proyecto. Tal vez me equivoque, pero no tuvimos ningún problema para hacerlo.

No es no era no está funcionando muy bien.

Hello-jni falló con:

 Starting LLDB server: run-as com.example.sample /data/data/com.example.sample/lldb/bin/start_lldb_server.sh /data/data/com.example.sample/lldb /data/data/com.example.sample/lldb/tmp/platform.port1442695333842 "lldb process:gdb-remote packets" Error while launching debug server on device: com.android.tools.ndk.run.DebuggerContext$StartServerException: java.lang.IllegalStateException: Failed to read platform port /data/data/com.example.sample/lldb/tmp/platform.port1442695333842 

Estoy usando 1.4RC1

 compileSdkVersion 23 buildToolsVersion "23.0.1" 

Y el "app-native" ejecutar la configuración @ Gerry mencionado. Es casi allí, pero no puedo encontrar ningún rastro de un directorio lldb en la carpeta de datos privados de mi aplicación. Encontré un gdbserver de 400kb en el directorio lib enlazado desde allí, con mi propio *.so además. Desafortunadamente la opción para depurar con gdb en lugar de lldb ha ido con la actualización de 1.3 a 1.4. NDK 10e envía un binario gdbserver de 400kb en ndk\prebuilt\android-arm\gdbserver que es (supongo). El 15 de septiembre se actualizó el archivo de depuración de gdb https://github.com/mapbox/mapbox-gl-native/wiki/Android-debugging-with-remote-GDB . Esto es más difícil que el logcat de depuración IMO, pero un tema actual, lo siento por ser tan negativo, pero no creo que lldb realmente funciona todavía.

He dirigido hello-jni y llegó a la misma conclusión.

Así que en respuesta a su pregunta, todavía no es posible depurar C / C ++ en Android Studio. Lo siento, esta no fue la respuesta que esperaba y espero que se pruebe mal con pruebas concluyentes en contrario, pero justo aquí, ahora mismo, no hay oportunidad!

UPDATE Me planteó un problema en el que se me dio una solución para un teléfono.

UPDATE2 Demasiado pronto para decirlo, es experimental después de todo, pero ocasionalmente fallo en conectarme, a menudo, si no siempre, saliendo del orden de pasos y puntos de interrupción con valores de parámetros sin sentido. Acabo de establecer un punto de interrupción condicional que no se disparó, pero el logcat muestra que debería. Inicialmente asumí que era mi error lógico, pero va más profundo.

Simplemente golpear puntos de interrupción es muy útil, pero todavía está a un millón de millas de la depuración de Java, o Vis Studio C + + de depuración.

UPDATE3 Regresó a la versión estable 1.3.1 ya que la versión del canal canaray hacía una pausa para una pausa de baño cada pulsación de tecla. Mientras la compilación de depuración nativa al menos se lanza con mi teléfono "fijo", no se producen puntos de interrupción incluso en hellojni, o una versión ligeramente extendida para dar más oportunidades. Estoy acostumbrado a logcat ahora, pero he tenido mejores experiencias degbugging con Android, NDK y Eclipse. Una solución más elaborada también es más fácil de romper, pero al menos funciona .

, Android Studio admite la depuración de C ++ al menos con Android Studio 1.5.1 y android-ndk-r10e.

En los viejos tiempos, tendrás que escribir make files Android.mk y Application.mk para construir el código C ++ en Android Studio. Ya no los necesitas. Siempre que los coloques en la carpeta jni , gradle podrá recogerlo y compilarlo. Debería ver algo como lo siguiente:

Introduzca aquí la descripción de la imagen

Y también le permiten establecer punto de quiebre y depurarlo.

Introduzca aquí la descripción de la imagen

Debe seguir este tutorial paso a paso y aprender más al respecto. Y lea más sobre la documentación aquí . He subido un ejemplo de trabajo completo para que pueda descargarlo y probarlo en GitHub .


Con Android Studio 1.4 de tools.android.com, la depuración es posible. Cuando abra / cree un proyecto con código C ++ [jni], Android studio creará una nueva configuración, algo como $ (nombre_módulo) -nativo

Yo seleccionaría esta configuración, sincronizar gradle, construir, establecer puntos de ruptura, etc y ejecutarlo con Android Studio. Después de una larga espera, mi depurador está conectado, la aplicación está roto en [Creo que también podría establecer el punto de interrupción en este momento]; Esta ruptura no está en mis puntos de rotura del sistema, lo dejé ir en androide estudio y mi punto de interrupción se golpea. Espero que esto ayude
Se supone que algunas muestras funcionan con el depurador de Android

¡sí! Es posible depurar código nativo en android studio. A partir de las actualizaciones de Android Studio 2.2 + soporte en herramientas integradas para la depuración de código nativo.

  • ¿Están soportados Vertex Array Objects en Android OpenGL ES 2.0 usando extensiones?
  • ¿Cómo puedo optimizar la costura de múltiples imágenes?
  • Android NDK y C + + STL
  • ¿Cómo obtener la identificación del dispositivo con JNI en Android?
  • Xamarin C # - Android - Impedir que un AlertDialog cierre en PositiveButton haga clic
  • OpenGL en Android: ¿Algún conflicto al llamar a funciones de OpenGL en Java y C ++?
  • Android Studio 1.5 Opencv 3.0.0 calibración de la cámara de muestra se estrelló
  • Construir Firefox para Nexus 7 (mero) recibe mensajes de error con Ubuntu 13.10
  • ¿Cómo obtener los mensajes "printf" escritos en la aplicación NDK?
  • ¿Utilizar C # mono para android o java?
  • Obtención de punto flotante de hardware con android NDK
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.