为什么某些 Java 代码在打包为 APK 并部署到 Android 设备时无法运行/工作?像 Google Guice、Apache Camel 和许多其他项目。这不就是普通的 ole' Java 吗?
3 回答
不会。有很多自定义库和框架可以帮助管理应用程序的生命周期。
我不确定 Camel 和 Guice 到底是什么。但是,(如果我错了,请有人纠正我)是 Android 框架。操作系统有安排要运行的东西的方法。这就是您的应用程序的整个生命周期。如果你刚开始运行纯 java 代码,操作系统的钩子在哪里?它需要一些东西来控制。我想理论上你的代码可以在它的 DM 中愉快地运行,但我怀疑它不会很好地与任何东西一起玩。
让我扩展弗兰克的回答。如果您将发动机从柴油中取出并放入普通汽车中;它会运行吗?它们都是引擎。
简短的回答:Android 想要安全。它不喜欢随意执行代码。为了运行 Java 代码,它需要一个包装器。该包装器是 APK,在某种程度上是 android 清单。一旦 Android 看到这些东西,它就知道它在运行什么以及如何运行它。让我们回到我对标准汽车中的柴油发动机的类比。可以做到这一点,但是您必须进行一些修改,以便汽车(Android)知道如何处理发动机(柴油发动机)。
Android 运行 Linux 的核心;在您的思维模式下,您应该能够运行 linux 原生应用程序吧?你可以看到我要去哪里。
更简短的回答:在许多方面,Android 根本不是 Java。它是它自己独特的语言,有警告和怪癖,但语法相同。
“Plain ole' Java”或“100% pure Java”实际上并不存在于语言规范之外。您正在处理完全不同的虚拟机模型和不同的类库。 Dalvik VM的实现并不是为了与桌面 JVM 实现(Sun/Oracle、OpenJDK 等)兼容。它甚至不直接运行 Java 字节码;它被编译成特定于 Dalvik 的指令集,并以其他方式进行修改,以尝试创建更小的可执行包并在通常资源受限的移动平台上运行良好。