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

时间:2015-11-09 13:21:18

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

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

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

这些网站有thisthisthisthis等等......

我到达时调用了原生的.c文件,但我不能包含.so库,因为Android工作室找不到它。

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

环境配置是下一个:

  • Android Studio 1.5

  • Gradle 2.8

  • Android插件版本1.3.0

  • JDK 1.8.0

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

GRADLE FILE

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文件一起使用?

非常感谢!

1 个答案:

答案 0 :(得分: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 ,因此它应该在之前使用。