官方Android堆栈中是否暗示Android应用程序可以在没有Android运行时的情况下运行?

4
实际上,我一直认为答案是否定的:安卓应用必须在独立的ART实例上运行(就像Java在JVM上运行)以翻译和处理跨平台需求。
然而,我对谷歌提供的安卓堆栈图感到困惑。它所绘制的方式似乎暗示着,系统应用程序+Java API框架可以通过本地C/C++库到达底部,而无需Android Runtime。但是,我想辩论的是,如果Java需要调用本地空间,则仍需要Android Runtime(JVM/legacy Dalvik)来解释源代码并通过JNI调用本地。简单地将Java API Framework放置在本地库之上会让我产生误导。
如果有逻辑不完整或不正确的地方,请评论并纠正我。谢谢。

https://developer.android.com/guide/platform


1
也许“Android Runtime”的位置的安排是为了显示“Java API Framework”并没有直接调用运行时。从Java代码的角度来看,它是直接调用C++库,而这是由运行时所实现的。 - Michael
同意。虽然有点误导性,但我猜它试图强调这两种路径之间的差异:1)使用本地库 2)在运行时直接调用核心库以连接内核任务。 - ctk2021
1个回答

3

我曾经怀疑这是不可能的。然而,如果您将apk反编译为smali,您会发现smali是更易于阅读的Java字节码。将smali从apk转换为Java源代码,您就拥有了ART的Java翻译。 您可以模拟/替换/重新创建Native/ART实现,下面的所有内容都是自解释的。它是基于Linux的,并具有硬件属性,提供输入给ART,由C++检索,仅用于由Java生成系统应用程序。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接