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