2011-12-05 10 views
6

Lo que quiero hacer:biblioteca de Uso C en Android NDK sobre

He encontrado un C library which computes an audio stream's pitch y quiero usarlo en Android.

Pensé que en lugar de portarlo también podría usarlo con la ayuda del NDK, ¿verdad?

¿Cómo funciona esto? Tengo que instalar el NDK, por supuesto, ¿y luego? ¿Puedo llamar funciones de esta biblioteca C de forma normal en Android?

La biblioteca en C que quiero "importación":

#include "second_c_file.h" 
#include <math.h> 
#include <stdlib.h> 
#include <string.h> 

#ifndef max 
#define max(x, y) ((x) > (y)) ? (x) : (y) 
#endif 
#ifndef min 
#define min(x, y) ((x) < (y)) ? (x) : (y) 
#endif 

int _power2p(int value) { 
    ... 
} 

typedef struct _minmax { 
    int index; 
    struct _minmax *next; 
} minmax; 

double _test_calculate(double * var1, int var2, int var3) { 
    ... 
} 

El archivo "second_c_file.h" es otro archivo que necesito para importar, obviamente.

Gracias por su ayuda!

Respuesta

6

Un buen tutorial sobre cómo empezar a trabajar con el NDK puede ser found here. Y sí, debería poder compilarlo y llamarlo desde el NDK sin muchos cambios (suponiendo que el código no haga referencia a otras bibliotecas).

+0

¡Gracias por el enlace a este tutorial! La instalación funciona bien Pero cuando se trata de la integración de la biblioteca C en el proyecto Android (el uso real), no funciona. Mi aplicación de Android solo muestra un mensaje de error que se detuvo inesperadamente. No sé lo que hice mal. Hice lo que decía el tutorial. Y tal vez podría echar un vistazo a mi biblioteca C en la pregunta: ¿Qué cambios debo hacer? (... como los nombres de las clases C deben ser algo así como "Java_com_your_package_MainActivity_invokeNativeFunction" y en mi biblioteca C todavía no hay clases ...). – caw

+0

Gracias, el tutorial al que me vinculó me ayudó a instalar y usar el NDK. – caw

7

Observa las muestras NDK inicio rápido A continuación: http://developer.android.com/sdk/ndk/overview.html#samples

Luego, en el NDK, mira el ejemplo two-libs. Probablemente quiera vincular estáticamente su biblioteca de detección de tono de audio de terceros a su propio código C.

Tendrá que mirar el Android.mk y modificarlo para construir su biblioteca de terceros estáticamente y luego indicar que su proyecto principal usa esa biblioteca.

Debe ser bastante sencillo. El NDK (no lo he usado por un tiempo) es un poco oso. Así que asegúrese de que su entorno de compilación (especialmente si está usando Windows + Cygwin) funciona. Asegúrese de que las compilaciones de hello-jni y las compilaciones de dos libs predeterminadas. Modifica el segundo y deberías estar allí.

+0

¡Muchas gracias! Me ayudaste mucho al hacer referencia a la muestra NDK "two-libs". Pero desafortunadamente, solo puedo elegir una respuesta. – caw

+3

No es gran cosa. No en eso por los puntos :). – mchang