c栋和x2B栋+;使用NDK为Android生成cmake文件的项目 我必须构建2个独立的C++项目,它们为不同的平台安装了CMASE构建文件。我想使用NDK为Android构建这两个库,这样我就可以在Android Studio中使用它们作为预构建库

c栋和x2B栋+;使用NDK为Android生成cmake文件的项目 我必须构建2个独立的C++项目,它们为不同的平台安装了CMASE构建文件。我想使用NDK为Android构建这两个库,这样我就可以在Android Studio中使用它们作为预构建库,android,cmake,android-ndk,android.mk,Android,Cmake,Android Ndk,Android.mk,我如何使用NDK为Android构建它们,从而为Arm架构生成.a/.so?我可以用cmake自己做吗?请提供详细步骤 最后,当我有两个库时,如何集成到Android Studio? 我通过这个链接了解了如何为预构建库创建Android.mks 但是我的lib2在编译和运行时都依赖于lib1。Jni代码将依赖于lib2和lib1的组合库 我是NDK的新手。因此,请提供详细的答案最有可能的是,适用于其他平台的CMake脚本将需要对Android进行一些更改。此外,我们通常需要对外部依赖性进行特殊处

我如何使用NDK为Android构建它们,从而为Arm架构生成.a/.so?我可以用cmake自己做吗?请提供详细步骤

  • 最后,当我有两个库时,如何集成到Android Studio? 我通过这个链接了解了如何为预构建库创建Android.mks 但是我的lib2在编译和运行时都依赖于lib1。Jni代码将依赖于lib2和lib1的组合库


  • 我是NDK的新手。因此,请提供详细的答案

    最有可能的是,适用于其他平台的CMake脚本将需要对Android进行一些更改。此外,我们通常需要对外部依赖性进行特殊处理,例如,如果我们想让CMake找到提升

    但是CMakeLists.txt的主要框架应该是一个良好的开端。您可以为您的库“手动”运行CMake:

    cmake                                                           \
        -DCMAKE_TOOLCHAIN_FILE=${NDK_ROOT}/build/cmake/android.toolchain.cmake \
        -DANDROID_NDK=${NDK_ROOT}                               \
        -DANDROID_ABI=armeabi-v7a                               \
        -DANDROID_PLATFORM=android-19                           \
        -DANDROID_STL=c++_shared                                \
        -DCMAKE_LIBRARY_OUTPUT_DIRECTORY=${LIB1_DIRECTORY}/libs/armeabi-v7a       \
        ${LIB1_DIRECTORY}
    
    在构建JNI包装器的mainCMakeLists.txt中,您可以添加

    add_library(lib1 SHARED IMPORTED)
    set_target_properties(lib1 PROPERTIES IMPORTED_LOCATION ${LIB1_DIRECTORY}/libs/armeabi-v7a/lib1.so )
    target_link_libraries(jni_wrapper lib1 … log)
    
    Android Studio不会为您构建lib1.so,但它会从正确的位置选择并将其打包到APK中


    <> > <>强>导入将提供<强> LBB用于构建<强> LB2如果CMAP脚本尚未处理此依赖关系。

    但它描述了如何将C++源代码添加到Android Studio中并使用CFILE编译它?我的C++项目本身就是一个相当大的系统。所以我想使用命令行为Android单独编译它,然后将该库添加到Android Studio。谢谢@Alex。使用现有的cmake,我得到了以下错误:cmake_系统_名称为“Android”,但未安装“NVIDIA Nsight Tegra Visual Studio Edition”。你知道为什么会这样吗?也许你的电脑上安装了NVIDIA的这个软件包,它的cmake在系统路径上。尝试提供cmake可执行文件的完整路径,它是Android SDK的一部分。我构建了一个库,并将其添加到Android Studio项目中,并设置了一个Android.mk。现在的问题是,我在jni文件中包含的库中的include文件正在寻找Boost头。有没有办法在Android.mk中指定Boost根路径(C:Boost)?我如何告诉Android Studio在哪里查找Boost头文件?Android.mk与cmake不同,它对Boost一无所知。如果您必须提供boost的路径,那么您必须将其作为参数传递给ndk build,或者从OS环境字符串中获取它,或者在最坏的情况下,您可以对其进行硬编码,我想创建一个包含libssl.a和libcrypto.a的共享lib,但是得到ld:warning:ld:warning:ignoreing file openssl-armeabi-v7a/lib/libcrypto.a,该文件是为未链接的体系结构(x86_64)的归档文件构建的:openssl-armeabi-v7a/lib/libcrypto.a,文件是为存档而构建的,而存档不是链接的体系结构(x86_64):openssl-armeabi-v7a/lib/libssl