Java 为什么有些东西不在上面运行?

Java 为什么有些东西不在上面运行?,java,android,Java,Android,为什么有些Java代码在打包为APK并部署到Android设备时无法运行/工作?像GoogleGuice、ApacheCamel和许多其他项目。这不就是普通的ole Java吗?不。有很多自定义库和框架可以帮助管理应用程序的生命周期 我不确定骆驼和圭斯到底是什么。然而,(如果我错了,请有人纠正我)是Android框架。操作系统可以安排要运行的事情。这是应用程序的整个生命周期。如果您刚开始运行纯java代码,那么操作系统的钩子在哪里?它需要一些东西来控制。理论上,我认为您的代码可以在其DM中愉快地

为什么有些Java代码在打包为APK并部署到Android设备时无法运行/工作?像GoogleGuice、ApacheCamel和许多其他项目。这不就是普通的ole Java吗?

不。有很多自定义库和框架可以帮助管理应用程序的生命周期


我不确定骆驼和圭斯到底是什么。然而,(如果我错了,请有人纠正我)是Android框架。操作系统可以安排要运行的事情。这是应用程序的整个生命周期。如果您刚开始运行纯java代码,那么操作系统的钩子在哪里?它需要一些东西来控制。理论上,我认为您的代码可以在其DM中愉快地运行,但我怀疑它不会很好地处理任何事情

没有。有很多自定义库和框架可以帮助管理应用程序的生命周期


我不确定骆驼和圭斯到底是什么。然而,(如果我错了,请有人纠正我)是Android框架。操作系统可以安排要运行的事情。这是应用程序的整个生命周期。如果您刚开始运行纯java代码,那么操作系统的钩子在哪里?它需要一些东西来控制。理论上,我认为您的代码可以在其DM中愉快地运行,但我怀疑它不会很好地处理任何事情

让我详细谈谈弗兰克的回答。如果你从柴油机中取出发动机,放在普通车上;它会跑吗?它们都是发动机

简单回答:安卓想要安全。它不喜欢任性地执行代码。为了运行Java代码,它需要一个包装器。这个包装器是APK,在某种程度上是android清单。一旦Android看到这些东西,它就知道自己在运行什么以及如何运行。让我们回到我对标准汽车中柴油发动机的类比。这是可能的,但你必须做一些修改,使汽车(机器人)知道如何处理发动机(柴油发动机)

安卓在其核心运行Linux;按照您的思维模式,您应该能够运行linux本机应用程序,对吗?你可以看到我要做什么


更简短的回答是:在许多方面,Android根本不是java。这是它自己独特的语言,有一些警告和怪癖,但语法相同。

让我详细介绍一下弗兰克的答案。如果你从柴油机中取出发动机,放在普通车上;它会跑吗?它们都是发动机

简单回答:安卓想要安全。它不喜欢任性地执行代码。为了运行Java代码,它需要一个包装器。这个包装器是APK,在某种程度上是android清单。一旦Android看到这些东西,它就知道自己在运行什么以及如何运行。让我们回到我对标准汽车中柴油发动机的类比。这是可能的,但你必须做一些修改,使汽车(机器人)知道如何处理发动机(柴油发动机)

安卓在其核心运行Linux;按照您的思维模式,您应该能够运行linux本机应用程序,对吗?你可以看到我要做什么


更简短的回答是:在许多方面,Android根本不是java。这是它自己独特的语言,有一些警告和怪癖,但语法相同。

在语言规范之外,“纯ole'Java”或“100%纯Java”并不存在。您正在处理一个完全不同的虚拟机模型和不同的类库。不是为了与桌面JVM实现(Sun/Oracle、OpenJDK等)兼容而实现的。它甚至不直接运行Java字节码;它被编译成特定于Dalvik的指令集,并被破坏,试图创建更小的可执行包,并在资源受限的移动平台上运行良好

“纯ole'Java”或“100%纯Java”在语言规范之外并不存在。您正在处理一个完全不同的虚拟机模型和不同的类库。不是为了与桌面JVM实现(Sun/Oracle、OpenJDK等)兼容而实现的。它甚至不直接运行Java字节码;它被编译成特定于Dalvik的指令集,并被破坏,试图创建更小的可执行包,并在资源受限的移动平台上运行良好

Java语言,是的,“Java”是类的集合-是的,有很多重叠,但也有一些关键性的差异。Java语言,是的,“Java”是类的集合-是的,有很多重叠,但也有一些关键性的差异。我感谢你花时间回答@Frank(+1)但这并不能向我解释为什么Camel(100%纯Java)或Guice不会在Android上运行。Java编译成字节码,而不管它来自哪个框架(Guice、Camel或其他)。问题是合理的:为什么Android不运行一些Java软件包?我怀疑(正如已经指出的)一些基本的JRE类型和Dalvik如何实现它们之间存在一些差异,并且某些框架(比如反射重的Guice)广泛使用Dalvik没有对应的类型。但这只是一个猜测。我感谢你花时间回答@Frank(+1),但这并不能向我解释为什么Camel(100%纯Java)或Guice不会在Android上运行。Java编译成字节码,而不管它来自哪个框架(Guice、Camel或其他)。问题是合理的:为什么Android不运行一些Java软件包?我怀疑(正如已经指出的)一些基本的JRE类型和Dalvik如何实现它们之间存在一些差异,并且某些框架(比如反射重的Guice)广泛使用Dalvik没有对应的类型。但这只是一个猜测