Androidstudio如何调用.so库
时间: 2025-05-18 20:30:07 浏览: 9
### 如何在 Android Studio 中加载和使用 .so 文件
#### 配置 Gradle 文件
为了能够成功加载 `.so` 库,在主 module 的 `build.gradle` 文件中需添加特定配置来指定 `.so` 文件的位置并禁用自动 NDK 构建调用。具体来说:
```gradle
android {
...
sourceSets.main {
jniLibs.srcDir 'src/main/libs'
jni.srcDirs = []
}
}
```
此设置确保了 `.so` 文件被放置于正确路径下,并防止构建工具忽略自定义的 `Android.mk` 文件[^2]。
对于采用 CMake 或者 ndk-build 工具链的情况,则还需要进一步声明外部原生构建脚本位置:
```gradle
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
// 或者针对ndk-build方式:
externalNativeBuild {
ndkBuild {
path 'src/main/jni/Android.mk'
}
}
```
这使得编译过程中可以找到相应的构建指令文件[^4]。
#### 加载 SO 库
为了让应用程序能够在运行时访问这些预先编译好的共享库,可以在 Java 层面利用 System.loadLibrary 方法完成动态链接库的装载操作。一般情况下会放在 Application 类或者是 Activity 生命周期早期阶段执行:
```java
static {
System.loadLibrary("native-lib");
}
```
这里的 `"native-lib"` 是指定了想要加载的目标 `.so` 文件去掉前缀 lib 和后缀 .so 后的名字部分[^5]。
#### 调用本地方法
当完成了上述准备工作之后,就可以像平常一样编写 JNI 接口函数并与之交互了。例如在一个名为 `MainActivity.java` 的文件内定义如下接口:
```java
public class MainActivity extends AppCompatActivity {
public native String stringFromJNI();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView tv = findViewById(R.id.sample_text);
tv.setText(stringFromJNI());
}
static {
System.loadLibrary("native-lib");
}
}
```
与此同时,在对应平台架构下的实现代码应当存在于相应目录结构内的 cpp 文件之中(比如 arm64-v8a 下),并通过 CMakeLists.txt 正确关联起来。
阅读全文
相关推荐
















