Android:在 Android Studio 中链接外部静态 C/C++ 库
Android: Linking a external static C/C++ Library in Android Studio
我已经看到很多关于使用 Cmake 在 Android Studio 中运行原生代码的答案,但是,关于如何将预编译的 C/C++ 库包含到 Android。以下是我尝试让本地库(首先尝试使用 .a)工作所采取的步骤。
1) mylib.c 是我要导入到 Android Studio
的 C 库
#include "mylib.h"
int total_foo;
int foo(float y, float z) {
total_foo = y + z;
return total_foo;
}
2) mylib.h是mylib.c
的头文件
#ifndef _MYLIB_H_
#define _MYLIB_H_
#define MAX_FOO 20
struct foo_struct {
int x;
float y;
};
typedef struct foo_struct foo_struct;
extern int total_foo;
extern int foo(float y, float z);
#endif
3) .o 文件的命令(使用带 make_standalone_toolchain.py 的 NDK)
$CC -o mylib.o -c mylib.c
4) .a 文件命令
ar rcs mylib.a mylib.o
5) 创建原生 C++ 项目
现在这就是我卡住的地方。我已经创建了支持原生 C++ 的 Android Studio 项目,需要弄清楚将预编译的 mylib.a 文件放在哪里才能进行函数调用 "foo"。我看到了所有不同类型的地方,如 jniLibs 文件夹、libs 和 cpp 文件夹。但是没有关于之后做什么的例子。就像将本机库添加到 Gradle.
*将代码放入 Android Studio 并使用 Cmake 已经过时了,因为我只有一个静态库文件。 *
TLDR:如何将预编译的 *.a 文件添加到 Android Studio。
假设你有一个 mylib.a
某处是用 NDK 构建的,你可以 link 在你的主共享库中反对它,如下所示:
CMakeLists.txt:
cmake_minimum_required(VERSION 3.4.1)
add_library(native-main-lib SHARED src/main/cpp/native-lib.cpp)
add_library(my_lib STATIC IMPORTED)
set_target_properties(my_lib PROPERTIES IMPORTED_LOCATION path/to/mylib.a)
set_target_properties(my_lib PROPERTIES INCLUDE_DIRECTORIES path/to/mylib/include)
target_link_libraries(native-main-lib my_lib)
我已经看到很多关于使用 Cmake 在 Android Studio 中运行原生代码的答案,但是,关于如何将预编译的 C/C++ 库包含到 Android。以下是我尝试让本地库(首先尝试使用 .a)工作所采取的步骤。
1) mylib.c 是我要导入到 Android Studio
的 C 库#include "mylib.h"
int total_foo;
int foo(float y, float z) {
total_foo = y + z;
return total_foo;
}
2) mylib.h是mylib.c
的头文件#ifndef _MYLIB_H_
#define _MYLIB_H_
#define MAX_FOO 20
struct foo_struct {
int x;
float y;
};
typedef struct foo_struct foo_struct;
extern int total_foo;
extern int foo(float y, float z);
#endif
3) .o 文件的命令(使用带 make_standalone_toolchain.py 的 NDK)
$CC -o mylib.o -c mylib.c
4) .a 文件命令
ar rcs mylib.a mylib.o
5) 创建原生 C++ 项目
现在这就是我卡住的地方。我已经创建了支持原生 C++ 的 Android Studio 项目,需要弄清楚将预编译的 mylib.a 文件放在哪里才能进行函数调用 "foo"。我看到了所有不同类型的地方,如 jniLibs 文件夹、libs 和 cpp 文件夹。但是没有关于之后做什么的例子。就像将本机库添加到 Gradle.
*将代码放入 Android Studio 并使用 Cmake 已经过时了,因为我只有一个静态库文件。 *
TLDR:如何将预编译的 *.a 文件添加到 Android Studio。
假设你有一个 mylib.a
某处是用 NDK 构建的,你可以 link 在你的主共享库中反对它,如下所示:
CMakeLists.txt:
cmake_minimum_required(VERSION 3.4.1)
add_library(native-main-lib SHARED src/main/cpp/native-lib.cpp)
add_library(my_lib STATIC IMPORTED)
set_target_properties(my_lib PROPERTIES IMPORTED_LOCATION path/to/mylib.a)
set_target_properties(my_lib PROPERTIES INCLUDE_DIRECTORIES path/to/mylib/include)
target_link_libraries(native-main-lib my_lib)