我们遇到了一些令人沮丧的时刻,我们得到了关于丢失图标的错误,所以我决定深入研究它。
以下是我的发现……基本上是在 Andrew Niefer 的回答中添加了额外的信息。
对于 Windows,在本机启动器中替换图像的过程如下所述。处理由 p2 类完成:org.eclipse.pde.internal.swt.tools.IconExe
此类查看本机启动器的资源并注意其中的位图:它们的大小和颜色深度。
然后它查看提供的图像。这可以是单独的 BPM 列表或包含多个 BMP 的 ICO 文件。还注明了它们的尺寸和颜色深度。
这仅在所有提供的图像都未压缩时才有效。当一个或多个图像被压缩时,进程停止并且在本机启动器中没有位图被替换。
接下来,它会尝试将提供的 BMP 大小和颜色深度与本机启动器中的匹配,并且在它们匹配的地方,它们会在本机启动器中被替换。
当原生启动器中的一个或多个位图在提供的图像中不可用时,将以下消息写入 System.err:
Error - <n> icon(s) not replaced in […]using […]
IconExe 类有一个 main 方法,可以独立运行。它的第一个参数是需要修改的原生启动器,后面的参数是提供的 BPM 或 ICO 文件。
对于 Eclipse 4.3(.x),本机启动器包含 7 个位图:
- 256x256,32 位(RGB / Alpha 通道)
- 48x48,32 位(RGB / Alpha 通道)
- 32x32,32 位(RGB / Alpha 通道)
- 16x16,32 位(RGB / Alpha 通道)
- 48x48,8 位(256 色)
- 32x32,8 位(256 色)
- 16x16,8 位(256 色)
因此,要使图像替换过程成功,需要提供 7 张大小和深度相同的图像,作为单独的 BMP 或在 ICO 中。
但是,当使用 tycho-p2-publisher-plugin 时,您不能提供 7 个单独的 BPM,因为 tycho-p2-publisher-plugin 不知道.product 文件中指定的 256x256x32 图像。
它的类 org.eclipse.tycho.model.Launcher 仅从 .product 文件中读取其他 6 个图像位置,因此,第 7 个图像(256x256x32 的图像)被跳过.
因此,IconExe 获取的列表是一张短图,并且总是会报告:
Error - 1 icon(s) not replaced in […]using […]
对我们有用的解决方案是将 7 个 BMP 合并到一个 ICO 文件中,并在 .product 文件中提供。
但请注意,一些可以创建 ICO 文件的图像处理应用程序默认倾向于压缩 256x256x32 图像。这就是让我们走错路的原因!
因此请注意 ICO 文件中的所有图像都未压缩。