Android中的可绘制和mipmap之间有什么不同
#android #google

在旧的项目代码中,在“可绘制”文件夹中使用了一些图像,而在“ mipmap”文件夹中使用了一些图像。有时,我有疑问并搜索文章。但是我不够理解。最近,我尝试找到它。因此,我一一检查了文章的内容,发现实际结果远非结论。

几个共同的结论

案例1可消除其他密度,MIPMAP将保留所有(最终结论与此有关)

当XHDPI密度电话加载此APK时,Google具有优化功能,可以删除可绘制的文件夹中的其他密度文件,只需保留一个基本的可绘制和可借助的XHDPI文件夹,但是MIPMAP将保留所有内容。

检测方法也相对简单。将相同类型的图像(带有标签的图像文本)放在文件夹中,以绘制和MIPMAP的不同密度文件夹,然后检查此安装程序包和应用程序大小

case1.1安装软件包和应用程序大小

安装程序包大小 应用程序大小
绘制 13.3 MB(14,016,841字节) 14.04MB
mipmap 13.3 MB(14,017,191字节) 14.04MB
结论1.1

考虑到两个安装软件包的大小略有不同,考虑到图像本身的大小(每个图像都超过1MB),但可以认为,放置在可绘制和MIPMAP中的图像之间没有区别安装应用程序后的文件夹。

case1.2应用程序内绩效

排除安装程序包情况,让我们看一下应用程序中的性能(使用adb shell wm density来确保密度而不更改其他信息)。

100 420 800
绘制
mipmap
结论1.2

从此可以看出,无论文件放入哪个文件夹,都将正确显示为手机上的匹配图像资源。

案例1.3应用程序内缩放

如果图像视图具有缩放动画,则使用绘制下的图像,将连续使用一个图像来扩展图像以实现图像视图缩放动画。

如果您在MIPMAP下使用图像,则将自动选择具有最接近当前分辨率的图像,并且比当前分辨率大于当前分辨率。

这个结论可能不是一个普遍的结论,但是由于有说法,让我们进行测试。

可绘制
较小的缩放比率 大缩放比率
mipmap
较小的缩放比率 大缩放比率
结论1.3

可以看出,整个缩放动画过程中都显示了相同的动画。

案例2申请性能

Google已经优化了MIPMAP图像的性能,以使其表现更好。

可绘制
性能概述 记忆 加载10张图像的平均时间
146
mipmap
性能概述 记忆 加载10张图像的平均时间
151
结论2

可以看出,在系统加载单个图像的情况下,它们的性能基本相同,除了此图像太小或太少以至于显然优化性能。但是,即使在反复加载图像的情况下,性能仍然相似。也许优化仅适用于特定类型的图像?如果您知道更多细节,请随时与我交流。

case3发射器图标

在研究时,发现通常建议使用Minmap文件夹来包括应用程序的启动器图标,这种方式可以使性能更好地优化。

100dpi 420dpi 800dpi
结论3

可以看出,在不同的DPI设置中,应用程序图标的显示是一致的,而切换应用程序图标的边界值也是一致的。至于为什么420DPI和800DPI相同的情况,因为在选择图像资源时,由于各种原因,应用程序图标需要扩大约25%。 1

在这一点上,您可能有与我相同的疑问。由于在可绘制和MIPMAP下的图像的性能是相同的,无论是在安装程序包中还是在应用程序本身中,甚至官方文档也是如此,为什么各种测试结果表明两者的性能基本一致?<<<<< /strong>

罪魁祸首:束(.aab)

如果您不使用Google Play推动您的APK(像我一样),那么您将不熟悉此事。甚至许多以前在Google Play上发布应用程序的人也不熟悉它。实际上,每当我们手动打包应用程序时,这实际上都会出现。

image

简单地说,.AAB软件包通常用于Google Play商店。当您从Google Play商店下载应用程序时,它将根据手机的实际用法下载不同的可抽取资源,以减少安装软件包的大小。 (通常,手机的DPI不会更改,直到卸载该应用程序之前,将不会使用其他资源密度。)

以下测试中使用的工具是BENTLETOOL 2 ,它模拟了从Google Play下载和安装应用程序的过程。

安装软件包的比较

安装软件包(APK)大小 应用程序大小
绘制 5.91 MB(6,201,543Å) 6.22MB
mipmap 12.6 MB(13,230,670Å) 13.26MB

应用内性能

100 420
绘制
mipmap

可以看出,当图像在可绘制的文件夹上使用时,通过.AAB软件包安装的应用程序将小于minmap文件夹中使用的应用程序,并且当更改应用程序中的DPI时,它不能更长的时间根据当前DPI自动选择相应的图像。

结论

基于上述测试,我们可以得出以下结论。
以下结论不涉及与MIPMAP相关的性能优化(主要是因为我们尚未设计明确的比较测试)
测试电话型号是像素7,测试的Android版本为13

  1. 当应用程序是作为.APK构建时,无论是在应用程序中还是在启动器中(应用程序图标),绘制或MIPMAP文件夹之间没有区别
  2. 当应用程序作为.AAB构建时,可绘制的文件夹中的资源将寻找匹配的设备密度,并将删除无与伦比的资源以确保.APK的大小。但是,将保留MIPMAP文件夹中的所有资源文件。

我们可以将使用的图像放在应用程序中的任何目录中吗?

如果您的应用程序是通过.APK分发和安装的,则原理没有差异。但是,Google还推荐了相关目录的说明,如下所示:
image

正如我们所看到的,MIPMAP目录只能原则上保存应用程序图标。同样,他们的official projectssingle density resource projects也以这种方式使用这两个文件夹。

.AAB软件包中MIPMAP文件夹的保留机制仅适用于应用程序图标吗?

测试后,可以发现MIPMAP的保留机制适用于MIPMAP下的所有图像资源,无论它们是否是应用图标。

可以在我的GitHub上访问相关代码。


  1. https://developer.android.com/training/multiscreen/screendensities#mipmap

  2. https://github.com/google/bundletool/