Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/179.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
哪种方法最适合在Android中运行C程序_Android_C_Android Ndk - Fatal编程技术网

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

哪种方法最适合在Android中运行C程序,android,c,android-ndk,Android,C,Android Ndk,据我所知,在android中编译和使用C代码有3种方法 1。NDK:通过使用JNI: 2-静态:不使用libc库: 3。动态:使用libc库时: 我需要找出最好的方法。此外,我需要考虑可靠的方法,并要求良好的性能。 谢谢有两种方法可以编写包含C的Android应用程序: 您用Java编写一个Android应用程序,并用C实现其中的一部分。然后用JNI调用该部分 您用C/C++编写了一个Android应用程序(使用),但正如第一个答案中所提到的,您仍然会在幕后用Java调用东西 据我所知,这是拥有

据我所知,在android中编译和使用C代码有3种方法

1。NDK:通过使用JNI:

2-静态:不使用libc库

3。动态:使用libc库时

我需要找出最好的方法。此外,我需要考虑可靠的方法,并要求良好的性能。
谢谢

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

  • 您用Java编写一个Android应用程序,并用C实现其中的一部分。然后用JNI调用该部分

  • 您用C/C++编写了一个Android应用程序(使用),但正如第一个答案中所提到的,您仍然会在幕后用Java调用东西

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

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

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

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

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

    • 如果您想开发标准的Android“应用程序”,可以使用GUI、WiFi/Bluetooth等。根据您的偏好语言,使用Java或C/C++方式。Java更受欢迎,因此您将找到更多关于它的文档和示例

    • 如果您想在C/C++中开发一些不需要Android应用程序功能的东西(例如服务或与硬件接口的代码),或者您想移植一些现有的C/C++代码,那么您可以使用ARM工具链来编译它。有关静态链接和动态链接之间的区别,请参见


    以上两种方法的优缺点是什么?编辑答案以更好地描述这些方法的一些特点-然而,这一切都取决于您真正想要从您的程序中得到什么,如果您想做一些具体的事情,也许可以对可能的优缺点说得更多