如何使用 Android.mk 编译 Cmake 文件?

Ami*_*Pal 5 c++ x86 android arm cmake

我需要ARM为示例CPP项目生成结构共享库。

示例项目包含:

  • CMakeLists.txt
  • some.cpp(s)
  • 一些.h(s)
  • some.tab.cpp.make (S)
  • some.tab.hpp.cmake (s)

现在,我想为不同的 Android 项目创建一个共享库。我试图编译,[Android-Cmake][1]但它生成的X86不是 ARM 的架构库。

请让我知道是否有其他方法可以做到这一点。我也可以X86在所有版本的 Android 平台上运行吗?

编辑 :

这是我的 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)/
Run Code Online (Sandbox Code Playgroud)

Dav*_*vid 3

在您的项目中创建一个名为 JNI 的文件夹:

在此输入图像描述

在JNI文件夹中创建或编辑Android.mk,设置包含和库路径,

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

声明一个java包装类,声明一个native函数:

public class JWrapperSomeClass {
    public native void Demo(int para);
}
Run Code Online (Sandbox Code Playgroud)

使用javah命令为 C++ 方法包装器生成函数签名:

javah -jni -classpath bin/classes/ -d jni com.example.Your.Package.Class
Run Code Online (Sandbox Code Playgroud)

编辑C++代码

转到您的项目文件夹,运行命令:

$ANDROID_NDK/ndk-build
Run Code Online (Sandbox Code Playgroud)

其中 $ANDROID_NDK 是您安装 android NDK 的文件夹

差不多就是这样了。有关更多详细信息,您可以阅读 NDK 或 JNI 文档。