【问题标题】:How to compile Cmake file with Android.mk?如何用 Android.mk 编译 Cmake 文件?
【发布时间】:2014-07-02 07:42:34
【问题描述】:

我需要为sampleCPP项目生成ARM结构共享库。

示例项目包含:

  • CMakeLists.txt
  • 一些.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)/

【问题讨论】:

    标签: android c++ x86 cmake arm


    【解决方案1】:

    在您的项目中创建一个名为 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)
    

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

    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 文档。

    【讨论】:

    • 大卫,请查看问题中的编辑部分。我在Android.mk 文件中添加了所有必需的.cpp.h 文件。但是Cmake.txt中写了很多依赖。我如何运行它们?或者应该怎么变成Android.mk
    • 如果你已经有了 cpp 文件,然后在 Android.mk 中添加所有需要的 cpp 文件,然后运行 ​​ndk-build cmd 就可以了。 cmake 用于生成所需的 cpp/header 或其他文件。不要将自己与 cmake 和 ndk-build 混淆。它们有不同的用途。
    • 谢谢,但还有一个问题,这些 cpp 是用纯 cpp 代码而不是 Java JNICPP 编写的。会不会有影响? CPP 文件示例:github.com/rdkit/rdkit/blob/master/Code/GraphMol/Atom.cpp
    • 这些cpp文件不能在Java中直接调用。您必须提供 java 包装器方法,在其中调用 cpp 函数。注意答案中的 native 关键字,它表明函数 DemoNOT 纯 java 函数,而是用 c++ 实现的!这个 c++ 函数的命名遵循特定的格式,你最好看一下 JNI 文档。
    • 如何在 Android.mk 中将多个 .c、.h、.hpp 文件一起添加为 LOCAL_SRC_FILES?提前致谢。
    猜你喜欢
    • 1970-01-01
    • 2019-04-16
    • 2013-02-01
    • 2019-07-12
    • 1970-01-01
    • 2020-02-05
    • 2017-04-28
    • 2020-07-31
    • 1970-01-01
    相关资源
    最近更新 更多