2017-07-11 64 views
5

我一直在努力得到的Gstreamer在Android的工作室工作,跟随他们的教程,例如参见这里:的Gstreamer例子

https://gstreamer.freedesktop.org/documentation/tutorials/android/link-against-gstreamer.html

但在最新的Android工作室没有JNI /安卓.mk。我在哪里可以将代码放在该网页的末尾?

它应该放在CMakeLists.txt中吗?或者应该有不同的东西进去?

或者我只是做一个Android.mk文件,如果是这样,哪里(因为没有jni文件夹,只有一个cpp文件夹)?我该如何告诉Android Studio在哪里可以找到我的Android.mk文件?

谢谢!

+0

如果我的答案有帮助,请接受它。谢谢 –

回答

7

我已经从Gstreamer的网站上做了所有的教程,但它非常困难。为了帮助其他人记录它。这里的教程为linux(ubuntu),但也可能在windows上工作,如果您有任何问题,请问:)...我还将链接gitlab中的一个项目,准备在Android Studio中运行:
(tutorial 5) https://gitlab.com/eduardoprado/gstreamer-tutorial5.git
(教程2)https://gitlab.com/eduardoprado/gstreamer-tutorial2.git

使用该库在Android Studio中

最好的方式了解和GStreamer的融入项目执行教程在这个网站: 对不起,你有通过你自己找到链接,我没有声望发布直接链接
然而,这些教程是老作了在Eclipse中,为了与Android工作室的工作是必要的:

1.导入使用Android Studio的导入选项的教程;
2.将Android Studio设置为使用NDK;
3.在“Android.mk”文件中设置一个变量;
4.设置Gradle只编译一些体系结构;
5.将Gstreamer类复制到正确的路径。
6.从Android Studio中禁用“Instante Run”。 (编辑由2017年10月27日)
7.修复“链接金的说法”(编辑只取得了2017年11月28日Windows用户)

每条指令将在下面的章节中解释说:

1.导入使用Android Studio的导入选项

的Android Studio中的教程有一个选项,以从其他的IDE中导入项目。要将Gstreamer的Eclipse项目导入以下步骤:
1.从git下载所有教程:;
2.在Android Studio中,进入文件 - >新建导入项目;
3.在新的文件浏览器屏幕上,转到“gst-docs”,选择所需的项目(在我的案例教程5)“android-tutorial-5”并点击“确定”。

Selecting Project

2.将Android Studio中使用NDK

现在,该项目已经被导入,需要告知Android Studio中,该项目利用NDK框架。因此Gradle将能够导入并处理所有的依赖关系。 要做到这一点,我们需要将文件Android.mk链接(已在教程文件夹):
1.在左侧的导航选项卡中单击鼠标右键,在“应用程序”
2.点击“链接C++项目与摇篮”
3.在新窗口:

  • 变化从“CMake的”到“NDK建造”
  • 点击“生成系统”“...”,并浏览到Android.mk的位置“ /AndroidStudioProjects/android-studio-5/app/src/jni/Android.mk“
  • 点击确定

现在外部构建文件将出现在项目的左侧选项卡中。一些错误也会出现,这是正常的,并会在下一节中予以纠正。

3.设置“Android.mk”文件

最后一节的错误里面的变量是因为“Android.mk”将无法找到路径到GStreamer的提取。因此,让我们将GSTREAMER_ROOT_ANDROID变量设置为提取GStreamer的路径。 实现此目的:
1.浏览左侧选项卡并展开“外部生成文件”;
2.双击Android.mk打开文件;
3.在第10行,在 “包括$(BUILD_SHARED_LIBRARY)”,类型:
- “GSTREAMER_ROOT_ANDROID:= 路径
- NO引号
- 路径是(显然)其中的GStreamer被提取。
之后它将同步并显示错误“***目标拱ABI不支持:mips。停止”。

Setting GSTREAMER_ROOT_ANDROID

4.设置摇篮只编译

因为甲级试图建立不同的架构,但它没有找到建在MIPS的文件中出现最后一节的错误一些架构。为了解决这个问题,我们将指定不包含MIPS的体系结构:
1.在左侧浏览器选项卡中,展开Gradle脚本;
2.双击“build.gradle(Module:app)”
3。在根据 “MODULENAME” 类型的行:
(运行教程5)
- abiFilters '86', 'armeabi', 'armeabi-V7A', 'arm64-V8A'
(运行教程2)
- abiFilters'x86','armeabi-v7a','arm64-v8a'
(编辑11/21:最近我有问题与64位的arm64-v8a设备不会显示实时流,我解决了“删除arm64-V8A”太)

enter image description here

5.复制GStreamer的类的正确p ATH。

最后一次需要的配置是关于Main类中的包输入。

Class import error

上面显示的错误发生时,因为没有GStreamer的类来获取“的.init”功能。为了解决这个问题,我们需要对类的GStreamer从那里提取的文件和以往在指定的路径复制:

  1. 浏览,使用文件管理器从系统,到了那里你提取的GStreamer文件。
  2. 从提取的文件中,浏览到GStreamer类的位置。它位于/arm/share/gst-android/ndk-build/GStreamer.java 复制GStreamer.java
  3. 回到Android Studio并创建Main类试图访问的导入路径,从/ app/java在左边的浏览器标签。所以,上面的图片,我们在它创建路径org.freedesktop.gstreamer和粘贴文件GStreamer.java:
  4. 单击鼠标右键,在java文件夹
  5. 新建 - >包装
  6. 类型org.freedesktop .gstreamer
  7. 右键单击org.freedesktop.gstreamer并粘贴 5.输入错误现在已解决,但新类有错误。为了解决这些问题,你所要做的就是从复制的类中删除“@”以及位于“@”之间的所有内容。

6.禁用 “Instante运行” 从Android的工作室。 (编辑提出了27/10/2017)
Android Studio的这个特性可能会在尝试运行该项目时导致问题,所以最好禁用它。
禁用 “Instante运行”:

1.在Android Studio中转至 “文件” - > “设置...”(按Ctrl + Alt + S)
2 “建立,实施,部署” - >“即时运行”
3.取消选中‘启用部署即时运行热插拔代码/资源的变化(默认启用)’
4.点击‘应用’

7。修复 “链接金的说法”(仅适用于Windows用户)

当试图Windows中,您将得到错误:
Error:error: invalid linker name in argument '-fuse-ld=gold'
要解决这个问题:
1.转到Android NDK Linker (GStreamer) - invalid linker name -fuse-ld=gold
2.按照安托万Zambelli's回答说明。

+1

这是用Android Studio构建gstreamer教程的极好参考!希望它是官方文档的一部分。对于Windows上的Android Studio,我必须在参数'-fuse-ld = gold'*中为无效的链接器名称应用[this fix] [1]。由于链接程序重定位溢出错误,我还必须删除armeabi目标。 [1]:https://stackoverflow.com/questions/44650470/android-ndk-linker-gstreamer-invalid-linker-name-fuse-ld-gold – Glenn

+0

谢谢你的积极反馈,它总是很好知道一步一步地工作,另一个人也取得了成功。我编辑了教程,添加了教程是为Linux制作的信息(可能是因为您在Windows上制作的错误),并且在尝试教程2和3的情况下使用了从过滤器中移除armeabi的信息。如果另一个人将有与Windows相同的问题,我将添加另一个步骤,包括用于解决问题的链接。 –

+0

@EduardoFernando很确定这是一般的Windows问题 - 请参阅[GStreamer](https://gstreamer.freedesktop.org/documentation/installing/for-android-development.html)中的“Windows链接问题”,但他们的解决方案在该页面上提供的内容对我来说并不适用(因此我对这个链接问题的回答)。 –