尝试在Windows上运行GStreamer Android教程时遇到许多问题。我是Android NDK的新手,所以这可能是一个非常简单的问题,但我不知道如何解决。
这些是我尝试构建项目时的构建错误消息
构建命令失败。
执行过程时出错 D:\ gstreamer \ android-ndk-r19b-windows-x86_64 \ android-ndk-r19b \ ndk-build.cmd 带有参数{NDK_PROJECT_PATH = null APP_BUILD_SCRIPT = C:\ xxx \ xxx \ gst-docs-master \ examples \ tutorials \ android \ android-tutorial-1 \ jni \ Android.mk NDK_APPLICATION_MK = C:\ xxx \ xxx \ gst-docs-master \ examples \ tutorials \ android \ android-tutorial-1 \ jni \ Application.mk APP_ABI = armeabi-v7a NDK_ALL_ABIS = armeabi-v7a NDK_DEBUG = 0 APP_PLATFORM = android-16 NDK_OUT = C:/ xxx / xxx / gst-docs-master / examples / tutorials / android / android-tutorial-1 / build / intermediates / ndkBuild / release / obj NDK_LIBS_OUT = C:\ xxx \ xxx \ gst-docs-master \ examples \ tutorials \ android \ android-tutorial-1 \ build \ intermediates \ ndkBuild \ release \ lib NDK_APPLICATION_MK = jni / Application.mk GSTREAMER_JAVA_SRC_DIR = src GSTREAMER_ROOT_ANDROID = D:/gstreamer/gstreamer-1.0-android-universal-1.15.1 GSTREAMER_ASSETS_DIR = src /资产APP_SHORT_COMMANDS = false LOCAL_SHORT_COMMANDS = false -B -n}
process_begin:CreateProcess(NULL,“”,...)失败。
*** Android NDK:断言失败:SYSROOT_LINK未定义。停止。打开文件
当我单击“打开文件”时,它已将我发送到gstreamer-1.0.mk文件和下面的行。
ifdef SYSROOT SYSROOT_GST_INC:= $(SYSROOT) SYSROOT_GST_LINK:= $(SYSROOT)
其他 ifdef SYSROOT_INC $(调用断言定义,SYSROOT_LINK) ifdef SYSROOT_LINK SYSROOT_GST_INC:= $(SYSROOT_INC) SYSROOT_GST_LINK:= $(SYSROOT_LINK) 万一 其他 SYSROOT_GST_INC:= $(NDK_PLATFORMS_ROOT)/ $(TARGET_PLATFORM)/ arch-$(TARGET_ARCH) SYSROOT_GST_LINK:= $(SYSROOT_GST_INC) endif endif
我认为问题与错误消息中提到的SYS_ROOT有关,但我不知道“ SYS_ROOT”或“ NDK_PROJECT_PATH”是什么意思。
我已经将gstAndroidRoot添加到gradle.properties中,因此在构建时不会有问题。
答案 0 :(得分:0)
我遇到了同样的问题,原因是 D:/gstreamer/gstreamer-1.0-android-universal-1.15.1/ {正在使用的Arch} / share / gst-android / ndk-build / gstreamer-1.0.mk 正在调用在第168行中未定义的 SYSROOT_LINK ,因此我在该行中添加了注释。
ifdef SYSROOT
SYSROOT_GST_INC := $(SYSROOT)
SYSROOT_GST_LINK := $(SYSROOT)
else
ifdef SYSROOT_INC
# $(call assert-defined, SYSROOT_LINK) <-- COMMENT THIS!
ifdef SYSROOT_LINK
SYSROOT_GST_INC := $(SYSROOT_INC)
SYSROOT_GST_LINK := $(SYSROOT_LINK)
endif
else
SYSROOT_GST_INC := $(NDK_PLATFORMS_ROOT)/$(TARGET_PLATFORM)/arch-$(TARGET_ARCH)
SYSROOT_GST_LINK := $(SYSROOT_GST_INC)
endif
endif
$(call assert-defined, SYSROOT_LINK)
可能出于某种原因在那儿,所以也许这不是一个合适的解决方案,但它可以工作。
答案 1 :(得分:0)
对于Windows 10,是Android Studio 3.5。这对我有用。
从here下载整个gstreamer android studio教程目录。
打开Android Studio->打开现有的Android Studio项目
打开整个Android教程目录examples/tutorials/android
作为项目
打开项目后,将屏幕左侧的视图更改为Project
右键单击local.properties
附近。右键单击->文件->新建->文件
创建一个名为gradle.properties
在新的gradle.properties
文件中复制并粘贴以下代码。
# gstAndroidRoot can be set to point to the unpacked GStreamer android top-level directory
# containing each architecture in subdirectories, or else set the GSTREAMER_ROOT_ANDROID
# environment variable to that location
gstAndroidRoot=/gstreamer_android_binaries
注意:将gstAndroidRoot
变量更改为下载gstreamer二进制文件并解压缩它们的文件路径。可以从here下载Android版Gstreamer。
现在我们需要设置NDK目录。确保下载并在SDK工具下启用了NDK。
这将下载最新的NDK版本。但是,gstreamer当前无法使用最新的NDK构建。我们需要从here下载NDK修订版18b。如果您不使用NDK版本18,则可能会收到错误Android NDK: Assertion failure: SYSROOT_LINK is not defined . Stop. Open File
解压缩下载的NDK 18b目录。
采用解压缩的android-ndk-r18b
目录并将其移动到ndk文件夹在AppData\Local\Android\Sdk\ndk
下的位置
您现在应该在Android\Sdk\ndk
中有两个文件夹。 20.0.5594570 (or latest version)
和android-ndk-r18b
在android studio中,转到“文件”->“项目结构”
在Android NDK位置下,指向NDK 18目录。示例:C:\Users\AppData\Local\Android\Sdk\ndk\android-ndk-r18b
通过USB调试连接手机并运行!
如果您在手机上收到错误消息,指出它是针对较旧版本的android的。返回Android Studio,然后切换到屏幕左侧的Android View
。在Gradle Scripts
下,为相应的教程选择build.gradle
。更改compileSdkVersion 29
,minSDKVersion 15
和targetSDKVersion 29
。