错误找不到带有 Android ndk 的 .so 文件

问题描述

我在开发 Gstreamer Android 应用,但我想我的编译有问题。

我在 Android Studio 上使用 CMakeLists 文件开始了本机项目,但是很难从 Gstreamer 教程中翻译 .mk 文件,因此我决定修改我的项目以使用 Android.mk / Application.mk 而不是 CMakeLists.txt .

build.gradle

所以我像这样修改我的 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

我只有一个 C 文件,它是 tutorial_3.c

我没有像教程那样的 jni 文件夹,而是在 src/main 文件夹中有一个 cpp 文件夹。

错误

我的错误... Couldn't find "libtutorial_3.so"

libtutorial_3.so 是(或应该是)在编译过程中创建的编译库,但经过检查,它没有被创建。也许编译器在创建它之前试图访问它?或者我在 build.gradle 和我的 .mk 文件之间有问题。他们有联系吗?

我不确定我的 build.gradle 和我的 Android.mk。

如果有人知道如何修复它或我的文件有什么问题,我很感兴趣。如果我不清楚,请不要犹豫,问我,谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...