Использовать библиотеку C в Android поверх NDK - PullRequest
7 голосов
/ 05 декабря 2011

Что я хочу сделать:

Я нашел библиотеку C, которая вычисляет высоту звукового потока и хочу использовать ее в Android.

Я подумал, что вместо того, чтобы портировать его, я мог бы также использовать его с помощью NDK, верно?

Как это работает?Я должен установить NDK, конечно, а затем?Могу ли я вызывать функции этой библиотеки C как обычно в Android?

Библиотека в C, которую я хочу "импортировать":

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

Файл "second_c_file.h "- это еще один файл, который мне нужно импортировать, очевидно.

Спасибо за вашу помощь!

Ответы [ 2 ]

7 голосов
/ 12 декабря 2011

Посмотрите на примеры начала работы NDK здесь: http://developer.android.com/sdk/ndk/overview.html#samples

Тогда в вашем NDK посмотрите на пример two-libs. Возможно, вы захотите просто статически связать вашу стороннюю библиотеку обнаружения звукового тона с вашим собственным C-кодом.

Вам нужно будет взглянуть на Android.mk и изменить его, чтобы статически собрать стороннюю библиотеку, а затем указать, что ваш главный проект использует эту библиотеку.

Это должно быть довольно просто. NDK (не использовал его в течение некоторого времени) немного медвежий. Поэтому убедитесь, что ваша среда сборки (особенно если вы используете Windows + Cygwin) работает. Убедитесь, что сборка hello-jni и сборка по умолчанию для двух библиотек. Измените второй, и вы должны быть там.

7 голосов
/ 06 декабря 2011

Хороший учебник о том, как начать работу с NDK, можно найти здесь .И да, вы должны иметь возможность получить его для компиляции и вызова из NDK без особых изменений (при условии, что код не ссылается на другие библиотеки).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...