我开始了解Android应用程序,其源代码大约为18 MB,实际应用程序大小为2.8 MB。为什么会这样?
答案 0 :(得分:4)
Java代码被转换为更简洁的字节代码。例如
int httpServerPortToUse = 58000; // (32 bytes of source code)
转换为以下字节代码
iconst_58000 // (1 byte for opcode + 4 bytes for integer = 5 bytes)
在此示例中,java字节代码比java源代码小6倍以上。
答案 1 :(得分:2)
编译器删除了我们阅读它所需的大量代码数据/可视化表示。有关Android如何编译代码的信息,请参阅this。
有趣的事实:你知道Rollercoaster Tycoon完全是用汇编代码写的吗?
答案 2 :(得分:0)
除了已发布的答案外,每个空格,制表符,换行符和注释都会占用源代码中的空格。所有这些都被编译器删除,因为它对功能都没用。
此外,.apk文件是一种zip存档文件,因此它们在编译器之上压缩,删除数据。 [1]
答案 3 :(得分:0)
这是你提到的一个有趣的事实。
我总是发现未编译的源代码比输出应用程序文件小。
然而,在你的情况下,它可能并不总是如此。编译器可以在编译之前优化和最小化源代码。
有人可以写
souce_code_1.c
#include <stdio.h>
int main()
{
printf("Hello World");
return(0);
}
souce_code_2.c
#include <stdio.h>
int main()
{
printf
("Hello World");
return(0);
}
这里,souce_code_2.c肯定会比souce_code_1.c的大 但是,如果你编译它们并检查你会注意到可执行文件的大小几乎相同。
为什么这样开心呢?
艰难的souce_code_1.c和souce_code_2.c产生相同的输出,souce_code_2.c有许多元素并不真正有助于代码的输出。编译器摆脱了所有这些元素。
这是一个非常简单的例子,但还有更多。 如果您对如何从源编译可执行文件感兴趣,请阅读Principles of Compiler Design