AndroidStudio aar如何打包so库

在Android开发中,我们常常需要使用到一些第三方库,这些库往往包含了一些C/C++代码,需要将其编译成动态链接库(.so文件)才能在Android中使用。本文将介绍如何在Android Studio中将so库打包到aar中。

1. 创建Android库项目

首先,我们需要创建一个Android库项目,用于打包so库。

在Android Studio中,点击File -> New -> New Module,然后选择Android Library,并按照提示进行配置。

2. 导入so库文件

将需要打包的so库文件复制到项目的src/main/jniLibs目录下。

注意,jniLibs目录下的文件结构应该为:jniLibs/abi/*.so,其中abi表示特定的CPU架构类型,如armeabi-v7aarm64-v8ax86等。

3. 配置CMake

在项目的build.gradle文件中,添加CMake配置。

android {
    defaultConfig {
        ...
        externalNativeBuild {
            cmake {
                cppFlags "-frtti -fexceptions"  // 可选,添加C++编译选项
                abiFilters 'armeabi-v7a', 'arm64-v8a', 'x86'  // 可选,指定需要打包的CPU架构
            }
        }
    }

    externalNativeBuild {
        cmake {
            path "CMakeLists.txt"
        }
    }
}

4. 创建CMakeLists.txt文件

在项目根目录下(与build.gradle文件同级),创建一个CMakeLists.txt文件。

cmake_minimum_required(VERSION 3.10.2)

project(mylibrary)

# 添加需要打包的源文件
add_library(mylibrary SHARED
    src/main/cpp/native-lib.cpp
)

# 添加需要链接的库文件
target_link_libraries(mylibrary
    log  # 示例:链接系统log库
)

# 设置编译选项
target_compile_options(mylibrary PRIVATE
    -Wall  # 示例:开启所有警告
)

# 指定so库输出目录
set_target_properties(mylibrary PROPERTIES
    LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/src/main/jniLibs/${ANDROID_ABI}
)

CMakeLists.txt中,我们需要添加需要打包的源文件和需要链接的库文件。这里的示例中,我们添加了一个名为native-lib.cpp的源文件,并链接了系统的log库。

5. 运行打包

配置完成后,我们可以点击Build -> Make Project来编译项目。

编译完成后,在build/intermediates/cmake/debug/obj目录下可以找到生成的so库文件。

类图

classDiagram
    class AndroidStudio {
        +compile()
        +generateLibrary()
    }

    class CMake {
        +addLibrary()
        +linkLibrary()
        +compileOptions()
    }

    class NativeLibrary {
        +sourceFiles
        +linkedLibraries
        +outputDirectory
    }

    AndroidStudio --* CMake
    CMake --* NativeLibrary

序列图

sequenceDiagram
    participant AndroidStudio
    participant CMake
    participant NativeLibrary

    AndroidStudio ->> CMake: compile()
    CMake ->> CMake: addLibrary()
    CMake ->> CMake: linkLibrary()
    CMake ->> CMake: compileOptions()
    CMake ->> NativeLibrary: sourceFiles
    CMake ->> NativeLibrary: linkedLibraries
    CMake ->> NativeLibrary: outputDirectory
    NativeLibrary -->> CMake: compiledLibrary
    CMake -->> AndroidStudio: generateLibrary()

至此,我们已经完成了将so库打包到aar中的操作。通过简单的配置和编译,我们可以方便地将包含so库的Android库项目打包成aar文件,以供其他Android项目使用。