2014-07-02 85 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 –