在Android上使用NDK调用C库

7

我的想法:

我发现了一个用于计算音频流音高的C库,并想在Android中使用它。

我认为,与其将其移植到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”是另一个需要导入的文件,显然。

谢谢你的帮助!

2个回答

7

如何开始使用NDK的好教程可以在这里找到。如果代码不引用其他库,你应该能够轻松地将其编译并从NDK中调用它。


谢谢你提供这个教程的链接!安装很顺利。但是当涉及到将C库集成到Android项目中(实际使用)时,它就无法工作了。我的Android应用程序只显示一个错误消息,说它意外停止了。我不知道我做错了什么。我按照教程所说的做了。也许你可以看一下我的C库:我需要做哪些更改?(因为C类名必须类似于“Java_com_your_package_MainActivity_invokeNativeFunction”,而我的C库中还没有任何类...)。 - caw
谢谢,您提供的教程帮助我安装和使用了NDK。 - caw

7
请查看NDK入门示例: http://developer.android.com/sdk/ndk/overview.html#samples 然后在您的NDK中查看two-libs示例。您可能只想将第三方音频音高检测库静态链接到自己的C代码中。
您需要查看Android.mk并修改它以静态构建您的第三方库,然后指示您的主项目使用该库。
这应该很简单。 NDK(我有一段时间没有使用)有点棘手。因此,请确保您的构建环境(特别是如果您正在使用Windows + Cygwin)工作正常。确保hello-jni可构建,并且默认的two-libs可构建。修改第二个示例,您就可以实现目标了。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接