我遇到了许多试图构建GStreamer Android教程的问题。
我的环境是:
我能够在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无法解决?
答案 0 :(得分:9)
在这里你遇到了两个问题
可以通过设置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
- 预定义变量release
或debug
在您的情况下,GSTREAMER_SDK_ROOT
当然会有所不同,但如果您需要支持多个拱门,使用预定义的变量可以提供很多帮助
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上按pkg-config
安装brew
,则会将其放置到/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
这不是完美的解决方案,但它有效
由于2.2.0-alpha3
gradle android插件支持这样的外部构建系统(在build.gradle
内android
定义中添加)
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
答案 1 :(得分:5)
我在GStreamer Android邮件列表上发布了上述问题,得到了以下回复:
您好, 很抱歉,我们忘记在此版本中为Mac OS X添加
pkg-config
。 你可以在这里下载: http://macpkg.sourceforge.net/
我使用自制软件来安装pkg-config
,并且可以使用ndk-build
通过命令行构建所有Android教程。
我在Eclipse中仍有许多问题:
GSTREAMER_SDK_ROOT_ANDROID
未定义! - 我无法让Eclipse接收这个变量/bin/sh: pkg-config: command not found
- pkg-config已经安装并通过CLI工作我认为其中一些问题与Android Issue 33788有关,我尝试使用CDT 8.0.2而不是CDT 8.10来解决它们,但它没有解决上述任何一个问题。
我现在通过以下方式解决了这个问题:
答案 2 :(得分:4)
表示错误1: jni / Android.mk:13: * GSTREAMER_SDK_ROOT_ANDROID未定义!停止。
您可以在Android.mk文件中定义GSTREAMER_SDK_ROOT_ANDROID:= XXXXX(您的Gstreamer_Android_SDK路径)!
表示错误2: 致命错误:gst / gst.h:没有这样的文件或目录
你可以在C / C ++ General中包含(Gstreamer_Android_SDK Path)/include/gstreamer0.10/ - &gt;路径和符号 - &gt;包括!
希望这会有所帮助:)
答案 3 :(得分:0)
我在Eclipse中使用ADT,也许您可以通过以下步骤将GSTREAMER_SDK_ROOT_ANDROID定义为项目环境变量:
Project -> Properties -> C/C++ Build -> Environment -> Add
而不是在.mk文件中定义它。
答案 4 :(得分:0)
我遇到了同样的问题,但在互联网上一无所获。但不知何故,对这个问题的详细研究使我解决了这个问题。
要解决此问题,您需要在eclipse中执行以下步骤:
Windows->preferences->c/c++->build->Environment
Add
按钮GSTREAMER_SDK_ROOT_ANDROID
”Value
字段中输入GStreamer SDK的位置。就我而言,它是“C:\GStreamer_SDK
”。这里是问题....你需要使用正斜杠“/
”而不是向后“\
”才能使其正常工作。所以我的Gstreamer SDK位置看起来像这个“C:/GStreamer_SDK
”完成后。您需要在项目的Android.mk
文件中进行一些更改。
转到以下行
GSTREAMER_NDK_BUILD_PATH := $(GSTREAMER_SDK_ROOT)/share/gst-android/ndk-build/
并从代码行中删除结束正斜杠。所以它会像这样。
GSTREAMER_NDK_BUILD_PATH := $(GSTREAMER_SDK_ROOT)/share/gst-android/ndk-build
保存它,你就完成了它!
如果你没有删除斜杠,它将在构建过程中生成路径
c:/GStreamer_SDK/share/gst-android/ndk-build//gstreamer.mk
构建过程中出现双斜线问题。
现在右键点击project->clean
Project
现在通过右键单击project->build
项目来构建它。
如果eclipse在构建时挂起,只需转到任务管理器并两次终止make.exe
服务。
在您的设备或模拟器上运行您的项目。 玩得开心!
答案 5 :(得分:0)
@CAMOBAP感谢您的帖子。这对我很有帮助。我可以在eclipse中构建Android示例。主要问题是:
SHELL := PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin /bin/bash
Fo GSTREAMER_SDK_ROOT_ANDROID
下一步:您不必从MAC中的代码行中删除结束正斜杠,并且您不必在Eclipse中添加包含。首次构建后,这些依赖项将自动解决。 确保您的Android SDK和NDK在Eclipse中运行良好。我还将SDK和NDK路径添加到:
nano .bash_profile
这是在MAC上运行的。我还将Manifest文件更改为:
android:minSdkVersion="xx"
android:targetSdkVersion="xx" />
对于Android Gstreamer的教程5,您需要添加SD卡权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />