- Что.DeX файлы в Android?
- 4 ответов
- Как устроен билд APK файла внутри
- Процесс создания APK и компиляции кода
- Рассматриваемые темы
- Архитектура процессоров и зачем нужна виртуальная машина
- Понимание Java виртуальной машины
- Андроид виртуальная машина
- Комплияция в .dex файл
- ART против Dalvik
- Каждый этап описанного процесса
- Source Code (Исходный код)
- Resource Files
- AIDL Files
- Library Modules
- AAR Libraries
- JAR Libraries
- Android Asset Packaging Tool
- resources.arsc
- D8 и R8
- Dex and Multidex
- Что такое .dex-файлы в Android?
Что.DeX файлы в Android?
У меня есть несколько вопросов по поводу DeX файлы
- что это dex файл в Android?
- как dex работает для Android?
- как они используются при отладке приложения для Android?
- они похожи на файлы классов Java?
Мне нужна конкретная информация, пожалуйста, помогите в этом, и любые реальные примеры приветствуются!
4 ответов
об .файл dex:
одна из самых замечательных особенностей Dalvik Virtual Machine (рабочая лошадка в системе Android) заключается в том, что она не использует байт-код Java. Вместо этого был введен доморощенный формат DeX, и даже инструкции байт-кода не совпадают с инструкциями байт-кода Java.
Android программы компилируются в .dex (исполняемый файл Dalvik) файлы, которые, в свою очередь, сжаты в один на устройство. .dex файлы могут быть созданы с помощью автоматического перевода, скомпилированных приложений, написанных на языке программирования Java.
формат файла Dex:
Android имеет документацию на Dalvik Executable Format (.Декс!—15—> файлы). Вы можете узнать больше в официальных документах:Формат Файла Dex
.dex файлы похожи на файлы классов java, но они были запущены под Dalkvik Virtual (DVM) на старые версии Android и скомпилированы во время установки на устройстве в собственный код с искусством на новых версиях Android.
вы можете decompile .Декс с помощью dexdump инструмент, который предоставляется в Android-sdk.
есть также некоторые Методы Обратного Проектирования сделать jar file или java class file С .
скомпилированный файл кода приложения Android.
программы для Android компилируются .DeX (Dalvik Executable) файлы, которые, в свою очередь, молнии в один .apk файл на устройстве. .файлы dex могут быть созданы автоматически Android, путем перевода скомпилированных приложений, написанных на языке программирования Java.
dex файл-это файл, который выполняется на виртуальной машине Dalvik.
Dalvik VM включает в себя несколько функций для оптимизации производительности, проверки и мониторинга, одним из которых является исполняемый файл Dalvik (DEX).
исходный код Java компилируется компилятором Java в .class файлы. Тогда dx (dexer) инструмент, часть Android SDK обрабатывает .class файлы в формате файла с именем DEX который содержит байтовый код Dalvik. The dx инструмент устраняет всю избыточную информацию, которая присутствует в классах. В DEX все классы приложения упакованы в один файл. В следующей таблице приводится сравнение размеров кода для JVM jar-файлов и файлов, обрабатываемых .
таблица сравнивает размеры кода для системных библиотек, приложений веб-браузера и приложения общего назначения (приложение будильника). Во всех случаях DeX tool уменьшил размер кода более чем на 50%.
в стандартных средах Java каждый класс в коде Java приводит к одному . Это означает, что если файл исходного кода Java имеет один открытый класс и два анонимных класса, скажем, для обработки событий, то компилятор java создаст всего три .class файлы.
шаг компиляции одинаковый на платформе Android, что приводит к нескольким .class файлы. Но после .class генерируются файлы, используется инструмент » dx чтобы преобразовать все .class файлы в один .dex , или исполняемый файл Dalvik. Это .dex файл, который выполняется на виртуальной машине Dalvik. The .dex файл был оптимизирован для использования памяти, и дизайн в первую очередь определяется обменом данными.
файл класса здесь содержит стандартный байт-код Oracle JVM.
[ ФАЙЛ КЛАССА JAVA ] > [ ФАЙЛ КЛАССА DEX ]
с тех пор, java .файл класса содержит стандартный байт-код JVM. Но Android-устройства не используют этот формат байт-кода. Вместо этого Android имеет свой собственный формат байтового кода, называемый Dalvik. Байт-коды Dalvik, как и байт-коды Oracle JVM, являются инструкциями машинного кода для теоретического процессора.
в процесс компиляции необходимо преобразовать .файлы классов и любые другие .библиотеки jar в один класс.файл dex, содержащий байт-коды Dalvik. Команда dx сшивает все .класс и. JAR-файлы вместе в один класс.файл dex, написанный в формате байт-кода Dalvik.
Итак, это преобразование .класс и. jar файлы В.файлы dex называются компиляцией Dex, а полученные таким образом файлы называются файлами Dex.
Источник
Как устроен билд APK файла внутри
Процесс создания APK и компиляции кода
Рассматриваемые темы
- Архитектура процессоров и необходимость для виртуальной машины
- Понимание Java виртуальной машины
- Компиляция исходного кода
- Виртуальная машина Андроид
- Процесс компиляции в .dex файл
- ART против Dalvik
- Описание каждой части билд процесса
- Исходный код
- Файлы ресурсов
- AIDL файлы
- Модули библиотек
- AAR библиотеки
- JAR библиотеки
- Android Asset Packaging Tool
- resources.arsc
- D8 и R8
- Dex и Multidex
- Подписывание APK файла
- Ссылки
Понимание флоу процесса билда APK файла, среда исполнения и компиляция кода
Этот пост нацелен быть отправной точкой для разработчиков, чтобы они ближе познакомились с билд процессом и созданием APK файла.
Архитектура процессоров и зачем нужна виртуальная машина
Андроид после того как вышел в 2007 году претерпел множество изменений связанный с билд процессом, средой исполнения и улучшениями производительности.
У андроида много удивительных характеристик и одна из них разные архитектуры процессоров такие как ARM64 и x86
Невозможно скомпилировать код, который поддерживает каждую архитектуру. Вот именно поэтому используется Java виртуальная машина.
Понимание Java виртуальной машины
JVM это виртуальная машина, позволяющая устройству запускать код, который скомпилирован в Java байткод
Используя JVM, вы избавляетесь от проблемы с разной архитектурой процессоров.
JVM предоставляет переносимость и она позволяет запускать Java код в виртуальной среде, вместо того, чтобы запускать его сразу «на железе»
Но JVM была создана для систем с большими мощностями по ресурсам, а наш андроид имеет сравнительно мало памяти и заряда батареи.
По этой причине Google создал адаптированную под андроид виртуальную машину, которая называется Dalvik.
Компилируем исходный код
Наш исходный Java код для андроида компилируется в класс файл .class с байткодом с помощью javac компилятора и запускается на JVM
Для котлина есть kotlinc компилятор, который делает совместимый с Java байткод.
Байткод — это набор инструкций, который выполняется на целевом устройстве.
Java байткод — это набор инструкций для Java виртуальной машины.
Андроид виртуальная машина
Каждое андроид приложение работает на своей виртуальной машине. С версий 1.0 до 4.4, это был Dalvik. В андроид 4.4, вместе с Dalvik, Google представил в качестве эксперимента новый андроид runtime, который назывался ART
Сгенерированный класс файл .class содержит JVM Java байткод.
Но у андроида есть свой собственный оптимизированный формат байткода, который называется Dalvik bytecode — это просто инструкции машинного кода для процессора также как и JVM байткод.
Комплияция в .dex файл
Во время компиляции происходит конвертация .class класс файл и .jar библиотеки в один classes.dex файл, который содержит Dalvik байткод.
Команда dx превращает все .class и .jar файлы в один classes.dex файл, который написан с форматом Dalvik байткода.
Dex — это аббревиатура с английского — Dalvik Executable.
ART против Dalvik
C версии 4.4 андроид мигрировал на ART. ART также работает с .dex файлом.
Преимущество ART над Dalvik проявляется в том, что приложения запускаются быстрее, потому что весь DEX байткод транслируется в машинный код во время установки, не нужно дополнительного времени на компиляцию в рантайме.
ART и Dalvik совместимы, так что приложения разработанные для Dalvik должны работать и на ART.
Компиляция Dalvik (JIT- just in time) имела такие минусы как — быстрая трата батареи, лаги в приложениях и плохой перформанс. В Dalvik трансляция происходит только когда это нужно. Мы открываем новый экран и только в этот момент происходит трансляция, за счет этого установка происходит быстрее, но при этом проседает перформанс.
Это причина по которой Google сделал Android Runtime (ART).
ART — основан на AOT (ahead of time) компиляции, она происходит до того как приложение запустится.
В ART компиляция происходит во время установки приложения. Это ведет к более долгому времени установки, но уменьшает трату батареи и избавляет от лагов, которые были на Dalvik.
Несмотря на то, что Dalvik был заменен на ART, .dex формат файлов еще используется
В андроид 7.0 JIT вернулся. Гибридная среда сочетает фичи как от JIT компиляции так и
от ART
Среда запуска байткода это очень важная часть андроида и она вовлечена в процесс запуска и установки приложения
Каждый этап описанного процесса
Source Code (Исходный код)
Это Java и Kotlin файлы в src пакете.
Resource Files
Файлы находящиеся в директории с ресурсами
AIDL Files
AIDL — аббревиатура Android Interface Definition Language, позволяет вам описать интерфейс межпроцессорного взаимодействия.
AIDL — может использоваться между любыми процессами в андроиде.
Library Modules
Модули библиотек содержат Java или Kotlin классы, компоненты андроида и ресурсы.
Код и ресурсы бибилотеки компилируются и пакуются вместе с приложением.
Поэтому модуль библиотеки может считаться компайл тайм артефактом.
AAR Libraries
Андроид библиотеки компилируются в AAR — android archive файл, который вы можете использовать как зависимость для вашего android app модуля.
AAR файлы могут содержать андроид ресурсы и файл манифеста, что позволяет вам упаковать туда общие ресурсы такие как layouts и drawables в дополнение к Java или Kotlin классам и методам.
JAR Libraries
JAR это Java библиотека и в отличие от AAR она не может содержать андроид ресурсы и манифесты.
Android Asset Packaging Tool
AAPT2 — аббревиатура (Android Asset Packaging Tool) — компилирует манифест и файлы ресурсов в один APK.
Этот процесс разделен на два шага компиляцию и линковку Это улучшает производительность так как если вы поменяете один файл, вам нужно компилировать только его и прилинковать к остальным файлам командой ‘link’
AAPT2 может компилировать все типы андроид ресурсов, таких как drawables и XML файлы.
При вызове AAPT2 для компиляции, туда передается по одному ресурсному файлу на каждый вызов
Затем APPT2 парсит файл и генерирует промежуточный бинарный файл с расширением .flat
Фаза линковки склеивает все промежуточные файлы сгенерированные в фазе компиляции и дает нам на выход один .apk файл. Вы также можете сгенерировать R.java файл и правила для proguard в это же время.
resources.arsc
Полученный на выходе .apk файл не включает в себя DEX файл, APK не подписан и не может быть запущен на устройстве.
APK содержит AndroidManifest, бинарные XML файлы и resources.arsc
resource.arsc содержит всю мета информацию о ресурсах, такую как индексы всех ресурсов в пакете
Это бинарный файл и APK который может быть запущен. APK который вы обычно создаете и запускаете не сжат и может быть использован просто посредством размещения в памяти.
R.java файл это выходной файл вместе с APK ему назначен уникальный id, который позволяет Java коду использовать ресурсы во время компиляции.
arsc это индекс ресурса который используется во время запуска приложения
D8 и R8
Начиная с андроид студии 3.1 и далее, D8 был сделан дефолтным компилятором.
D8 производит более маленькие dex файлы с лучшей производительностью, если сравнивать со старым dx.
R8 используется для компиляции кода. R8 это оптимизированная версия D8
D8 играет роль конвертера класс файлов в Dex файлы, а также производит дешугаринг функций из Java 8 в байткод, который может быть запущен на андроиде
R8 оптимизирует dex байткод. Он предоставляет такие фичи как оптимизация, обфускация, удаление ненужных классов.
Обфускация уменьшает размер вашего приложения укорачивая названия классов, методов и полей.
Обфускация имеет и другие преимущества для предотвращения реверс инжиниринга, но основная цель уменьшить размер.
Оптимизация уменьшает размер Dex файла путем переписывания ненужных частей кода и инлайнинга.
С помощью дешугаринга мы можем использовать удобные фичи языка Java 8 на андроиде.
Dex and Multidex
R8 дает на выходе один DEX файл, который называется classes.dex
Если количество методов приложения переваливает за 65,536, включая подключенные библиотеки, то произойдет ошибка при билде
Источник
Что такое .dex-файлы в Android?
У меня есть некоторые вопросы относительно файлов dex
- Что такое файл dex в Android?
- Как работает dex для Android?
- Как они используются при отладке приложения для Android?
- Являются ли они похожими на файлы классов java?
Мне нужна конкретная информация, пожалуйста, помогите в этом, и любые реальные примеры приветствуются!
Скомпилированный файл кода приложения Android.
Программы Android скомпилированы в файлы .dex (Dalvik Executable), которые, в свою очередь, заархивированы в один файл .apk на устройстве. .dex файлы могут быть созданы автоматически Android, путем перевода скомпилированных приложений, написанных на языке программирования Java.
О файле .dex:
Одна из самых замечательных особенностей Dalvik Virtual Machine (рабочая лошадка в системе Android) заключается в том, что она не использует байт-код Java. Вместо этого был введен домашний формат DEX, и даже инструкции байт-кода не совпадают с инструкциями байт-кода Java.
Программы Android скомпилированы в .dex (Dalvik Executable), которые, в свою очередь, заархивированы в один файл .apk на устройстве. .dex файлы могут быть созданы путем автоматического перевода скомпилированных приложений, написанных на языке программирования Java.
Формат файла Dex:
Android имеет документацию по Dalvik Executable Format файлу Dalvik Executable Format (файлы .dex ). Вы можете узнать больше в официальных документах: Dex File Format
.dex файлы похожи на файлы классов java, но они работают под управлением DVM .
Вы можете decompile .dex, используя инструмент dexdump , который предоставляется в android-sdk.
Существуют также некоторые обратные инженерные методы, чтобы сделать jar file или java class file из файла .dex .
Файл dex – это файл, который выполняется на VM Dalvik.
Dalvik VM включает в себя несколько функций для оптимизации производительности, проверки и мониторинга, одним из которых является Dalvik Executable (DEX) .
Исходный код Java скомпилирован компилятором Java в .class . Затем инструмент dx (dexer), входящий в состав Android SDK, обрабатывает .class в формате файлов DEX который содержит байт-код Dalvik. Инструмент dx устраняет всю избыточную информацию, присутствующую в классах. В DEX все классы приложения упаковываются в один файл. В следующей таблице приведено сравнение размеров кода для jar-файлов JVM и файлов, обработанных инструментом dex .
В таблице сравниваются размеры кода для системных библиотек, приложений веб-браузера и приложения общего назначения (приложение для будильника). Во всех случаях инструмент dex уменьшает размер кода более чем на 50%.
В стандартных средах Java каждый класс в Java-коде приводит к одному .class файлу. Это означает, что если файл исходного кода Java имеет один открытый класс и два анонимных класса, скажем, для обработки событий, тогда java-компилятор создаст всего три файла .class .
Шаг сборки такой же на платформе Android, что приводит к нескольким файлам .class . Но после создания файлов .class инструмент «dx» используется для преобразования всех файлов .class в один .dex или Dalvik Executable. Это файл .dex который выполняется на VM Dalvik. Файл .dex оптимизирован для использования памяти, и дизайн в первую очередь определяется совместным использованием данных.
Источник