我有一个“MyLib.aar”项目,它为多个 Android 应用程序创建可重用模块。我的库与“libMyNative.so”中的一些 native C++ 代码链接,该代码是使用 ndk-build 构建的。
我想用 Android Studio CMake 替换 ndk-build,以便用当前标准构建我的 native 代码。 native 代码很少构建,我不想给“MyLib.aar”带来更长的构建时间负担,因为它的构建非常频繁。
似乎很少甚至没有描述这种构建过程的文档。官方 Android 文档中涵盖的唯一一件事是,应该创建一个支持 C++ 的新 Android Studio(应用程序)项目,然后打开其“CMakeLists.txt”文件,直到它(作为副产品)生成您想要的内容。
理想情况下,如果我知道如何连接到 Android Studio 工具链并获取它需要的所有特殊环境变量,我的目标只需使用 cmake 就可以实现。
这可能吗?如果是这样,怎么办?
最佳答案
是的! CMake 在 Android Studio 中的工作方式与在其他地方相同。所有的“特殊环境变量”都是right here in Android's docs
就像你想要一个纯原生应用程序做的一件事是
# build native_app_glue as a static lib
set(APP_GLUE_DIR ${ANDROID_NDK}/sources/android/native_app_glue)
include_directories(${APP_GLUE_DIR})
add_library( app-glue STATIC ${APP_GLUE_DIR}/android_native_app_glue.c)
...
target_link_libraries(MyLibrary app-glue)
除此之外,您需要的任何其他详细信息都是 CMake 问题,而不是 NDK。另请注意,您可以通过 Gradle 传递参数
externalNativeBuild {
cmake {
abiFilters 'armeabi-v7a', 'arm64-v8a'
arguments '-DANDROID_TOOLCHAIN=clang', '-DANDROID_STL=gnustl_static'
}
}
更好的编辑 - 我意识到问题的目的是拥有一个在运行时从 Java/Kotlin 加载的 C++ 库。
在这里,您要确保您的应用程序 build.gradle 具有
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
在你的cmake中你仍然想要
add_library( MyNative SHARED
${NATIVE_SRC}/myCode.cpp)
...
target_link_libraries(MyNative otherNativeLibraries)
然后你只需使用 Java 加载它(不确定 Kotlin)
System.loadLibrary("MyNative");
从这里开始,需要构建 JNI(对于 Kotlin 来说也不确定)调用以插入您的 libMyNative.so 库,LOT more detail about that here
关于android - 是否可以为 Android Studio 创建仅使用 CMake 的项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50122885/