【问题标题】:Android-Ndk vs Cross-Compile? Both work ,What was the need of Android NDK then ?Android-Ndk 与交叉编译?两者都有效,那么Android NDK需要什么?
【发布时间】:2012-04-21 16:59:08
【问题描述】:

我可以交叉编译任何 C/C++ 应用程序,静态链接它 Linux 库并在 android 上运行它。那么 Android-ndk 的需求是什么?Android-ndk 将我们限制为具有 gnu 小子集的仿生libc。直接交叉编译应用程序并通过Android shell运行它们不是更好的主意吗?交叉编译有什么我看不到的限制吗?这个网址:Can Linux apps be run in Android? 在一定程度上回答了我的问题,但最终让我感到困惑和不清楚。

【问题讨论】:

    标签: android linux android-ndk cross-compiling


    【解决方案1】:

    我认为这对Android-NDK来说已经足够了

    Android NDK 是 Android SDK 的配套工具,可让您在本机代码中构建应用的性能关键部分。 它提供的头文件和库允许您在使用 C 或 C++ 编程时构建活动、处理用户输入、使用硬件传感器、访问应用程序资源等等。如果您编写本机代码,您的应用程序是仍然打包到 .apk 文件中,并且它们仍然在设备上的虚拟机内运行。基本的 Android 应用程序模型没有改变。

    NDK 提供:

    • 一组用于生成本机代码库的工具和构建文件 来自 C 和 C++ 源代码

    • 一种将相应的本机库嵌入到应用程序中的方法 可以在 Android 设备上部署的包文件 (.apk)

    • 将支持的一组本机系统头文件和库 在 Android 平台的所有未来版本中,从 Android 开始 1.5。使用原生 Activity 的应用程序必须在 Android 2.3 或更高版本上运行。

    这个东西你在其他与arm工具链的交叉编译中是找不到的..

    【讨论】:

    • 感谢您的回复。总结我的理解,对于独立的 shell 级应用程序,我们可能不需要 ndk,交叉编译可能会起作用,但对于具有 GUI 的 Android 应用程序,我们可能需要它来重用现有的 C/C++ 代码或提高性能。
    【解决方案2】:

    如链接http://developer.android.com/sdk/ndk/index.html 中所述,NDK 是应用程序开发人员创建性能敏感本机代码的伴侣。 NDK 暴露了一些在一般 Linux 环境中找不到的 Android 原生实现。其中一些包括 Android/Bitmap、Android/nativeWindow 等。使用这些 Android 原生应用程序可以加快 CPU 密集型进程,例如一些图像压缩或解压缩。

    即使外部交叉编译的可执行文件可以在 Android 中运行,但不能保证标准库实现的版本是相同的。 NDK 提供了一个更简单且与 Android 兼容的工具链和其他资源,对于应用程序开发人员来说,使用它们比为他们的用例寻找兼容的交叉编译器要容易得多。

    【讨论】:

    • 感谢 Deepak 的回答,您的回答很有帮助。但我不明白您的意思是“即使外部交叉编译的可执行文件可以在 Android 中运行,但不能保证标准库实现是相同的”,由于应用程序是静态链接的,库版本是否重要?
    • 好吧,我想我的理解很清楚了。与使用二手 Linux 实现相比,NDK 提供了直接和更好/更快的接口。此外,开发人员使用 ndk 更容易找到和配置交叉编译器。感谢您的出色回复:)
    猜你喜欢
    • 2012-12-28
    • 2013-06-11
    • 1970-01-01
    • 1970-01-01
    • 2019-03-09
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 2014-01-26
    相关资源
    最近更新 更多