这些问题是我尝试理解Android如何处理JAR文件和外部库等.这是概念性的.
在Java中,JRE附带了一个JAR文件rt.jar,因此每个应用程序都可以访问java核心库.
Java类加载器是否仅在应用程序需要时加载类?
rt.jar是否相当于android的/ system/framework/jars?
当我们使用SDK开发应用程序时,我们在其中一个android API中包含了android.jar.android.jar本质上是该API的编译AOSP(减去一些隐藏的库)吗?
android.jar实际上并不包含在APK中,是吗?一旦在设备上,APK正在使用/system/framework/framework.jar,对吗?
如果是4,那么android如何告诉应用程序使用该库?这是我可以查看源代码的东西吗?
当我们将JAR添加到Android项目时,这就像包含静态库一样吗?来自库的代码只是编译成classes.dex,就像项目的其余部分一样?
当我们向应用程序添加一个android库项目时,它是否也被编译成classes.dex?这和6之间的唯一区别是库项目可以包含资源吗?
如果每个应用程序都引用/system/framework/framework.jar(以及其他应用程序,如services.jar等),那么该设备上是否有一堆该库一次运行的实例?它是否像多次加载到内存中的动态库一样?
我喜欢所有这些问题的答案,但我也很欣赏一些关于这些事情的好地方的建议.
如果我的任何答案有误,请纠正我,我将进行编辑:
1.- Android 多年来一直采用 JIT,但现在有一个新的运行时可以强制 AOT 来提高性能,现在大多数设备都可以处理它:Dalvik ART
2.- ??
3-5.- android jar 由 IDE 提供用于编译目的,但实际实现是由操作系统加载的,这就是它们实现向后兼容性(和碎片)以及在三星或亚马逊等熟 rom 上运行的相同 APK 的方式。
6.- 是的,所有内容都打包在classes.dex 中,并且所有依赖项之间有65k 个方法的硬上限。有一些编译时替换可能已包含在操作系统中的依赖项。
7.- 我不确定新的 AAR,但是模块或其他项目被编译并捆绑在一起,是的。
8.- 这些东西以及系统资产都有一个共享内存空间:Commonsware - 什么是 Dalvik部分内存消耗。
| 归档时间: |
|
| 查看次数: |
663 次 |
| 最近记录: |