【发布时间】:2016-08-02 16:48:31
【问题描述】:
我在 ndk 的源文件夹中提取了 ffmpeg,然后在那里编译它只是因为我遵循了这个:http://www.roman10.net/2013/08/18/how-to-build-ffmpeg-with-ndk-r9/ 并成功生成了带有 arm/lib 和 的 android 文件夹>arm/include 文件。
之后,我在 $NDK/sources/ffmpeg/android/arm 中创建了一个 Android.mk 文件,在我的 android 项目(src/main) 中创建了一个 Android.mk /jni 文件夹)。
我的src/main/jni/Android.mk是这样的:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := tutorial01
LOCAL_SRC_FILES := tutorial01.c
LOCAL_LDLIBS := -llog -ljnigraphics -lz
LOCAL_SHARED_LIBRARIES := libavcodec
include $(BUILD_SHARED_LIBRARY)
$(call import-module,ffmpeg-3.0.1/android/arm)
而 $NDK/sources/ffmpeg/android/arm/Android.mk 是:
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE:= libavcodec
LOCAL_SRC_FILES:= lib/libavcodec-57.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)
我像这样更新了 build.gradle 并成功生成了带有 .so 文件的 jniLibs,但是在构建项目时我得到 libavcodec/avcodec.h: No such file or directory。
import org.apache.tools.ant.taskdefs.condition.Os
apply plugin: 'com.android.model.application'
model {
android {
compileSdkVersion = 23
buildToolsVersion = "23.0.2"
defaultConfig.with {
applicationId = "com.example.spartan.hello"
minSdkVersion.apiLevel = 18
targetSdkVersion.apiLevel = 23
versionCode = 1
versionName = "1.0"
}
}
android.buildTypes {
release {
minifyEnabled = false
proguardFiles.add(file('proguard-android.txt'))
}
}
android.sources {
main {
jni {
source {
srcDirs = []
}
}
}
main {
jniLibs {
source {
srcDirs = ['src/main/libs']
}
}
}
}
android.ndk {
moduleName = "tutorial01"
stl = 'gnustl_shared'
}
}
task ndkBuild(type: Exec) {
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
commandLine 'ndk-build.cmd', '-C', file('src/main').absolutePath
} else {
commandLine 'ndk-build', '-C', file('src/main').absolutePath
}
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn ndkBuild
}
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.2.1'
}
并像这样将它们加载到我的活动中:
static {
System.loadLibrary("tutorial01");
System.loadLibrary("avcodec-57");
}
我是NDK的新手,如果我们手动将头文件粘贴到jni文件夹中可以吗?
【问题讨论】:
标签: android android-studio ffmpeg android-ndk java-native-interface