Android Studio NDK gradle:找不到共享库
我正在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也有同样的问题。 对此,我非常感谢您的评论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-
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>
}