我必须构建 2 个独立的 C++ 项目,它们具有针对不同平台的 Cmake 构建文件设置。我想使用 NDK 为 Android 构建它们,以便我可以将它们用作 Android Studio 中的预构建库。
如何使用 NDK 为 Android 构建它们,为 Arm 架构生成 .a/.so?我可以使用 cmake 本身来完成吗?请提供详细步骤
最后,当我有 2 个库时,如何集成到 Android Studio?
我从这个链接学会了如何为预构建库创建 Android.mks在 Android Studio 中使用预构建的共享库 https://stackoverflow.com/questions/46660531/using-pre-built-shared-library-in-android-studio但我的lib2 的编译和运行都依赖于lib1。 Jni 代码将依赖于 lib2 和 lib1 的组合库
我是 NDK 新手。所以请提供详细的答案
最有可能的是,适用于其他平台的 CMake 脚本将需要针对 Android 进行一些更改。此外,我们经常需要对外部依赖项进行特殊处理,例如如果我们想让 CMake 找到正确的版本 https://stackoverflow.com/a/35806563/192373 of boost.
但主要骨架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}
In the main CMakeLists.txt构建你的 JNI 包装器,你可以添加
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 中。
同样的技巧与IMPORTED会提供lib1用于构建lib2如果 CMake 脚本尚未处理此依赖性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)