gpt4 book ai didi

android - 使用 Gradle 和 CMake 将静态 ".a"库链接到 Android Studio 项目

转载 作者:行者123 更新时间:2023-12-03 03:45:20 31 4
gpt4 key购买 nike

我需要使用 CMakeLists.txt 将预构建的“.a”静态库链接到 Android Studio 项目。

.a 库是为 armeabi、armeabiv-7a、mips 和 x86 正确构建的(它甚至可以被“objdumped”用于“内容检查”)并且“.h”文件也恰到好处。

目标不是重新编译库源代码以及我的 Android Studio 项目 native 源代码。

此外,请不要引用使用 NDK + Andoid.mk 的解决方案(仅限 CMakeLists.txt)。

由于网络上没有关于此问题的工作示例(包括 Google NDK 文档和 SO),请提供项目文件和/或项目结构所需的所有更改。

我将“.a”文件及其“include”目录保存在本地文件夹中,因此作为对该位置的元引用,请考虑/lib.a 和/include。

谢谢。

最佳答案

经过对这个主题的长期研究,这是一个可行的解决方案,但有几个小问题。

问题#1:

这应该通过将 libxyz.a lib 文件及其 include 目录放在 {AndroidStudioProjects 文件夹}/{项目名称}/app/libs 中来实现 但由于某些(仍然未知的)原因,在我的系统上它从来没有那样工作过。

我设法通过将(lib 文件和包含目录)放在以下位置来使其工作:{AndroidStudioProjects 文件夹}/{项目名称}/app/src/main/cpp/libs(其中必须创建)。

问题 #2:

我遇到了一些 32 位 x 64 位链接问题,因此,在这一点上,我放弃了“胖 APK”并仅保留 32 位。

我做了什么

CMakeLists.txt 添加:

add_library(xyz STATIC IMPORTED)
set_target_properties(xyz PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/libxyz.a)

并且在 target_link_libraries(到您共享的 native 库)上,您必须添加“xyz”引用:

target_link_libraries(
#the target shared lib:
native-lib
#other libs to link go here
xyz)

额外:

如果您希望能够通过使用默认包含目录在您的 C++ 代码中将 header 包含到 libxyz.a,如下所示:

#inlcude <xyz.h>

您必须将它添加到 CMakeLists.txt:

include_directories( ${CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}/include )

只输出 32 位

build.gradle (Module:app) 上,转到“android defaultConfig” block ,就在“externalNativeBuild”之前并添加 ndk abiFilters:

android {
compileSdkVersion 28
defaultConfig {
applicationId "com.your.project"
minSdkVersion 21
targetSdkVersion 28
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
ndk {
abiFilters 'armeabi-v7a', 'x86'
}
externalNativeBuild {
cmake {
cppFlags ""
}
}
}

请随时改进。

关于android - 使用 Gradle 和 CMake 将静态 ".a"库链接到 Android Studio 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60270093/

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