【问题标题】:Android/Java librariesAndroid/Java 库
【发布时间】:2014-08-06 12:59:43
【问题描述】:

这些问题是我试图理解 Android 如何处理 JAR 文件和外部库等。它是概念性的。

在 Java 中,JRE 附带了一个 JAR 文件 rt.jar,因此每个应用程序都可以访问 Java 核心库。

  1. Java 类加载器是否只加载应用程序需要的类?

  2. rt.jar 是否等同于 android 的 /system/framework/ jars?

  3. 当我们使用 SDK 开发应用程序时,我们会包含来自其中一个 android API 的 android.jar。 android.jar 本质上是该 API 的已编译 AOSP(减去一些隐藏库)吗?

  4. android.jar 实际上并不包含在 APK 中,是吗?一旦在设备上,APK 正在使用 /system/framework/framework.jar,对吗?

  5. 如果是 4,android 如何告诉应用程序使用该库?这是我可以查看源代码的东西吗?

  6. 当我们将 JAR 添加到 Android 项目中时,这是否就像包含静态库一样?库中的代码只是像项目的其他部分一样编译到 classes.dex 中?

  7. 当我们将android库项目添加到应用程序中时,它是否也编译成classes.dex?这和6的唯一区别是库项目可以包含资源?

  8. 如果每个应用程序都引用 /system/framework/framework.jar(以及其他,如 services.jar 等),那么设备上是否同时运行该库的一堆实例?是不是像一个多次加载到内存中的动态库?

我很想知道所有这些问题的答案,但我也希望能推荐一些阅读这些内容的好地方。

【问题讨论】:

  • 3-5 AFAIK 提供了 jar,但 IDE 用于编译目的,但实际实现由操作系统加载,这就是它们如何实现向后兼容性以及在三星或亚马逊等熟 rom 上工作的类似 apk .
  • 6 是的,所有内容都打包在 classes.dex 中,所有依赖项之间有 65k 个方法的硬帽。对于可能已经包含在操作系统中的依赖项,有一些编译器时替换。
  • 7 我不确定新的 AAR,但模块或其他项目已编译并捆绑在一起,是的。
  • 1 Android 多年来一直是 JIT,但有一个新的运行时强制执行 AOT 以提高性能:source.android.com/devices/tech/dalvik/art.html
  • 8 AFAIK 有一个共享内存空间用于这些东西以及系统资产:commonsware.com/blog/Articles/what-is-dalvik.html section Memory Consumption

标签: java android jar


【解决方案1】:

如果我在任何答案中有错误,请纠正我,我会编辑:

1.- Android 多年来一直是 JIT,但现在有一个新的运行时强制执行 AOT 以提高性能,因为大多数设备都可以处理它:Dalvik ART

2.- ??

3-5.- IDE 提供 android jar 用于编译目的,但实际实现由操作系统加载,这就是它们实现向后兼容性(和碎片)的方式,并且相同的 APK 可以在三星的熟 rom 上工作或亚马逊的。

6.- 是的,所有内容都打包在 classes.dex 中,并且所有依赖项之间有 65k 方法的硬帽。对于可能已经包含在操作系统中的依赖项,有一些编译器时替换。

7.- 我不确定新的 AAR,但模块或其他项目已编译并捆绑在一起,是的。

8.- 这些东西以及系统资产都有一个共享内存空间:Commonsware - What is Dalvik 部分内存消耗。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-28
    • 1970-01-01
    相关资源
    最近更新 更多