问题描述
我在开发 Gstreamer Android 应用,但我想我的编译有问题。
我在 Android Studio 上使用 CMakeLists 文件开始了本机项目,但是很难从 Gstreamer 教程中翻译 .mk 文件,因此我决定修改我的项目以使用 Android.mk / Application.mk 而不是 CMakeLists.txt .
build.gradle
android {
...
defaultConfig {
...
ndkVersion="21.3.6528147"
externalNativeBuild {
ndkBuild {
def gstRoot
if (project.hasProperty('gstAndroidRoot'))
gstRoot = project.gstAndroidRoot
else
gstRoot = System.env.GSTREAMER_ROOT_ANDROID
if (gstRoot == null)
throw new GradleException('GSTREAMER_ROOT_ANDROID must be set,or "gstAndroidRoot" must be defined in your gradle.properties in the top level directory of the unpacked universal GStreamer Android binaries')
arguments "NDK_APPLICATION_MK=app/src/main/cpp/Application.mk","GSTREAMER_JAVA_SRC_DIR=src","GSTREAMER_ROOT_ANDROID=$gstRoot","GSTREAMER_ASSETS_DIR=src/assets"
targets "tutorial_3"
// All archs except MIPS and MIPS64 are supported
abiFilters 'armeabi-v7a','arm64-v8a','x86','x86_64'
}
}
}
...
}
我不确定 NDK_APPLICATION_MK
路径和 targets
值。
Android.mk
我的 Android.mk 文件如下所示:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := tutorial_3
LOCAL_SRC_FILES := tutorial_3.c
LOCAL_LDLIBS := -llog -landroid
include $(BUILD_SHARED_LIBRARY)
ifndef GSTREAMER_ROOT_ANDROID
$(error GSTREAMER_ROOT_ANDROID is not defined!)
endif
ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
GSTREAMER_ROOT := $(GSTREAMER_ROOT_ANDROID)/armv7
else ifeq ($(TARGET_ARCH_ABI),arm64-v8a)
GSTREAMER_ROOT := $(GSTREAMER_ROOT_ANDROID)/arm64
else ifeq ($(TARGET_ARCH_ABI),x86)
GSTREAMER_ROOT := $(GSTREAMER_ROOT_ANDROID)/x86
else ifeq ($(TARGET_ARCH_ABI),x86_64)
GSTREAMER_ROOT := $(GSTREAMER_ROOT_ANDROID)/x86_64
else
$(error Target arch ABI not supported: $(TARGET_ARCH_ABI))
endif
GSTREAMER_NDK_BUILD_PATH := $(GSTREAMER_ROOT)/share/gst-android/ndk-build/
include $(GSTREAMER_NDK_BUILD_PATH)/plugins.mk
GSTREAMER_PLUGINS := $(GSTREAMER_PLUGINS_CORE) $(GSTREAMER_PLUGINS_SYS) $(GSTREAMER_PLUGINS_EFFECTS)
GSTREAMER_EXTRA_DEPS := gstreamer-video-1.0 gobject-2.0
GSTREAMER_EXTRA_LIBS := -liconv
include $(GSTREAMER_NDK_BUILD_PATH)/gstreamer-1.0.mk
我没有像教程那样的 jni 文件夹,而是在 src/main 文件夹中有一个 cpp 文件夹。
错误
我的错误是... Couldn't find "libtutorial_3.so"
。
libtutorial_3.so 是(或应该是)在编译过程中创建的编译库,但经过检查,它没有被创建。也许编译器在创建它之前试图访问它?或者我在 build.gradle 和我的 .mk 文件之间有问题。他们有联系吗?
我不确定我的 build.gradle 和我的 Android.mk。
如果有人知道如何修复它或我的文件有什么问题,我很感兴趣。如果我不清楚,请不要犹豫,问我,谢谢!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)