Java Android应用程序能否在没有Android运行时的情况下运行,正如官方Android堆栈中暗示的那样?

Java Android应用程序能否在没有Android运行时的情况下运行,正如官方Android堆栈中暗示的那样?,java,android,java-native-interface,Java,Android,Java Native Interface,事实上,我一直认为答案是否定的:Android应用程序必须运行在单独的ART实例上(如Java over JVM)才能翻译和满足跨平台需求 然而,我随后对谷歌推出的安卓系统堆栈的数字感到困惑。它的绘制方式似乎意味着,系统应用程序+JavaAPI框架可以在没有Android运行时的情况下通过本机c/c++库进入底层。但我想说的是,如果Java需要调用本机空间,仍然需要Android运行时(JVM/legacy Dalvik)来解释源代码并通过JNI调用本机。简单地将JavaAPI框架置于本机库之上

事实上,我一直认为答案是否定的:Android应用程序必须运行在单独的ART实例上(如Java over JVM)才能翻译和满足跨平台需求

然而,我随后对谷歌推出的安卓系统堆栈的数字感到困惑。它的绘制方式似乎意味着,系统应用程序+JavaAPI框架可以在没有Android运行时的情况下通过本机c/c++库进入底层。但我想说的是,如果Java需要调用本机空间,仍然需要Android运行时(JVM/legacy Dalvik)来解释源代码并通过JNI调用本机。简单地将JavaAPI框架置于本机库之上对我来说是一种误导

如果逻辑上不完整或不正确,请评论并纠正我。谢谢


我一直怀疑这是不可能的。但是,如果您将apk反编译为smali,您将看到smali是一种更易于阅读的java字节码。将smali从apk转换为java源代码,您就拥有了ART的java翻译。
您可以模拟/替换/重新创建本机/ART实现以及下面的所有内容。它是基于Linux的硬件属性,它提供了对艺术的输入,由C++检索,只由java用来生成系统应用程序。

也许是<代码> java运行时< /COD>的位置是为了说明<代码> Java API框架< /> >不直接调用运行时。从java代码的角度来看,它直接调用C++库,这是由RunTime.Advices所促进的。虽然这有误导性,但我猜它试图强调这两种途径之间的区别:1)本机库的使用2)在运行时直接调用核心库以桥接内核任务。