【问题标题】:Qt - Compilation for Linux is not compilation for Android? Why?Qt - Linux 的编译不是 Android 的编译?为什么?
【发布时间】:2014-06-27 08:30:09
【问题描述】:

Qt 5 支持 Android:使用 Android SDK 和 NDK,您也可以编译 Qt 应用程序以在 Android 上运行。现在我不明白。早在 Android 出现之前,Qt 就是一个跨平台。这意味着它能够在 Windows、Mac 和 Linux 上编译。但Android IS Linux 不是吗?为什么我需要像 SDK 和 NDK 这样的特殊 Android 工具来为 Android 编译。为什么在 Linux 上编译而不在 Android 上编译?

【问题讨论】:

  • Android 是底层系统,但软件实际上是基于 java 的。因此,您只有另一个目标系统。目标是 windows linux osx symbian android blackberry ...

标签: android c++ qt compilation


【解决方案1】:

Android 不仅仅是一个操作系统,而是一个完整的移动软件堆栈。

这是因为android的结构(在应用程序的上下文中)与linux的结构非常不同。所有的 android 应用程序都在 Dalvik Virtual Machine(DVM) 的实例上运行,并且彼此之间是 sanboxed。所以任何需要在android上运行的应用程序都必须兼容DVM。

Android 基于自定义的 linux 内核,它也使用相同的文件结构,但就平台而言,在 android 中运行的应用程序运行在完全不同的环境中。


(来源:cubrid.org

这里也有官方来源Android Low-Level System Architecture

我对 QT5 了解不多,但我认为这些信息可能有用。

【讨论】:

  • 这个框架插图太棒了!你能出示参考资料吗?
  • @SMR 由于 Qt5(我认为准确地说是 5.2),可以在 QT 中编写应用程序并将它们部署到 Android 和 iOS - qt-project.org/qt5/qt52
  • @Losiowaty 就像我说的我对 QT 及其工作原理不太了解。感谢您提供的链接。请,如果有更好的答案,请赐教。 :)
  • @SMR from your answer我不明白为什么可以在 Linux 上执行的文件不能在 Android 上。他们如何限制所有可执行文件只能是 APK?
  • “就像我说的,我对 QT 及其工作原理不太了解”如果你不知道,那么你不应该声称“我认为 QT 与 android 框架不兼容”。这是您信仰的真实陈述,但不属于此答案。你的信念有点超出了这里的范围。
【解决方案2】:

最简单的答案是 android 是 linux 但 linux 不是 android。

因为 android 需要一个 apk。 Android 应用程序有资源、权限等,它们运行在不同的运行时环境中。所以 android 有 linux 内核,但在操作系统层面,大多数东西是不同的。

【讨论】:

  • 如果 Android 是 Linux 而不是对 Linux 有效的,那么对 Android 也应该有效。但它没有接缝。从这里我们可以得出结论,Android 不是 Linux。同意吗?
  • @Narek 您当然可以在 Android 机器上运行通用 Linux 应用程序。您不能期望能够使用应用商店安装它们,也不能期望它们与 Android 框架互操作。所以你在某种程度上是错误的:如果你想接管设备的屏幕并做你自己的事情,你当然可以。但是如果你想和Android环境互操作,你必须使用Android开发工具包来编译你要使用的软件(这里:Qt库)。
  • @KubaOber 所以唯一的问题是我不能使用应用商店及其功能?但我可以在其他 Linux 系统上做任何我能做的事吗?
  • @Narek 你当然可以。从用户的角度来看,它会很糟糕,但你当然可以做到。祝显示器正常工作,因为在每台设备上都需要以不同的方式完成 - 没有单一的“Linux 图形”或类似的东西。几乎每个系统/芯片组都有自己的缺陷。
  • @KubaOber 这就是我们需要 Android SDK 和 NDK 的原因。因为我的代码可以在一台设备上运行,但在另一台设备上则不行。但是,如果我使用 SDK-NDK,它们可以解决跨平台问题,不是吗? (只是三重检查:))
【解决方案3】:

Android 使用主流的 Linux 内核,为特定设备提供额外的驱动程序,以及其他额外的功能,例如增强的电源管理或更快的图形支持。

在底层,Android 有一个不同的轻量级 C 标准库仿生 LibC。它使用视频帧缓冲设备代替 X11。此外,仅实现了 POSIX 标准的一个子集,以使 Android 上的操作系统轻量级。

Android 应用程序在 Dalvik 虚拟机上运行。还有许多其他差异使 Android 与常规 Linux 发行版更加不同。可以说Android只用了Linux内核,仅此而已。

由于这些主要差异,您应该使用特定版本的 Qt for Android 以及必要的 SDK 和 NDK 才能开发 Qt Android 应用程序。

【讨论】:

    猜你喜欢
    • 2016-03-20
    • 1970-01-01
    • 2017-10-12
    • 2020-12-04
    • 2011-04-21
    • 2016-03-26
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    相关资源
    最近更新 更多