2011-12-05 127 views
6

我想要做什麼:使用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」是,我需要導入另一個文件,效果顯着。

感謝您的幫助!

回答

6

關於如何開始使用NDK的一個很好的教程可以是found here。是的,你應該能夠從NDK中編譯並調用它,而不需要做太多的修改(假設代碼沒有引用其他庫)。

+0

感謝您鏈接到本教程!安裝工作正常。但是當談到C庫到Android項目的集成(實際使用)時,它不起作用。我的Android應用程序只顯示一個錯誤消息,意外停止了它。我不知道我做錯了什麼。我做了教程所說的。也許你可以在這個問題中看看我的C庫:我必須做些什麼改變? (...因爲C類名稱必須是類似於「Java_com_your_package_MainActivity_invokeNativeFunction」的東西,而在我的C庫中還沒有任何類別......)。 – caw

+0

謝謝,您鏈接的教程幫助我安裝和使用NDK。 – caw

7

看看這裏的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