Android:在Android Studio中链接外部静态C / C ++库

时间:2019-01-28 15:32:08

标签: android c++ c android-studio native

我已经看到了很多答案,可以使用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 ++项目

现在,这就是我遇到的问题。我已经创建了具有Native C ++支持的Android Studio项目,并且需要弄清楚将预编译的mylib.a文件放在何处才能使函数调用“ foo”。我看到了所有不同类型的位置,例如jniLibs文件夹,libs和cpp文件夹。但是没有任何事后的例子。就像将本机库添加到Gradle中一样。

*因为我只有一个静态库文件,所以无法将代码放入Android Studio并使用Cmake。 *

TLDR:如何向Android Studio中添加预编译的* .a文件。

1 个答案:

答案 0 :(得分:2)

假设您有一个mylib.a用NDK构建的地方,您可以像这样在您的主共享库中链接它:

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)