Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Depuración de módulos de biblioteca C ++ / nativa que no funcionan con Android Studio (Cmake utilizado)

Tengo problemas para depurar archivos C ++ de mi módulo de biblioteca.

¿Es esto posible en general?

La depuración funciona bien si el proyecto de aplicación contiene el código c ++. Pero quiero mover el código C ++ a un módulo de biblioteca.

El mensaje de error al iniciar la sesión:

Inicio de la sesión de depuración nativa

¡Atención! No se han encontrado directorios de símbolos – compruebe su configuración de depuración nativa

Gradle file de mi lib:

apply plugin: 'com.android.library' android { compileSdkVersion 24 buildToolsVersion "25.0.2" defaultConfig { minSdkVersion 16 targetSdkVersion 21 versionCode 1 versionName "1.0" externalNativeBuild { cmake { arguments "-DANDROID_PLATFORM_LEVEL=${11}", '-DANDROID_TOOLCHAIN=clang', '-DANDROID_STL=gnustl_static' } } } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } externalNativeBuild { cmake { path "CMakeLists.txt" } } } dependencies { compile fileTree(dir: 'libs', include: ['*.jar']) compile 'com.android.support:support-annotations:24.2.0' } 

En la configuración de ejecución, el depurador se establece en auto

Introduzca aquí la descripción de la imagen


Adiciones:

Estoy usando:

Gradle: 2.2.3

Android Studio: 2.2.3


En la consola de LLLB, comprobé el punto de interrupción Lista con:

Lista de puntos de interrupción -v

Todos mis puestos de control se enumeran allí.

No funciona punto de interrupción

 1: file = 'C:\android-dev\...\test.cpp', line = 19, exact_match = 0 

..eso es todo

Punto de interrupción de trabajo

 1: file = 'C:\android-dev\...\test.cpp', line = 19, exact_match = 0 1.1: module = C:\android-dev\...\test.so compile unit = gl_code.cpp function = testFunc(..) location = C:\android-dev\...\test.cpp:16 address = 0x0000007f871d068c resolved = true hit count = 1 

2 Solutions collect form web for “Depuración de módulos de biblioteca C ++ / nativa que no funcionan con Android Studio (Cmake utilizado)”

Las razones parecen ser que se crea una versión de lanzamiento de la lib, que no admite la depuración. Incluso si la aplicación se crea con opciones de depuración.

Solución:

Para solucionar este problema, realice la siguiente solución. Se asegura que una versión de depuración sea compilada.


En tus aplicaciones build.gradle cambiar:

 compile project(':nativelib') 

a

 compile project(path: ':nativelib' , configuration: 'debug') 

En las librerías build.gradle agregar:

 android { publishNonDefault true //this line compileSdkVersion 24 buildToolsVersion "25.0.2" defaultConfig { ... } ... } 

Actualizaciones:

Consulte el problema de google correspondiente para las actualizaciones:

https://code.google.com/p/android/issues/detail?id=222276

Tuve el problema similar con mis propias bibliotecas hace algunos meses porque pensé que si agregué el indicador -g (gcc) generaría los símbolos de depuración, como las aplicaciones de escritorio (linux, kernel unix).

Pero, en realidad, no funciona para generar símbolos de depuración.

Veo que utilizas Cmake como una herramienta de compilación externa y un compilador clang.

Así que en mi caso configuro mi script cmake con gcc pero fuera de gradle scripting, pero creo que será el mismo, agrego -mapcs-frame en el CMAKE_CXX_FLAGS.

 externalNativeBuild { cmake { arguments "-DANDROID_PLATFORM_LEVEL=${11}", '-DANDROID_TOOLCHAIN=gcc', '-DANDROID_STL=gnustl_static', 'DCMAKE_CXX_FLAGS=-mapcs-frame' } } 

Sé que si usted utiliza la compilación del clang puede ser esta bandera no podría trabajar. Pero mi idea era compartir mi experiencia con la depuración nativa de Android.

Espero que estas pistas puedan ayudarte.

Aclamaciones.
Unai.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.