gpt4 book ai didi

android - 是否可以为 Android Studio 创建仅 CMake 的项目?

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:06:04 25 4
gpt4 key购买 nike

我有一个“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'
}
}

更好的编辑 - 我意识到这个问题的目的是让一个 c++ 库在运行时从 Java/Kotlin 加载它。

在这里你要确保你的app 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com