我的环境是:
> 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)
我已经尝试将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
我无法弄清楚是gst / gst.h无法解决?
解决方法
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)
> TARGET_ARCH_ABI – 预定义变量(在我的例子中是armeabi-v7a)
> APP_OPTIM – 预定义的变量发布或调试
在您的情况下,GSTREAMER_SDK_ROOT当然会有所不同,但如果您需要支持多个拱门,使用预定义的变量可以提供很多帮助
2.你的pkg-confing不在PATH中
正如您在默认情况下看到的那样,使用sh shell
/bin/sh: pkg-config: command not found /bin/sh: pkg-config: command not found /bin/sh: pkg-config: command not found
它找不到pkg-config,因为最初PATH = /usr/bin:/ bin:/usr/sbin:/ sbin.如果您在OSX上通过brew安装pkg-config,它已被放置到/usr/local / bin
bash-3.2$which pkg-config /usr/local/bin/pkg-config
要修复PATH,您可以指定自己的shell
SHELL := PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin /bin/bash
这不是完美的解决方案,但它有效
Gradle用户的更新
由于2.2.0-alpha3 gradle android插件支持这样的外部构建系统(在android定义中的build.gradle中添加)
android { ... externalNativeBuild { ndkBuild { path "${projectDir.absolutePath}/src/main/jni/Android.mk" } } }
不要忘记清理jni.srcDirs,因为坏的插件会先启动,在运行时清理jni.srcDirs
android { ... task disableDefaultNdkBuild << { android.sourceSets.main.jni.srcDirs = [] android.sourceSets.main.jniLibs.srcDir 'src/main/libs' } preBuild.dependsOn disableDefaultNdkBuild }
官方指南现已发布https://gstreamer.freedesktop.org/documentation/tutorials/android/link-against-gstreamer.html