2011-12-05 10 views
6

Co chcę zrobić:Wykorzystanie biblioteki C w ciągu Android NDK

Znalazłem C library which computes an audio stream's pitch i chcesz go używać w Androidzie.

Myślałem, że zamiast przenosić go, mogę go również użyć przy pomocy NDK, prawda?

Jak to działa? Muszę oczywiście zainstalować NDK, a potem? Czy mogę wywoływać funkcje tej biblioteki C tak samo normalnie w systemie Android?

Biblioteka w C, że chcę "Importuj":

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

Plik "second_c_file.h" to kolejny plik, który trzeba importować, oczywiście.

Dzięki za pomoc!

Odpowiedz

6

Dobrym samouczkiem opisującym rozpoczęcie pracy z NDK może być found here. I tak, powinieneś być w stanie go skompilować i wywołać z NDK bez wielu zmian (zakładając, że kod nie odwołuje się do innych bibliotek).

+0

Dzięki za link do tego samouczka! Instalacja działa dobrze. Ale jeśli chodzi o integrację biblioteki C w projekcie Android (rzeczywiste użycie), to nie działa. Moja aplikacja na Androida pokazuje komunikat o błędzie, że została niespodziewanie zatrzymana. Nie wiem, co zrobiłem źle. Zrobiłem to, co powiedział samouczek. I może mógłbyś rzucić okiem na moją bibliotekę C w pytaniu: Jakie zmiany muszę zrobić? (... ponieważ nazwy w klasie C muszą być podobne do "Java_com_your_package_MainActivity_invokeNativeFunction", aw mojej bibliotece C nie ma jeszcze żadnych klas ...). – caw

+0

Dziękuję, samouczek, który podłączyłeś, pomógł mi zainstalować i używać NDK. – caw

7

Spójrz na NDK podręczny próbek tutaj: http://developer.android.com/sdk/ndk/overview.html#samples

Następnie w NDK, spojrzeć na przykład two-libs. Prawdopodobnie będziesz chciał po prostu statycznie powiązać bibliotekę wykrywania tonu audio innej firmy z własnym kodem C.

Będziesz musiał spojrzeć na Android.mk i zmodyfikować go, aby statycznie zbudować bibliotekę firm trzecich, a następnie wskazać, że twój główny projekt korzysta z tej biblioteki.

Powinno być całkiem proste. NDK (nie używałem go od jakiegoś czasu) jest trochę niedźwiedzia. Dlatego upewnij się, że działa środowisko kompilacji (szczególnie jeśli korzystasz z systemu Windows + Cygwin). Upewnij się, że kompiluje hello-jni i domyślne kompilacje dwóch bibliotek. Zmodyfikuj drugi i powinieneś tam być.

+0

Dziękuję bardzo! Pomogłeś mi bardzo, odwołując się do próbki NDK "two-libs". Ale niestety, mogę wybrać tylko jedną odpowiedź. – caw

+3

Nic wielkiego. Nie w tym za punkty :). – mchang

Powiązane problemy