如何使用CMake在Android Studio 3.2中创建静态库(.a文件)

流放

现在,我在Android Studio 3.2中创建了一个包含c ++支持的新项目,它看起来native-lib.cpp自然CMakeLists.txt是这样的:

add_library( # Sets the name of the library.
    native-lib

    # Sets the library as a shared library.
    SHARED

    # Provides a relative path to your source file(s).
    src/main/cpp/native-lib.cpp)

现在,如果我构建此项目,则可以libnative-lib.so在某些“调试”目录中找到,这是可以的,但是我需要静态库,即.a文件。

更改SHAREDSTATIC不会产生这些文件,我应该做什么?

CMake文档仅提及以外的方法add_library()

我搜索的每个文档都只谈论SHARED/STATIC

我错过了什么?

流放

首先,我要感谢上面的所有人,没有您的灵感,我无法得到这个答案。

我写下这个答案不是为了避免那些答案是错误的,我只是想一步一步地帮助像我这样的新手,所有细节都应该知道。

这个答案在带有CMake 3.4.1的Android Studio 3.2.1中得到了证明,我进行了三重检查。

现在,如果您创建一个具有C ++支持的新项目,请始终单击“下一步”,您将获得一个CMakeLists.txt,外观应如下所示:

cmake_minimum_required(VERSION 3.4.1)

add_library( 
        native-lib
        SHARED
        src/main/cpp/native-lib.cpp)

find_library( 
        log-lib
        log)

target_link_libraries( 
        native-lib
        ${log-lib})

SHARED更改STATIC将不会输出任何.a文件,您将一无所获,甚至没有.so文件(当然,此文件中没有添加SHARED库)。

这是Gradle / Android Studio的“故障”,上面的答案已经提到了这一点,如果单独使用CMake,则将定义.a文件。

好,现在是我的绝招

我们已经有一个添加SHARED库,然后添加一个使用相同源文件的STATIC库。在下面添加CMakeLists.txt

add_library(
        native-lib-static
        STATIC
        src/main/cpp/native-lib.cpp
)

因为“ native-lib-static”用于共享版本,所以可以用“ native-lib”以外的任何名称替换。

target_link_libraries像这样更改您的

target_link_libraries(
        native-lib
        native-lib-static
        ${log-lib})

在此处输入图片说明

Gradle-> app-> build-> assembleDebug / assembleRelease

然后你会得到libnative-lib-static.a,在

app\.externalNativeBuild\cmake\debug(release)\<abi>\libnative-lib-static.a

该路径设置在app\build.gradle

android{
    defaultConfig{
         externalNativeBuild{
             CMake{

我不确定ATM是否会在将来更改,但是您始终可以在项目文件夹中搜索*.a文件。

我认为这次我不会错过任何事情。

所有归功于@Michael @Dan Albert @Alex Cohn @shizhen

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用 Mp3agic jar Android studio 从 MP3 文件中获取 ID3 歌词标签?

Cmake:如何在Android Studio中包括.h文件以及从Android代码调用头文件的方法

如何使用多个静态库创建JNI Android Studio项目

如何在Android Studio中使用Gradle实验插件0.2.0将静态库(.a文件)与APK链接

不再使用Android Studio 3.0在输出文件夹中创建AAR库

如何使用CMake将自己的.o文件与第三方静态库合并,以创建新的合并静态库?

如何在Android Studio中关联.mp3文件

如何从android studio创建jar文件

如何使用cmake使相对文件路径在visual studio中工作?

在Android Studio中创建AAR文件

Android Studio 3中的“使用gradle文件同步项目”按钮在哪里?

如何使用openGL在Android Studio中渲染.dae(collada)文件

如何在使用Android Studio进行处理中访问文件

如何使用 Android Studio 编辑 .aab 文件中的版本

Android Studio:如何从库的jar文件中读取类?

如何在Android Studio中添加“库”文件夹?

如何在Android Studio中创建目录文件夹

如何在Android Studio中创建密钥存储文件?

从cpp文件创建动态库,并使用clang创建静态库

如何从android studio代码中删除文件

SO文件无法在Android Studio中使用CMake生成

在Android Studio中恢复文件?

Android Studio中的文件路径

在Android Studio中读取文件

如何从“现有”android studio 项目创建 *.aar 文件(不创建新的 android 库)?

在Android Studio中修改文件时如何控制“保存文件”?

如何在android studio中为扫描图像创建文件路径并添加到SQL数据库?

使用g ++从cpp文件和静态库创建共享库

使用静态库(.a)中的头文件(.h)