【问题标题】:Android and linked librariesAndroid 和链接库
【发布时间】:2013-01-25 12:46:05
【问题描述】:

对于 java 用户来说,这个问题可能听起来很傻。对不起,我是菜鸟。

我想知道在运行时如何在 Android 系统中加载库。

假设我有一个超级简单的 android 应用程序,它只调用位于 javax.net.ssl 包中的函数。

包含javax.net.ssl 东西的jar (dex) 会被插入到apk 中(变成静态库)? 还是在运行时,Dalvik VM 会链接到安卓机器上安装的 jar(或 dex)文件? 或者只是 Dalvik VM 被编译为包含每个 javax 包含本身?

提前致谢

【问题讨论】:

    标签: android shared-libraries dalvik


    【解决方案1】:

    它们实际上是在运行时通过加载存储在设备上的额外优化 dex 代码动态链接的。

    实际上,对于许多组件,这种情况会在系统启动时发生一次,其中包含的进程和虚拟机成为每个应用程序继承对内存中已经存在的共享副本的只读访问权限。

    本机库的工作方式大致相同,只是链接发生在虚拟机级别以下,在进程本身中。

    【讨论】:

    • 那么...你是在告诉我,每部手机上都存在一个android.jar 库,并且每次手机启动时都会由 VM 加载?
    • 实际上是的,但它没有这么叫。它有真正的实现,而 sdk 中的 android.jar 有不透明的假货来指导工具链。
    • 这个真正的实现嵌入到dalvik编译的代码中?还是在 Dalvik 启动阶段从文件中加载?我问这个是因为我有疑问。如果后一个文件存在,如果我能找到它并以恶意方式修改它怎么办? (例如,我可以更改 javax.net.ssl 例程并让它们转储 SSL 连接的 DECRYPTED 数据)
    • 这是几个文件,其中大部分是在 zygote 启动时加载的,早在与您的应用程序或在您的应用程序的用户 ID 下运行的进程有关的任何事情发生之前。如果你有 root 和可写系统分区,你确实可以改变它——因为在那个时候,你超越了安全模型(你可以改变 anything 你可以想出一个功能接近的替代品,包括 dvm,或者如果您可以在其他地方编写内核等)。但如果没有 root 或类似的错误,您将无法更改系统库文件。
    • +1 & 接受的答案 ;)。我有最后一个问题。你知道这些文件在手机上的位置吗?
    猜你喜欢
    • 2011-04-02
    • 2011-06-13
    • 2014-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-14
    • 2017-02-05
    • 2015-04-06
    相关资源
    最近更新 更多