2014-01-15 79 views
-1

我有使用c庫創建的.so文件。現在我想在另一個項目中使用.so文件來調用這些函數。我不知道如何使用這個庫。如何從該庫調用任何函數?我已經嘗試過,但發現錯誤作爲本機方法not found.I是一個初學者與ndk在android.any上的這個幫助.. ??在libs中使用.so文件時找不到原生方法Android

我剛纔提到很多環節這些並沒有解決我的問題,因爲 Native method not found

java.lang.UnsatisfiedLinkError: Native method not found

我對着同此鏈接,但它是無人接聽。鏈接 Need NDK Help: How to call a C++ function for shared library from another project that uses C++

我Android.mk文件如下:我從中.so文件

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 
LOCAL_MODULE := ShairportSample 
LOCAL_SRC_FILES := ShairportSample.cpp 
APP_PLATFORM := android-19 
include $(BUILD_SHARED_LIBRARY) 
+0

你該庫添加到您的主模塊在你的Android.mk LOCAL_SHARED_LIBRARIES?發佈你的Android.mk真的可以幫助你,因爲沒有關於你如何處理事情的信息。 – eozgonul

+0

@ user2359247從我創建.so文件的項目mk文件?? ..在另一個我沒有那個文件,直到現在。 – Manmohan

+0

正如我所猜測的,您不會將該共享庫添加到您的模塊。答案應該解決你的問題。 – eozgonul

回答

0

你可以調用裏面你想從另一個NDK LIB重用。所以實現的功能創建的,您Android.mk文件中設置它作爲預建的共享庫your're取決於:

LOCAL_PATH := $(call my-dir) 

include $(CLEAR_VARS) 
LOCAL_MODULE := ShairportSample 
LOCAL_SRC_FILES := libs/$(TARGET_CPU_ABI)/libShairportSample.so 
LOCAL_EXPORT_C_INCLUDES := PATH_TO_ShairportSample.h 
include $(PREBUILT_SHARED_LIBRARY) 

include $(CLEAR_VARS) 
LOCAL_MODULE := yournewlib 
LOCAL_SRC_FILES := yournewlib.cpp 
LOCAL_SHARED_LIBRARIES += ShairportSample 
include $(BUILD_SHARED_LIBRARY) 

從你的Java代碼,就必須從Java加載ShairportSample lib目錄在加載yournewlib之前。否則,如果要直接從Java重用您的.so,則應該導出使用它的Java庫(.jar)。然後你可以在你的其他項目中重用這個Java庫。

+0

我有項目A(JNI項目)和A.SO,這是我在Building A中生成的。而上面的.mk文件是A項目。現在,我有項目B,並希望在項目B中使用A.SO。我應該在我的項目中添加.mk文件代碼。 – Manmohan

+0

請告訴我一些我以前的評論,因爲我是Native Developments的新手。 – Manmohan

+0

您應該將此代碼放入項目B的Android.mk文件中。 – ph0b

0
  1. 首先,你應該確保被正確編譯.so文件,把它命名爲這樣libYourLibName.so,把它放到庫/ armeabi文件夾。

  2. 其次,請確認你已經加載從靜態塊.so文件

靜態{ 的System.loadLibrary( 「YourLibName」); }

可能,這將幫助你

相關問題