Putting them in resources in the jar sounds more space conscious to me.
Final data uses heap space the same as all other data. If it's final static then it will be part of the class loaded into the heap, and if it's just final (and not static) then it will take up heap space in every instance of the class you create.
On top of that, when you declare a static array like this:
Code:
static final int[] array = {1,2,3,4,5,6,7,8,9,10}
the code will compile into something like this:
Code:
static final int[] array = new int[10];
array[0] = 1;
array[1] = 2;
// ...
array[9] = 10;
So not only you don't save any heap space with the array (since it is stored in the heap), you also make your class bigger with all that extra code (and the class also takes up space from the heap).
If you save it in a resource, then you'll need a method to take it out of the jar, but that same method will be able to expand all of the arrays (instead of having that code listing above of every one of the arrays). So if you have more than one or two of these arrays it is much better.
When an app is ran on a phone, is the complete JAR file decompressed to the phones internal memory or just the class files?
This would be implementation dependant, but in most cases I don't think the whole jar is uncompressed.
shmoove