androidstudio引入外部so
时间: 2025-04-20 22:34:15 浏览: 32
### 如何在 Android Studio 中添加并配置外部 .so 文件
#### 设置 SO 文件路径
为了使应用程序能够找到所需的 `.so` 库,在 `build.gradle` (Module: app) 文件中的 `android` 块下指定源集的 jniLibs 目录。默认情况下,Android Studio 的 so 文件放置位置为 `app/src/main/jniLibs/armeabi` 或者其他 ABI 版本对应的文件夹内[^1]。
```gradle
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
```
上述代码片段会告诉构建工具去名为 `libs` 的目录里查找本地库而不是默认的 `src/main/jniLibs` 路径。
#### 配置 Gradle 构建脚本
对于那些已经编译好的第三方共享库(即`.so`),可以直接复制到项目的适当ABI子目录中,并通过修改模块级 `build.gradle` 来确保这些库被正确打包进 APK 里面:
```gradle
android {
...
defaultConfig {
externalNativeBuild {
cmake {
cppFlags ""
}
}
ndk {
abiFilters 'armeabi-v7a', 'arm64-v8a' // 只包含特定架构版本
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
}
```
这段配置指定了哪些 CPU 架构应该被打包以及告知 CMake 使用哪个清单文件来进行链接操作[^3]。
#### 将预编译的 .so 文件加入工程
把预先编译得到的 `.so` 动态链接库放入合适的位置——通常是按照不同平台分别存放在如下结构下的相应文件夹中:
- `app/src/main/jniLibs/armeabi/libexample.so`
- `app/src/main/jniLibs/armeabi-v7a/libexample.so`
- `app/src/main/jniLibs/arm64-v8a/libexample.so`
- ...
这样做之后,当应用安装时就会自动把这些二进制资源嵌入最终的应用程序包(APK)[^4]。
#### 加载动态库
最后一步是在 Java/Kotlin 层面加载这个 native library 。这通常发生在 Application 类或者 Activity 生命周期早期阶段,比如 onCreate 方法内部:
```java
static {
System.loadLibrary("example");
}
```
这里假设所导入的 `.so` 文件名称叫做 libexample.so ,去掉前缀 “lib” 和后缀“.so”,只留下中间部分作为参数传递给 loadLibrary 函数调用[^2]。
阅读全文
相关推荐


















