使用C库中的Android NDK上

问题描述:

我想要做什么:使用C库中的Android NDK上

我发现一个C library which computes an audio stream's pitch,并希望在Android中使用它。

我认为,而不是移植它我也可以在NDK的帮助下使用它,对吧?

这是如何工作的?我必须安装NDK,当然,然后呢?我可以像在Android平常一样调用此C库的函数吗?

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”是,我需要导入另一个文件,效果显着。

感谢您的帮助!

关于如何开始使用NDK的一个很好的教程可以是found here。是的,你应该能够从NDK中编译并调用它,而不需要做太多的修改(假设代码没有引用其他库)。

+0

感谢您链接到本教程!安装工作正常。但是当谈到C库到Android项目的集成(实际使用)时,它不起作用。我的Android应用程序只显示一个错误消息,意外停止了它。我不知道我做错了什么。我做了教程所说的。也许你可以在这个问题中看看我的C库:我必须做些什么改变? (...因为C类名称必须是类似于“Java_com_your_package_MainActivity_invokeNativeFunction”的东西,而在我的C库中还没有任何类别......)。 – caw

+0

谢谢,您链接的教程帮助我安装和使用NDK。 – caw

看看这里的NDK入门样本: http://developer.android.com/sdk/ndk/overview.html#samples

然后在你的NDK,看two-libs例子。您可能希望将您的第三方音频音调检测库静态链接到您自己的C代码。

您需要查看Android.mk并修改它以静态构建第三方库,然后指出您的主项目使用该库。

它应该是非常简单的。 NDK(有一段时间没有用过)是一个熊。所以确保你的编译环境(特别是如果你使用的是Windows + Cygwin)。确保hello-jni构建,并且默认的两个库构建。修改第二个,你应该在那里。

+0

非常感谢!通过引用NDK示例“two-libs”,您帮了我很大忙。但不幸的是,我只能选择一个答案。 – caw

+3

没什么大不了的。不是为了点:)。 – mchang