【问题标题】:Which method is best for C program runs in Android [closed]哪种方法最适合在 Android 中运行的 C 程序 [关闭]
【发布时间】:2012-03-28 06:17:16
【问题描述】:

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

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

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

谢谢

【问题讨论】:

    标签: android c android-ndk


    【解决方案1】:

    有两种方法可以编写包含 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 应用程序功能的东西(例如与硬件接口的服务或一段代码),或者您想移植一些现有的 C /C++ 代码,然后您可以使用 ARM 工具链对其进行编译。有关静态链接和动态链接的一般区别,请参阅此question

    【讨论】:

    • 以上两种方式的优缺点是什么??
    • 编辑了答案以更好地描述这些方法的一些特征 - 然而,这完全取决于你真正想要从你的程序中得到什么,如果你想做一些具体的事情,也许可以说更多关于可能的优点/缺点
    猜你喜欢
    • 2014-02-26
    • 2020-07-10
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 2012-04-02
    相关资源
    最近更新 更多