【问题标题】:How to include a .so library and .c files in Android Studio 1.5如何在 Android Studio 1.5 中包含 .so 库和 .c 文件
【发布时间】:2016-02-10 03:41:59
【问题描述】:

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

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

这些网站是this、this、this、this 等等...

我来是为了调用原生 .c 文件,但我无法包含 .so 库,因为 Android Studio 找不到它。

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

环境配置是下一个:

  • Android Studio 1.5

  • Gradle 2.8

  • Android 插件版本 1.3.0

  • JDK 1.8.0

这是我的代码和 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 文件一起使用吗?

非常感谢!

【问题讨论】:

    标签: android android-studio gradle android-ndk shared-libraries


    【解决方案1】:

    我假设您的 .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" 
        }
    }
    

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

    【讨论】:

    • 感谢您的回复,但它不起作用。我已将 de libavcodec 库路径更改为我的,但它仍然不起作用
    • 您是自己构建了 ffmpeg 库,还是从某个地方获得了预编译的二进制文件?
    • 我自己使用 NDK 工具链构建了它们
    • 您介意在chat 中继续讨论吗?
    猜你喜欢
    • 2016-08-19
    • 2023-03-17
    • 1970-01-01
    • 2016-09-04
    • 2016-08-02
    • 1970-01-01
    • 1970-01-01
    • 2016-02-29
    相关资源
    最近更新 更多