Android应用程序库效率

Android是否做任何事情来跨应用程序共享重复的库? 看来,操作系统可以检测到重复的哈希值,并避免为每个应用程序分开的副本。

如果用户安装了50个应用程序,并且其中许多应用程序具有Android支持,Kotlin和Guava库的版本,那么这将是一个很好的机会来节省磁盘空间。

Android是否做任何事情来跨应用程序共享重复的库?

没有。

看来,操作系统可以检测到重复的哈希值,并避免为每个应用程序分开的副本

每个应用程序都是数字签名的,因此是否要包含这些库的决定必须在构建时完成。 你想要什么似乎需要一个时间机器,“retcon”Android从一开始就具备这种能力。 或者,需要分销渠道支持才能为不同的场景提供不同的APK版本(例如,较新的设备可以获得APK sans库;较早的设备则可以获得带有库的APK),而不是所有的分销渠道都能支持这一点。

目前还不清楚这将如何与multidex和ProGuard的工作。 共享库副本需要是完整的库,而不是通过ProGuard删除的库,因为不同的应用程序需要库的不同部分。 这可能会强制所有的应用程序使用multidex,即使在通常不需要的地方。

安全开始成为一个更大的问题。 共享库副本从哪里来? 如果您希望将其限制为少数“知名”库(例如Kotlin运行时),那么Google可以管理这些内容。 但是,“第一个获胜”的方法引发了一个应用程序的幽灵,该应用程序散布了一个被共享的图书馆的恶意副本。

总的来说,你的方法对20世纪90年代的“DLL地狱”和21世纪的“JAR地狱”具有强烈的特征。 跨应用程序共享库很难正确管理。

如果用户安装了50个应用程序,并且其中许多应用程序具有Android支持,Kotlin和Guava库的版本,那么这将是一个很好的机会来节省磁盘空间。

由于番石榴的大小,番石榴在开发中并没有太多的用处。 除了appcompat-v7这个值得注意的例外,大部分Android支持库都相当小。 我不认为这将节省尽可能多的磁盘空间,而且节省的成本也会被开发人员所利用。