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

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

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

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

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

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

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

环境配置是下一个:

  • Android Studio 1.5

  • Gradle 2.8

  • Android 插件版本 1.3.0

  • JDK 1.8.0

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

渐变文件

android {
compileSdkVersion 23
buildToolsVersion "23.0.1"

defaultConfig {
    ....

    ndk {
        moduleName "ffmpegkit"
    }
}

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

}

项目结构

CAPTURE

在 .C 文件中包含语句

enter image description here

如您所见,“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,因此它应该放在前面。

关于android - 如何在 Android Studio 1.5 中包含 .so 库和 .c 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33610061/

相关文章:

java - Spring Boot/Gradle/Logback : bootRun fails with "Failed to instantiate [ch.qos.logback.classic.LoggerContext]": java. lang.AbstractMethodError:

android - CollapsingToolbar 不适用于不太高的内容

android - 新电子邮件到达时未通知实现 MessageCountListener 的服务

android - 如何安装存储库 com.android.support :appcompat-v7

android - 在 Android Studio 中显示 Cordova "console.log"条目

android - 为什么 Android Studio 在编辑 xml 文件或更改设计时会变慢?

android - 错误:In <declare-styleable> FontFamilyFont, 找不到属性android :font after Glide 4. 4 升级

jenkins - Jenkins Pipeline Artifactory插件错误:无法读取生成的生成信息

android - 从 Fragment 调用 Activity 然后返回到 Fragment

java - 安卓|向服务器发送 “POST” JSON 数据