2014-07-02 83 views
4

我需要爲示例CPP項目生成ARM結構共享庫。如何使用Android.mk編譯Cmake文件?

樣品項目包含:

  • 的CMakeLists.txt
  • some.cpp(S)
  • Some.h(S)
  • some.tab.cpp.make(S)
  • some.tab.hpp.cmake(s)

現在,我想創建一個不同的Android項目的共享庫。我試圖編譯[Android-Cmake][1],但它生成X86架構庫不是ARM。

請讓我知道是否有另一種方式來做到這一點。我也可以在Android平臺上運行X86所有版本?

編輯:

這裏是我的Android.mk:

LOCAL_PATH := $(call my-dir)/../ //Path is according JNI Folder 
SRC_TOP_DIR := $(LOCAL_PATH) 

include $(CLEAR_VARS) 

LOCAL_MODULE := smileParse 
LOCAL_CFLAGS := -DANDROID 

LOCAL_SRC_FILES := main.cpp test.cpp smamain.cpp 
LOCAL_C_INCLUDES := $(LOCAL_PATH)/../include $(LOCAL_PATH)/ 

回答

2

創建一個在您的項目稱爲JNI的文件夾:

enter image description here

創建或編輯Android.mk在JNI文件夾,設置包含和庫路徑,

LOCAL_PATH := $(call my-dir) 
include $(CLEAR_VARS) 
LOCAL_MODULE := hello-jni 
LOCAL_SRC_FILES := some.cpp 
include $(BUILD_SHARED_LIBRARY) 

聲明一個Java包裝類中,聲明本機函數:

public class JWrapperSomeClass { 
    public native void Demo(int para); 
} 

使用JAVAH命令生成用於您的C函數簽名++方法包裝:

javah -jni -classpath bin/classes/ -d jni com.example.Your.Package.Class 

編輯代碼在C++

轉到您的項目文件夾,運行命令:

$ANDROID_NDK/ndk-build 

其中$ ANDROID_NDK是您安裝的Android NDK

這幾乎是它的文件夾。有關更多詳細信息,可以閱讀NDK或JNI文檔。

+0

大衛,請看看問題中的編輯部分。我在'Android.mk'文件中添加了所有必需的'.cpp'和'.h'文件。但是'Cmake.txt'中有很多依賴關係。我如何運行它們?或者它應該如何進入'Android.mk'? –

+0

如果你已經有了cpp文件,那麼在Android.mk中添加所有需要的cpp文件,然後運行ndk-build cmd將會執行的操作。 cmake用於生成所需的cpp /頭文件或其他文件。不要將自己與cmake和ndk-build混淆。他們有不同的目的。 – David

+0

感謝但還有一個問題,這些cpp是用純Java代碼而不是Java JNICPP編寫的。這會影響嗎? CPP文件示例:https://github.com/rdkit/rdkit/blob/master/Code/GraphMol/Atom。cpp –