2011-12-05 11 views
6

Quello che voglio fare:biblioteca Usare C in Android NDK sopra

Ho trovato un C library which computes an audio stream's pitch e voglio usarlo in Android.

Ho pensato che invece di portarlo potrei anche usarlo con l'aiuto dell'NDK, giusto?

Come funziona? Devo installare NDK, ovviamente, e poi? Posso chiamare le funzioni di questa libreria C come normale in Android?

La libreria in C che voglio "importazione":

#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) { 
    ... 
} 

Il file "second_c_file.h" è un altro file che ho bisogno di importare, ovviamente.

Grazie per il vostro aiuto!

risposta

6

Un buon tutorial su come iniziare a lavorare con NDK può essere found here. E sì, dovresti essere in grado di farlo compilare e chiamarlo dal NDK senza molte modifiche (assumendo che il codice non faccia riferimento ad altre librerie).

+0

Grazie per il collegamento a questo tutorial! L'installazione funziona bene. Ma quando si tratta di integrare la libreria C nel progetto Android (l'uso effettivo), non funziona. La mia applicazione Android mostra solo un messaggio di errore che è stato interrotto in modo imprevisto. Non so cosa ho fatto di sbagliato. Ho fatto quello che il tutorial ha detto. E forse potresti dare un'occhiata alla mia libreria C nella domanda: quali cambiamenti devo fare? (... come i nomi delle classi C devono essere qualcosa come "Java_com_your_package_MainActivity_invokeNativeFunction" e nella mia libreria C non ci sono ancora classi ...). – caw

+0

Grazie, il tutorial che hai collegato per aiutarmi a installare e utilizzare NDK. – caw

7

Guardate i campioni NDK Guida introduttiva qui: http://developer.android.com/sdk/ndk/overview.html#samples

Poi, nel tuo NDK, guarda l'esempio two-libs. Probabilmente vorrai semplicemente collegare staticamente la tua libreria di rilevamento dell'intonazione audio di terze parti al tuo codice C.

Avrai bisogno di guardare Android.mk e modificarlo per costruire staticamente la tua libreria di terze parti e poi indicare che il tuo progetto principale usa quella libreria.

Dovrebbe essere piuttosto semplice. L'NDK (non l'ho usato da un po ') è un po' un orso. Quindi assicurati che il tuo ambiente di compilazione (specialmente se stai usando Windows + Cygwin) funzioni. Assicurati che le build hello-jni e le build di due libb predefinite. Modifica il secondo e dovresti essere lì.

+0

Grazie mille! Mi hai aiutato molto facendo riferimento all'esempio NDK "two-libs". Ma sfortunatamente, posso scegliere solo una risposta. – caw

+3

Nessun grosso problema. Non in esso per i punti :). – mchang