据我所知,有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 应用程序
您用 Java 编写 Android 应用程序并用 C 实现其中的某些部分。然后您使用 JNI 调用该部分。
您用 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/