На ранних версиях Андроида приложение могло иметь только один .dex-файл. Проблема 64К ограничивала количество методов в приложении.
Почему ограничение в 65536 методов, а проблема называется 64K?
«K» значит Kilo, что в computer science значит
1024*x
. 1024*64 = 65536
.Почему возникла эта проблема?
Один класс в Java может иметь максимум 64К методов.
В Андроиде .dex-файл сделан по образу .class и поэтому наследует это ограничение.
Причина ограничения в том, что под индексы ссылок на методы в java- и dalvik-байткоде выделено 16 бит. Т.е. максимальное число
2^16 = 65536
.Как решать проблему?
На ранних версиях Андроида единственным решением было уменьшение количества методов. Для этого использовался Proguard.
Сейчас проблема решается включением Multidex. В этом случае приложение может иметь более одного .dex-файла.