I tried searching for an answer to this, but why is the compiled size of my watch faces so different between different target devices. The same watch face using the same resources (same code base) is about half the size when compiled for the Fenix3 vs the Vivoactive. Why is that? I have also seen the simulator say that it is out of memory when running on the vivoactive but it is ok on the Fenix 3 when running the same code. I built the code and put it on an actual vivoactive and it ran fine. Is this a known issue?
Are you sure everything is the same? Like the fonts and images you're using? Custom fonts are something that will really increase the size of a .prg. Even with the same font, in one build are you just using 0-9 and in the other 0-9 and a-z?
In the simulator, what are the memory size with the two different devices (as seen on the bottom line of the simulator)? Is it fairly static, or does it keep increasing?
Are you using any images? The va is 64 color, while the f3 is 16 color - I've not tested it, but part of the compile process could be to convert the image for display, so maybe the image for the va is cut to 64, while the same image for the f3 is cut to 16
I think it is the images. I am using some and I did not realize until recently that the Fenix 3 is limited to 16 colors. That has got to be the reason for the size difference.
As far as the memory usage the F3 is showing 12k and steady not increasing. On the VA it is also showing 12k and not increasing but it is not showing all of my images because it claims to be out of memory. The two versions are using the same code base, it just draws things in different locations based on the watch it is running on. All of the image resources are identical except the main background image. I originally only had it running on the VA and the 920's so none of the code for the round watches as there, in that form it ran fine in the simulator no out of memory issues. The main background image for the round watches is bigger (because of the 218x218 res on those) but it should not be getting loaded during runtime as the code checks if it is a round watch before loading that resource unless there is some resource loading that happens even when it is not called in the code.
The differences in size are indeed because of the differences in image sizes. The VivoActive supports the full 64 color range of the display, and the Fenix 3 uses a paletted color set with only 16 colors. This causes images on the VivoActive (and Epix) to compile 2x bigger than images on the Fenix 3 (and 920XT) by default. The images on VivoActive should also look better (depending on the image). You can specify a palette for the resource compiler to use when building an image to reduce the memory footprint of that image. If for the VivoActive, you specify 15 colors or less (transparent is reserved) then the images will compile to the same size as they do on the Fenix 3.