Depuración de Android NDK, bajo windows
Estoy portando una aplicación C compleja a Android, como una biblioteca de SO, envuelta con fina capa java. Después de pocas horas de molestia, tengo el código de compilación en Android, pero por supuesto, la aplicación se bloquea 🙁
Después de mirar alrededor, entiendo que la única manera de depurar la aplicación C en Android es por gdb. Ya que no tengo mucha experiencia con gdb, cualquiera por ahí puede compartir algunas ideas?
- Android NDK: Error: debe estar habilitado con las opciones de compilador -std = c ++ 11 o -std = gnu ++ 11
- Escribiendo a ashmem / ¿por qué android free ashmem?
- Android ndk ninguna regla para hacer objetivo
- Edificio Pango Cairo para Android NDK
- Uso de FFmpeg con Android-NDK
¿Alguien tiene un tutorial para gdb bajo windows :)?
Gracias
- Distribuir la biblioteca NDK con gnustl?
- Android JNI ¿Cuál es el directorio de trabajo actual para C / C ++ ejecutado código?
- Cómo construir / compilar la aplicación ndk?
- Construcción de la biblioteca nativa con el brazo independiente androide toolchain
- Q_RETURN_ARG y QQmlComponent - componente no listo
- Android NDK: llamando al método java de clase JNI C
- Cómo depurar SEGV_ACCERR
- Cómo usar una biblioteca compartida en la actividad nativa
Para una versión más reciente de NDK (estoy utilizando r7c), puede construir la versión de depuración por
- Add
android:debuggable="true"
flag a la etiqueta<Application>
enAndroidManifest.xml
-
ndk-build
conNDK_DEBUG=1
(NDK_DEBUG no es necesario si ejecuta ndk-build con shell unix)
En Windows, las cosas se ponen un poco difíciles porque para usar ndk-gdb
, todavía necesita bash (o cygwin) como de NDK r7c, pero ndk-build
ejecutándose en cygwin bash se ejecutará en el problema de permiso si alguna vez utiliza cualquiera de los pre- Biblioteca estática construida
Mi solución en la máquina de Windows es
- Add
android:debuggable="true"
flag para<application
etiqueta de la<application
enAndroidManifest.xml
(igual que anteriormente) - En cmd (prompt de comandos de Windows): invoca
ndk-build
conNDK_DEBUG=1
- En cygwin bash: ejecutar
ndk-gdb
Para la investigación inicial rápida de la biblioteca nativa así, crear una actividad simple con un botón para activar la función de entrada de la biblioteca y loadLibrary
en la actividad como:
class MyActivity extends Activity { static { System.loadLibrary("mylibrary"); } /* other functions like onCreate, etc... */ public native void libfunc(); public void onClick(View v){ libfunc(); } }
Así que cuando gdb
inicia, la biblioteca en cuestión está realmente cargada, pero todavía puede tener tiempo para establecer puntos de interrupción, etc. antes de que el programa se bloquee; Cuando termine de configurar el depurador, en el indicador (gdb)
, escriba continue
(o simplemente ' c
'), luego presione el botón para iniciar el programa de bloqueo y depuración feliz …
- ¿Es seguro almacenar nombre de usuario y contraseñas en un SQLite local db en Android?
- La actividad de NavigationDrawer está llena de fragmentos de retorno de llamada y lógica de aplicaciones