我对Android平台上本机代码的限制有疑问。
基本上我已经开发了一个本机C代码库,它使用UDP套接字进行SIP / RTP,并使用OpenAL进行音频录制/回放 - 基本上就是整个应用程序。 我们的想法是尽可能使用本机C代码而不是Java代码。我想这样做是因为我将在其他平台上使用它。
我的问题很简单 - 是否可以将Java用于GUI,然后在本机代码中进行所有处理? 当我的本机代码尝试创建套接字,绑定它,录制音频,播放它等时会发生什么 - 因为它是本机代码,我是否需要为它设置权限(例如应用程序访问麦克风和诸如此类)或将它只是绕过这个东西,因为它的本机代码? 原生代码可以像在PC上一样在Android上做任何想做的事吗?
对不起,如果不清楚;告诉我,我会尝试改进它
由于
答案 0 :(得分:4)
你可以在本机代码中做任何你想做的事情,但真正支持的唯一操作系统级别的东西是OpenGL,OpenSL和一些数字运算库(压缩,数学等)。
但是,您可以随时使用JNI来调用Java方法,因此您可以使用标准的Android API进行联网(类似Socket
等类)。显然,由于调用是通过Java API进行的,因此适用所有正常的Android权限(如android.permission.INTERNET
)。
编辑:正如评论中所详述的那样,作为NDK一部分的标准库确实支持套接字。
答案 1 :(得分:3)
您仍然需要您的应用程序拥有权限。例如,如果清单中没有android.permission.INTERNET
,您的本机套接字将无效。
<manifest xlmns:android...>
...
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
</manifest>
另一种选择是在Java层创建套接字并将其传递下去。以下是与本地插槽交互的示例,请参阅方法org_..._OpenSSLSocketImpl_connect()
:
答案 2 :(得分:3)
The Native Android API是NDK的一篇不错的文章。
是否可以只使用Java进行GUI,然后使用本机代码进行所有处理?
是。您需要为AndroidManifest设置适当的权限。
录制音频,播放,
您需要使用OpenSL ES API在本机端录制和播放音频。这意味着您的应用程序应该适用于Android 2.3或更高版本。
或者,NVIDIA提供了一个框架,使我们能够使用C ++开发Android事件,传感器,音频等,即使对于Android 2.2或更早版本也是如此。
Tegra Resources - Android SDK & NDK sample applications and documentation
答案 3 :(得分:0)
您可以查看csipsimple,这是在java android应用程序中使用pjsip sip库(用C编写)的示例。
我没有研究套接字通信的方式,但它应该为您提供一个更完整的示例,说明您要做什么。