android - 哪种方法最适合C程序在Android中运行

标签 android c android-ndk

据我所知,有3种方法可以将C代码编译并使用到android中。

1. NDK : by using JNI : example
2. -static : without using libc library : example
3. dynamic : with using libc library : example

我需要找出最好的方法。我还需要考虑可靠的方法并需要良好的性能。

谢谢

最佳答案

有两种方法可以编写包含 C: 的 Android 应用程序

  1. 您用 Java 编写 Android 应用程序并用 C 实现其中的某些部分。然后您使用 JNI 调用该部分。

  2. 您用 C/C++ 编写了一个 Android 应用程序(使用 NativeActivity ),但如第一个答案中所述 here您仍然会在后台调用 Java 中的内容。

据我所知,这是拥有“应用程序”(即普通用户可以使用的东西)的唯一标准两种方式。

当然,您可以使用某些工具链(例如 NDK 工具链或 CodeSourcery 工具链等)编译二进制文件,但您只能从某些命令行终端或从其他应用程序内部运行它们:这些是二进制文件在设备上运行的代码,而不是成熟的应用程序。对于某些东西,例如服务或驱动程序,这是完全可以的。对于静态与动态:

(a) 对于 NDK,您通常会动态链接 Android 的基本库(仿生)或您的设备在/system/lib 中可能拥有的任何其他库。这意味着您的程序仍然很小。

(b) 对于必须静态编译自己的 libc(或其他)的其他工具链,您会得到一个胖二进制文件,它可能加载甚至执行速度较慢(但这取决于太多因素,您应该测试它) .

编辑:所以,最终,这取决于您希望从应用程序中获得什么:

  • 如果您想开发可以使用 GUI、WiFi/蓝牙等的标准 Android“应用程序”,请根据您的首选语言使用 Java 或 C/C++ 方式。 Java 更流行,因此您会找到更多有关它的文档和示例。

  • 如果你想用 C/C++ 开发一些不需要 Android 应用程序功能的东西(例如服务或与硬件接口(interface)的一段代码),或者你想移植一些现有的 C/C++ 代码,然后您可以使用 ARM 工具链对其进行编译。有关静态链接和动态链接之间的一般差异,请参阅此 question .

关于android - 哪种方法最适合C程序在Android中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9902097/

相关文章:

java - 渲染期间引发异常 : Circular dependencies cannot exist in RelativeLayout Exception details are logged in Window > Show View > Error Log

android - 过渡动画后 EditText 提示不可见

计算 C 中 k 的倍数的递归函数调用

Android 版本 "__pure2"重新定义

安卓 JNI 生成文件 : where to set CFLAGS?

video - android ffmpeg 设置帧率

android - android中的Listview检索

android - Google Place API 获取地点的经纬度

mysql - 使用 libmysqlclient C API 设置 collat​​ion_connection

c - 在 C 中生成不正确的斐波那契数列