如何在 Android Studio 1.5 中包含 .so 库和 .c 文件

How to include a .so library and .c files in Android Studio 1.5

如何在 Android Studio 中添加 .so 库并通过包含本机代码的 .c 文件调用它?

我用谷歌搜索了一个星期,尝试了所有可能的解决方案,但一无所获。

网站有this, , this, this,还有更多...

我是来调用本机 .c 文件的,但我无法包含 .so 库,因为 Android studio 找不到它。

我还不想使用新的实验性 gradle。

环境配置下一个:

这是我的代码和 gradle 配置的一部分:

GRADLE 文件

android {
compileSdkVersion 23
buildToolsVersion "23.0.1"

defaultConfig {
    ....

    ndk {
        moduleName "ffmpegkit"
    }
}

buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

}

项目结构

在 .C 文件中包含语句

如您所见,未找到 "libavcodec.so",但根据我找到的一些解决方案,项目结构是正确的。

有谁知道如何解决这个问题并将这些 .so 库与 .c 文件一起使用?

非常感谢!

我假设您的 .c 文件位于项目的 ffmpegkit 目录下。您也将 ffmpeg 二进制文件复制到项目的 jniLibs。到目前为止,一切都很好。

您需要提供 ffmpeg 包含文件的路径,以便您的 .c 文件可以编译。您还必须列出链接器查找您正在构建的 libffmpegkit.so 的外部引用所需的库:

defaultConfig {
    ....

    ndk {
        moduleName "ffmpegkit"
        abiFilter "armeabi"
        cFlags "-I/qqq/ffmpeg"
        ldLibs "-llog -L src/main/libs", "avformat", "avcodec", "avutil" 
    }
}

确保 ffmpeg 库是使用兼容的 Android 工具链编译的!请注意,列出 ffmpeg 库的顺序很重要。比如,libavformat 依赖于 libavcodec,因此它应该在前面。