在Android开发的时候,经常会使用到用c或c++编写的第三方的静态库。如果有源码的话,可以直接跟你自己的代码一去编译成动态库so,但是如果没有源码的话,你就必须在自己的动态库so里面将别人生成好的静态库导入进来一起编译了。我在编译的时候遇到了不少问题,我觉得有必要进行总结一下。
.a静态库引入方式
在模块源码根文件下新建文件夹 libs,复制要引入的.a文件至此,新建 Android.bp
这样就会在obj生成文件夹下面重新生成一个libhisdk.a文件,这个文件就可以在其他android.bp文件中进行编译引用。
android.bp文件
cc_prebuilt_library_static {
name: "libhisdk",
recovery_available: true,
defaults: [
"recovery_defaults",
],
arch: {
arm: {
srcs: ["libhisdk.a"],
},
arm64: {
srcs: ["libhisdk.a"],
},
},
}
.so动态库引用方式
在模块源码根文件下新建文件夹 lib,复制要引入的 so 至此,在该文件中新建 Android.bp,这里以 libjniopencv_face.so 为例, arm 和 arm64 分别对应32/64的so库,针对源码环境位数都是确定的,所以我们就写成一样了。
android.bp文件
cc_prebuilt_library_shared {
name: "libjniopencv_face",
arch: {
arm: {
srcs: ["libjniopencv_face.so"],
},
arm64: {
srcs: ["libjniopencv_face.so"],
},
},
}