Ответ 1
Когда вы создаете код приложения, файл apk содержит файл.dex, который содержит двоичный байт-код Dalvik. Это формат, который платформа действительно понимает. Тем не менее, это не так просто читать или изменять двоичный код, поэтому есть инструменты для преобразования в читаемое представление и из него. Самый обычный читаемый для человека формат известен как Смали. Это по сути то же самое, что вы упомянули об этом.
Например, скажем, у вас есть Java-код, который делает что-то вроде
int x = 42
Предполагая, что это первая переменная, тогда код dex для метода, скорее всего, будет содержать шестнадцатеричную последовательность
13 00 2A 00
Если вы запустите baksmali, вы получите текстовый файл, содержащий строку
const/16 v0, 42
Это, очевидно, намного более читаемый, чем двоичный код. Но платформа ничего не знает о smali, это просто инструмент, облегчающий работу с байт-кодом.
Dalvik и ART берут файлы.dex, содержащие байт-коды dalvik. Он полностью прозрачен для разработчика приложений, единственное отличие - это то, что происходит за кулисами, когда приложение установлено и запущено.