Android Studio NDK gradle:找不到共享库

Android Studio NDK gradle:找不到共享库,android,android-ndk,Android,Android Ndk,我正在Android Studio中使用NDK开发ffmpeg JNI。我在androidstudio之外用NDK构建了ffmpeg,并将库放在src/main/jni/libs/armeabi-v7a。 接下来,我生成了JNI头文件,并通过调用avformat API来实现它。但是,链接器找不到libavformat.so,最后显示如下消息 “/Users/xxx/Library/Android/sdk/ndk bundle/toolschains/arm-linux-androideabi-

我正在Android Studio中使用NDK开发ffmpeg JNI。我在androidstudio之外用NDK构建了ffmpeg,并将库放在src/main/jni/libs/armeabi-v7a。 接下来,我生成了JNI头文件,并通过调用avformat API来实现它。但是,链接器找不到libavformat.so,最后显示如下消息

“/Users/xxx/Library/Android/sdk/ndk bundle/toolschains/arm-linux-androideabi-4.9/prebuild/darwin-x86_64/arm-linux-androideabi/bin/ld 错误:错误:找不到-lavformat“

这是我做的发型,格拉德尔。我在ldLibs中添加了“avformat”,但gradle似乎不知道lib路径。我没有找到哪个gradle选项可以指定这一点。我使用的是gradle发行版3.3,而旧的gradle版本2.10也有同样的问题。 对此,我非常感谢您的评论

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion '25.0.2'

    defaultConfig {
        applicationId "xxx.example.com.ffmpegtestapp"
        minSdkVersion 24
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

        ndk {
            moduleName "jnilib"
            ldLibs "log", "avformat"
            cFlags "-I${project.buildDir}/../src/main/jni/include"
            abiFilters "armeabi-v7a"
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    sourceSets.main {
        jni.srcDirs = ['src/main/jni']
        jniLibs.srcDirs = ['src/main/jni/libs']
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.3.1'
    testCompile 'junit:junit:4.12'
}

我只是开始自己工作,在这里分享。我需要创建CMakeLists.txt,让cmake为我构建和链接本机库,并指定外部共享库路径

gradle是这样的,添加了externalNativeBuild

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion '25.0.2'

    defaultConfig {
        applicationId "xxx.example.com.ffmpegtestapp"
        minSdkVersion 24
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

        ndk {
            moduleName "jnilib"
            ldLibs "log", "avformat"
            cFlags "-std=c++11 -I${project.buildDir}/../src/main/jni/include"
            abiFilters "armeabi-v7a"
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    sourceSets.main {
        jni.srcDirs = ['src/main/jni']
        jniLibs.srcDirs = ['src/main/jni/libs']
    }
    externalNativeBuild {
        cmake {
            path 'src/main/jni/src/CMakeLists.txt'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    compile 'com.android.support:appcompat-v7:25.3.1'
    testCompile 'junit:junit:4.12'
}

此外,在链接LIbAVFATATA时发现了“未定义的定义”错误,因此我终于意识到我使用的是“NATEVELIB .CPP”,它是一个试图链接C代码的C++代码。

error: undefined reference to 'avformat_version()'
通过将native_lib.cpp重命名为native_lib.c,或者为这样的头文件添加外部“c”,可以解决这个问题

extern "C" {
#include <libavformat/avformat.h>
}
extern“C”{
#包括
}
extern "C" {
#include <libavformat/avformat.h>
}