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-v7a
、arm64-v8a
、x86
等。
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项目使用。