Что такое dex файлы в андроид

Обновлено: 17.05.2024

Конвертируя файл в другое расширение файлов Вы сможете воспользоваться другими программами для его обслуживания. Но не следует забывать, что файл APK после конвертирования в DEX может немного отличаться от оригинала, например размещением данных. Самая важнейшая информация должна сохранится, но если Вы заинтересованы в том, чтобы файл, после конвертирования из APK в DEX был идентичен, Вы должны действовать рассудительно и выбрать соответствующее приложение из списка ниже. Это не гарантирует выполнения конвертирования на 100% соответствующего Вашим ожиданиям, но все же может сильно помочь. Если все-таки эффект конвертирования файла APK в DEX не выполнил Ваших ожиданий, Вы можете попробовать найти в интернете другую версию Вашего файла в формате APK, раньше уже правильно конвертированную кем то другим в файл DEX. Если у вас это не получится, воспользуйтесь информацией, представленной в дальнейшей части.

Программы для конвертирования APK в DEX:

Другие возможные конвертирования файлов APK

Если после проведения конвертирования файла APK Вы не получили соответствующего результата, Вы можете попробовать изменить формат файла APK в другой чем DEX. На нашем сайте Вы найдете также информацию о следующих возможностях конвертирования:

Конвертирование файла с расширением APK в другой формат
Какие еще есть возможности?

К сожалению, если после выполнения двух ранее описанных действий (попыток найти свои файлы APK конвертированный кем то другим, и попытки его самостоятельного конвертирования в формат DEX) по-прежнему остается проблема с файлом, то решений остается немного. Вы можете еще раз попробовать поискать и установить приложение, которое сможет открыть файл APK в оригинальном формате (без конвертирования в файл DEX. Такое решение будет трудным для выполнения, но без сомнения принесет наилучший результат.

Несколько файлов dex определяют Landroid/поддержка/v4/ в Android studio

я могу integrate (add & work) with many libraries .

а ActionBarSherlock библиотека, у меня так много проблем с ней.

Первый Вопрос популярный вопрос Multiple dex files define ,

я знаю duplicated android-support-v4.jar вызывает его, но я не могу решить эту проблему сейчас:

я последовал за ответ ошибка. Он использовал:

но я получил Второй Вопрос : unsupported Gradle DSL method found: 'exclude()'! ошибка. Поэтому я изменился build.gradle из main module такой:

Solved Второй Вопрос но все равно Первый Вопрос Multiple dex files define ошибка.

я прочитал много тем, но не могу решить Первый Вопрос теперь

пожалуйста, помогите мне,

p / s : Я могу синхронизировать с Gradle успешно, но при запуске он становится выше ошибок.

я использовал Android studio 0.5.5

редактировать

build.gradle of ActionBarSherlock , он имеет только один android-support-v4.jar :

@Garbriele: я обновил новый вопрос, показать build.gradle of project и build.gradle of main module build.gradle of project :

build.gradle of main module после того, как отредактировал :

я получил эту ошибку ниже :

enter image description here

Хорошо, спасибо за @Garbriele комментарий, я уже исправил это, используя это:

правка 2 когда я так ставлю:

все еще get Первый Вопрос Multiple dex files define ошибка.

Расширение файла DEX

Rozszerzenie DEX - это исполняемый формат файла, используемый Dalvik. DEX-файл содержит скомпилированный код для выполнения в системной среде Android. Файлы DEX могут интерпретироваться виртуальной машиной Dalvik.

DEX файлы в пакетах APK

Файлы DEX обычно находятся в пакетах APK , которые используются для установки нового программного обеспечения в Android. Каждый APK-файл содержит один DEX-файл classes.dex , в котором хранятся все классы и методы, используемые данным приложением.

Дополнительная информация

DEX-файл может быть создан автоматически или вручную путем передачи скомпилированных программ Java интерпретатору.

Программы, которые поддерживают DEX расширение файла

В следующем списке перечислены программы, совместимые с файлами DEX, которые разделены на категории 4 в зависимости от операционной системы, в которой они доступны. Файлы с расширением DEX, как и любые другие форматы файлов, можно найти в любой операционной системе. Указанные файлы могут быть переданы на другие устройства, будь то мобильные или стационарные, но не все системы могут быть способны правильно обрабатывать такие файлы.

Программы, обслуживающие файл DEX

Updated: 02/21/2020

Как открыть файл DEX?

Проблемы с доступом к DEX могут быть вызваны разными причинами. К счастью, наиболее распространенные проблемы с файлами DEX могут быть решены без глубоких знаний в области ИТ, а главное, за считанные минуты. Мы подготовили список, который поможет вам решить ваши проблемы с файлами DEX.

Шаг 1. Скачайте и установите Google Android SDK
Шаг 2. Проверьте версию Google Android SDK и обновите при необходимости

Update software that support file extension DEX

Если у вас уже установлен Google Android SDK в ваших системах и файлы DEX по-прежнему не открываются должным образом, проверьте, установлена ли у вас последняя версия программного обеспечения. Разработчики программного обеспечения могут реализовать поддержку более современных форматов файлов в обновленных версиях своих продуктов. Причиной того, что Google Android SDK не может обрабатывать файлы с DEX, может быть то, что программное обеспечение устарело. Все форматы файлов, которые прекрасно обрабатывались предыдущими версиями данной программы, также должны быть открыты с помощью Google Android SDK.

Шаг 3. Свяжите файлы Dalvik Executable Format с Google Android SDK

После установки Google Android SDK (самой последней версии) убедитесь, что он установлен в качестве приложения по умолчанию для открытия DEX файлов. Процесс связывания форматов файлов с приложением по умолчанию может отличаться в деталях в зависимости от платформы, но основная процедура очень похожа.

Associate software with DEX file on Windows

Изменить приложение по умолчанию в Windows

  • Нажатие правой кнопки мыши на DEX откроет меню, из которого вы должны выбрать опцию Открыть с помощью
  • Выберите Выбрать другое приложение → Еще приложения
  • Наконец, выберите Найти другое приложение на этом. , укажите папку, в которой установлен Google Android SDK, установите флажок Всегда использовать это приложение для открытия DEX файлы свой выбор, нажав кнопку ОК

Изменить приложение по умолчанию в Mac OS

Шаг 4. Убедитесь, что файл DEX заполнен и не содержит ошибок

Если проблема по-прежнему возникает после выполнения шагов 1-3, проверьте, является ли файл DEX действительным. Проблемы с открытием файла могут возникнуть по разным причинам.

Check DEX file for viruses

1. DEX может быть заражен вредоносным ПО - обязательно проверьте его антивирусом.

Если файл заражен, вредоносная программа, находящаяся в файле DEX, препятствует попыткам открыть его. Сканируйте файл DEX и ваш компьютер на наличие вредоносных программ или вирусов. Если файл DEX действительно заражен, следуйте инструкциям ниже.

2. Проверьте, не поврежден ли файл
3. Убедитесь, что у вас есть соответствующие права доступа

Некоторые файлы требуют повышенных прав доступа для их открытия. Войдите в систему, используя учетную запись администратора, и посмотрите, решит ли это проблему.

4. Убедитесь, что ваше устройство соответствует требованиям для возможности открытия Google Android SDK

Если в системе недостаточно ресурсов для открытия файлов DEX, попробуйте закрыть все запущенные в данный момент приложения и повторите попытку.

5. Убедитесь, что у вас установлены последние версии драйверов, системных обновлений и исправлений

Регулярно обновляемая система, драйверы и программы обеспечивают безопасность вашего компьютера. Это также может предотвратить проблемы с файлами Dalvik Executable Format. Возможно, файлы DEX работают правильно с обновленным программным обеспечением, которое устраняет некоторые системные ошибки.

Как устроен билд APK файла внутри


Андроид после того как вышел в 2007 году претерпел множество изменений связанный с билд процессом, средой исполнения и улучшениями производительности.

У андроида много удивительных характеристик и одна из них разные архитектуры процессоров такие как ARM64 и x86

Невозможно скомпилировать код, который поддерживает каждую архитектуру. Вот именно поэтому используется Java виртуальная машина.

image

Понимание Java виртуальной машины

JVM это виртуальная машина, позволяющая устройству запускать код, который скомпилирован в Java байткод

Используя JVM, вы избавляетесь от проблемы с разной архитектурой процессоров.

JVM предоставляет переносимость и она позволяет запускать Java код в виртуальной среде, вместо того, чтобы запускать его сразу «на железе»

Но JVM была создана для систем с большими мощностями по ресурсам, а наш андроид имеет сравнительно мало памяти и заряда батареи.

По этой причине Google создал адаптированную под андроид виртуальную машину, которая называется Dalvik.

image

Компилируем исходный код

image

Наш исходный 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 байткод.

image

Комплияция в .dex файл

Во время компиляции происходит конвертация .class класс файл и .jar библиотеки в один classes.dex файл, который содержит Dalvik байткод.

Команда dx превращает все .class и .jar файлы в один classes.dex файл, который написан с форматом Dalvik байткода.

Dex — это аббревиатура с английского — Dalvik Executable.

image

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

Среда запуска байткода это очень важная часть андроида и она вовлечена в процесс запуска и установки приложения

image

Каждый этап описанного процесса

image

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 это индекс ресурса который используется во время запуска приложения

image

D8 и R8

Начиная с андроид студии 3.1 и далее, D8 был сделан дефолтным компилятором.

D8 производит более маленькие dex файлы с лучшей производительностью, если сравнивать со старым dx.

R8 используется для компиляции кода. R8 это оптимизированная версия D8

D8 играет роль конвертера класс файлов в Dex файлы, а также производит дешугаринг функций из Java 8 в байткод, который может быть запущен на андроиде

R8 оптимизирует dex байткод. Он предоставляет такие фичи как оптимизация, обфускация, удаление ненужных классов.

Обфускация уменьшает размер вашего приложения укорачивая названия классов, методов и полей.

Обфускация имеет и другие преимущества для предотвращения реверс инжиниринга, но основная цель уменьшить размер.

Оптимизация уменьшает размер Dex файла путем переписывания ненужных частей кода и инлайнинга.

С помощью дешугаринга мы можем использовать удобные фичи языка Java 8 на андроиде.

image

Dex and Multidex

R8 дает на выходе один DEX файл, который называется classes.dex

Если количество методов приложения переваливает за 65,536, включая подключенные библиотеки, то произойдет ошибка при билде</b

The method ID range is 0 to 0xFFFF.

Другими словами, вы можете ссылаться на 65,536, или от 0 до. 65,535, если говорить цифрами

Чтобы избежать этого, нужно внимательно следить за зависимостями своего проекта и использовать R8, чтобы удалять неиспользуемый код, или включать мультидекс (multidex)

image

Подписывание APK файла

Все Apk файлы требуют цифровую подпись до того как они могут быть установлены на ваш девайс

Для дебаг билдов, андроид студия автоматически подписывает приложение используя дебажный сертификат сгенерированный с помощью android sdk tools.

Дебажный кейстор и дебажный сертификат создаются автоматически

Для релиз билдов вам нужен кейстор, которым вы подпишете свой apk файл. Вы можете создать APK файл в андроид студии через «Generated Signed Apk» опцию.

Читайте также: