无法为Android教程构建GStreamer

luc*_*web 7 android gstreamer android-ndk

我遇到了许多试图构建GStreamer Android教程的问题.

我的环境是:

  • Mac OS X 7
  • Android SDK版本17
  • Android NDK 8d

我能够在Eclipse和命令行中构建和运行NDK示例.

我已经下载了http://cdn.gstreamer.com/android/arm/gstreamer-sdk-android-arm-debug-2012.11.tar.bz2并将GSTREAMER_SDK_ROOT_ANDROID环境变量添加到我的.bash_profile中.

当我尝试通过Eclipse构建android-tutorial-1时,我收到以下错误:

12:12:05 **** Incremental Build of configuration Default for project Tutorial1 ****
/apps/tools/android-ndk-r8d/ndk-build all 
jni/Android.mk:13: *** GSTREAMER_SDK_ROOT_ANDROID is not defined!.  Stop.

12:12:05 Build Finished (took 104ms)
Run Code Online (Sandbox Code Playgroud)

我已经尝试将GSTREAMER_SDK_ROOT_ANDROID添加到Eclispe中的C++构建变量,但它没有任何区别.

当我尝试通过命令行构建时,我收到以下错误:

/bin/sh: pkg-config: command not found
/bin/sh: pkg-config: command not found
/bin/sh: pkg-config: command not found
GStreamer      : [GEN] => gst-build/gstreamer_android.c
GStreamer      : [COMPILE] => gst-build/gstreamer_android.c
gst-build/gstreamer_android.c:2:21: fatal error: gst/gst.h: No such file or directory
compilation terminated.
make: *** [gst-build/gstreamer_android.o] Error 1
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚是gst/gst.h无法解决?

CAM*_*BAP 9

在这里你遇到了两个问题

1.未定义GSTREAMER_SDK_ROOT_ANDROID

可以通过设置GSTREAMER_SDK_ROOT_ANDROID环境变量(在eclipse或Android.mk文件中)轻松解决,在我的情况下,我已经指定了这个变量

GSTREAMER_VERSION   := 1.4.1
GSTREAMER_SDK_ROOT  := /Volumes/Data/Developers/Library/gstreamer-1.0-sdk-android/$(TARGET_ARCH_ABI)-$(APP_OPTIM)-$(GSTREAMER_VERSION)
Run Code Online (Sandbox Code Playgroud)
  1. TARGET_ARCH_ABI- 预定义变量(在我的情况下armeabi-v7a)
  2. APP_OPTIM- 预定义变量releasedebug

在你的情况下GSTREAMER_SDK_ROOT,当然会有所不同,但如果你需要支持多个拱门,使用预定义的变量可以提供很多帮助

pkg-confing不在PATH

正如您在默认情况下看到的那样,使用shshell

/bin/sh: pkg-config: command not found
/bin/sh: pkg-config: command not found
/bin/sh: pkg-config: command not found
Run Code Online (Sandbox Code Playgroud)

pkg-config最初找不到PATH=/usr/bin:/bin:/usr/sbin:/sbin.如果您在安装pkg-configbrewOSX上它被放置到/usr/local/bin

bash-3.2$ which pkg-config
/usr/local/bin/pkg-config
Run Code Online (Sandbox Code Playgroud)

要修复,PATH您可以指定自己的shell

SHELL := PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin /bin/bash
Run Code Online (Sandbox Code Playgroud)

这不是完美的解决方案,但它有效

Gradle用户的更新

由于2.2.0-alpha3gradle android插件支持这样的外部构建系统(在build.gradle内部android定义中添加它)

android { 
    ...
    externalNativeBuild {
        ndkBuild {
            path "${projectDir.absolutePath}/src/main/jni/Android.mk"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

不要忘记清理,jni.srcDirs因为坏插件将首先启动,jni.srcDirs在运行时添加清理

android { 
    ...
    task disableDefaultNdkBuild << {
        android.sourceSets.main.jni.srcDirs = []
        android.sourceSets.main.jniLibs.srcDir 'src/main/libs'
    }

    preBuild.dependsOn disableDefaultNdkBuild
}
Run Code Online (Sandbox Code Playgroud)

现已提供官方指南https://gstreamer.freedesktop.org/documentation/tutorials/android/link-against-gstreamer.html


luc*_*web 5

我在GStreamer Android邮件列表上发布了上述问题,得到了以下回复:

嗨,不幸的是我们忘记pkg-config在此版本中包含Mac OS X.您可以从这里下载:http: //macpkg.sourceforge.net/

我使用自制软件安装pkg-config,并能够通过命令行使用构建所有Android教程ndk-build.

我在Eclipse中仍有许多问题:

  1. * GSTREAMER_SDK_ROOT_ANDROID没有定义! - 我无法让Eclipse接收这个变量
  2. 如果我将变量硬编码到make文件中,那么我得到/bin/sh: pkg-config: command not found- pkg-config已安装并通过CLI工作

我相信一些问题与Android 问题33788有关,我试图使用CDT 8.0.2而不是CDT 8.10解决它们,但它没有解决上述任何一个问题.

我现在通过以下方式解决了这个问题:

  1. 为我的项目禁用CDT建设
  2. 使用CLI ndk-build构建NDK代码
  3. 正常情况下通过Eclipse构建和部署应用程序到我的设备