Android Studio ERROR: Executing external native build for ndkBuild when trying to run Gstreamer tutorial
Android Studio ERROR: Executing external native build for ndkBuild when trying to run Gstreamer tutorial
我正在尝试 运行 Android Sudio 3.5 中的 gstreamer android tutorial-5(https://gitlab.freedesktop.org/gstreamer/gst-docs/tree/master/examples/tutorials/android)(https://gitlab.com/eduardoprado/gstreamer-tutorial5) 但出现以下错误:
ERROR: Cause: executing external native build for ndkBuild C:\Users\Downloads\gst_docs_master_examples_tutorials_android\examples\tutorials\android\android-tutorial-1\jni\Android.mk.
我一直在关注 gstreamer 网站上的 gstreamer android 教程以及 Whosebug 线程 。
第一个目标是在 android studio 上安装 gstreamer 运行ning。
有些线程错误与路径目录中的白色space有关,但我已经检查过,所有文件夹都没有白色space。以下是我一直在使用和改编以制作教程的一些文件 运行。
我还将 windows 环境变量 GSTREAMER_ROOT_ANDROID 设置为解压的 gstreamer 二进制文件,并将其设置在 android.mk 文件中。
local.properties 文件
## This file must *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
#
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
#Mon Sep 09 08:16:12 EDT 2019
sdk.dir=C\:\Users\AppData\Local\Android\Sdk
ndk.dir=C\:\Users\AppData\Local\Android\Sdk\ndk\20.0.5594570
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := tutorial-5
LOCAL_SRC_FILES := tutorial-5.c
LOCAL_SHARED_LIBRARIES := gstreamer_android
LOCAL_LDLIBS := -llog -landroid
include $(BUILD_SHARED_LIBRARY)
GSTREAMER_ROOT_ANDROID := C\:\gstreamer_android_binaries
ifndef GSTREAMER_ROOT_ANDROID
$(error GSTREAMER_ROOT_ANDROID is not defined!)
endif
ifeq ($(TARGET_ARCH_ABI),armeabi)
GSTREAMER_ROOT := $(GSTREAMER_ROOT_ANDROID)/arm
else 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_PLAYBACK) $(GSTREAMER_PLUGINS_CODECS) $(GSTREAMER_PLUGINS_NET) $(GSTREAMER_PLUGINS_SYS)
G_IO_MODULES := gnutls
GSTREAMER_EXTRA_DEPS := gstreamer-video-1.0
include $(GSTREAMER_NDK_BUILD_PATH)/gstreamer-1.0.mk
build.gradle(应用程序)
apply plugin: 'com.android.application'
android {
compileSdkVersion 29
buildToolsVersion "26.0.3"
defaultConfig {
applicationId "com.gst_sdk_tutorials.tutorial_5"
minSdkVersion 14
targetSdkVersion 29
externalNativeBuild {
ndkBuild {
arguments "V=1"
}
}
ndk {
moduleName "tutorial-5"
abiFilters 'x86', 'armeabi-v7a', 'arm64-v8a'
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
externalNativeBuild {
ndkBuild {
path 'src/main/jni/Android.mk'
}
}
}
build.gradle(项目)
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
}
}
allprojects {
repositories {
jcenter()
}
}
gradle-wrapper.properties
#Mon Sep 09 14:10:17 EDT 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
更新
将参数 "V=1" 添加到 ndkBuild 部分并收到相同的错误:
ERROR: Cause: executing external native build for ndkBuild C:\Users\Downloads\gstreamer-tutorial5-master\app\src\main\jni\Android.mk
您使用的路径对于 Windows 命令行来说太长了。为了更好地理解发生了什么,将 "V=1"
添加到 ndkBuild 的参数列表中,您将看到所有构建命令在您的构建控制台中执行。
arguments
配置属于 android.defaultConfig.externalNativeBuild.ndkBuild
部分,而不是 android.externalNativeBuild.ndkBuild
。请参阅文档:https://developer.android.com/ndk/guides/cmake#variables
- 下载整个gstreamer android工作室教程目录(https://gitlab.freedesktop.org/gstreamer/gst-docs/)
2) 打开 Android Studio -> 打开现有的 Android Studio 项目
- 将整个android教程目录
examples/tutorials/android
作为项目打开
4) 打开项目后,将屏幕左侧的视图更改为 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 二进制文件并解压缩它们的文件路径。 Gstreamer 可以从这里下载 Android (https://gstreamer.freedesktop.org/data/pkg/android/)
- 现在我们需要设置NDK目录。确保在 SDK 工具下下载并启用 NDK。
9)这将下载最新的 NDK 版本。但是,gstreamer 目前不会使用最新的 NDK 进行构建。我们需要下载 NDK Revision 18b (https://developer.android.com/ndk/downloads/older_releases)
如果您不使用 NDK 版本 18,您可能会收到错误 Android NDK: Assertion failure: SYSROOT_LINK is not defined . Stop. Open File
解压下载的NDK 18b目录
将解压后的android-ndk-r18b
目录移动到AppData\Local\Android\Sdk\ndk
下的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
连接 phone USB 调试和 运行!
如果您在 phone 上收到错误消息,指出它适用于旧版本的 android。返回 Android Studio 并切换到屏幕左侧的 Android View
。 Gradle Scripts
select 下的 build.gradle
为相应的教程。更改 compileSdkVersion 29
、minSDKVersion 15
和 targetSDKVersion 29
。
请从 build.gradle
(app):
发表评论
externalNativeBuild {
ndkBuild {
path 'src/main/jni/Android.mk'
}
}
只需将您的项目移动到 没有空格的路径
示例/Users/myuser/Documents/android-project-folder
它帮助了我
只需复制Android.mk的路径,然后像
一样放置
externalNativeBuild {
ndkBuild {
path 'sdk/ndk/22.0.7026061/sources/third_party/shaderc/third_party/Android.mk'
}
}
ndkVersion '22.0.7026061'
}
我正在尝试 运行 Android Sudio 3.5 中的 gstreamer android tutorial-5(https://gitlab.freedesktop.org/gstreamer/gst-docs/tree/master/examples/tutorials/android)(https://gitlab.com/eduardoprado/gstreamer-tutorial5) 但出现以下错误:
ERROR: Cause: executing external native build for ndkBuild C:\Users\Downloads\gst_docs_master_examples_tutorials_android\examples\tutorials\android\android-tutorial-1\jni\Android.mk.
我一直在关注 gstreamer 网站上的 gstreamer android 教程以及 Whosebug 线程
第一个目标是在 android studio 上安装 gstreamer 运行ning。
有些线程错误与路径目录中的白色space有关,但我已经检查过,所有文件夹都没有白色space。以下是我一直在使用和改编以制作教程的一些文件 运行。
我还将 windows 环境变量 GSTREAMER_ROOT_ANDROID 设置为解压的 gstreamer 二进制文件,并将其设置在 android.mk 文件中。
local.properties 文件
## This file must *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
#
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
#Mon Sep 09 08:16:12 EDT 2019
sdk.dir=C\:\Users\AppData\Local\Android\Sdk
ndk.dir=C\:\Users\AppData\Local\Android\Sdk\ndk\20.0.5594570
Android.mk
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := tutorial-5
LOCAL_SRC_FILES := tutorial-5.c
LOCAL_SHARED_LIBRARIES := gstreamer_android
LOCAL_LDLIBS := -llog -landroid
include $(BUILD_SHARED_LIBRARY)
GSTREAMER_ROOT_ANDROID := C\:\gstreamer_android_binaries
ifndef GSTREAMER_ROOT_ANDROID
$(error GSTREAMER_ROOT_ANDROID is not defined!)
endif
ifeq ($(TARGET_ARCH_ABI),armeabi)
GSTREAMER_ROOT := $(GSTREAMER_ROOT_ANDROID)/arm
else 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_PLAYBACK) $(GSTREAMER_PLUGINS_CODECS) $(GSTREAMER_PLUGINS_NET) $(GSTREAMER_PLUGINS_SYS)
G_IO_MODULES := gnutls
GSTREAMER_EXTRA_DEPS := gstreamer-video-1.0
include $(GSTREAMER_NDK_BUILD_PATH)/gstreamer-1.0.mk
build.gradle(应用程序)
apply plugin: 'com.android.application'
android {
compileSdkVersion 29
buildToolsVersion "26.0.3"
defaultConfig {
applicationId "com.gst_sdk_tutorials.tutorial_5"
minSdkVersion 14
targetSdkVersion 29
externalNativeBuild {
ndkBuild {
arguments "V=1"
}
}
ndk {
moduleName "tutorial-5"
abiFilters 'x86', 'armeabi-v7a', 'arm64-v8a'
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
}
}
externalNativeBuild {
ndkBuild {
path 'src/main/jni/Android.mk'
}
}
}
build.gradle(项目)
// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
repositories {
jcenter()
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
}
}
allprojects {
repositories {
jcenter()
}
}
gradle-wrapper.properties
#Mon Sep 09 14:10:17 EDT 2019
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
更新 将参数 "V=1" 添加到 ndkBuild 部分并收到相同的错误:
ERROR: Cause: executing external native build for ndkBuild C:\Users\Downloads\gstreamer-tutorial5-master\app\src\main\jni\Android.mk
您使用的路径对于 Windows 命令行来说太长了。为了更好地理解发生了什么,将 "V=1"
添加到 ndkBuild 的参数列表中,您将看到所有构建命令在您的构建控制台中执行。
arguments
配置属于 android.defaultConfig.externalNativeBuild.ndkBuild
部分,而不是 android.externalNativeBuild.ndkBuild
。请参阅文档:https://developer.android.com/ndk/guides/cmake#variables
- 下载整个gstreamer android工作室教程目录(https://gitlab.freedesktop.org/gstreamer/gst-docs/)
2) 打开 Android Studio -> 打开现有的 Android Studio 项目
- 将整个android教程目录
examples/tutorials/android
作为项目打开
4) 打开项目后,将屏幕左侧的视图更改为 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 二进制文件并解压缩它们的文件路径。 Gstreamer 可以从这里下载 Android (https://gstreamer.freedesktop.org/data/pkg/android/)
- 现在我们需要设置NDK目录。确保在 SDK 工具下下载并启用 NDK。
9)这将下载最新的 NDK 版本。但是,gstreamer 目前不会使用最新的 NDK 进行构建。我们需要下载 NDK Revision 18b (https://developer.android.com/ndk/downloads/older_releases)
如果您不使用 NDK 版本 18,您可能会收到错误 Android NDK: Assertion failure: SYSROOT_LINK is not defined . Stop. Open File
解压下载的NDK 18b目录
将解压后的
下的ndk文件夹android-ndk-r18b
目录移动到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
连接 phone USB 调试和 运行!
如果您在 phone 上收到错误消息,指出它适用于旧版本的 android。返回 Android Studio 并切换到屏幕左侧的
Android View
。Gradle Scripts
select 下的build.gradle
为相应的教程。更改compileSdkVersion 29
、minSDKVersion 15
和targetSDKVersion 29
。
请从 build.gradle
(app):
externalNativeBuild {
ndkBuild {
path 'src/main/jni/Android.mk'
}
}
只需将您的项目移动到 没有空格的路径
示例/Users/myuser/Documents/android-project-folder
它帮助了我
只需复制Android.mk的路径,然后像
一样放置externalNativeBuild {
ndkBuild {
path 'sdk/ndk/22.0.7026061/sources/third_party/shaderc/third_party/Android.mk'
}
}
ndkVersion '22.0.7026061'
}