Подтвердить что ты не робот

Роль файла classes.dex в файле apk

При открытии файла apk с помощью winrar (s/w для открытия сжатых файлов). Я получил кучу файлов, упакованных в apk. Среди них class.dex - один. Мой вопрос в том, какова роль этого файла, и если мы изменим/удалим тот же файл, это повлияет на apk?

4b9b3361

Ответ 1

Чтобы создать файл APK, сначала скомпилируется программа для Android, а затем все ее части упакованы в один файл. Это содержит весь этот программный код (это .dex files), ресурсы, активы, сертификаты и файл манифеста.

Программы обычно записываются в Java и скомпилированы в bytecode. Затем они преобразуются из файлов Java Virtual Machine-compatible .class files в Dalvik-compatible .dex (Dalvik Executable) перед установкой на устройство. Компактный формат Dalvik Executable предназначен для систем, которые ограничены с точки зрения памяти и скорости процессора.

  • classes.dex: классы, скомпилированные в формате файла dex, понятные виртуальной машине Dalvik

Поскольку файлы .dex содержат ресурсы APK, любое редактирование этих файлов будет напрямую влиять на APK.

Ответ 2

.dex файл Скомпилированный файл кода приложения Android.

Из API API API

Программы Android скомпилированы в файлы .dex (Dalvik Executable), которые, в свою очередь, превращаются в один файл .apk на устройстве..dex файлы могут быть созданы путем автоматического перевода скомпилированных приложений, написанных на языке программирования Java.

И да, если вы удалите эти файлы, это повлияет на APK.

Ответ 3

classes.dex - это, по сути, вся логика приложения. Код данного приложения пишется на Java, а затем компилируется в файлы классов, затем эти файлы классов кросс-компилируются (с большим количеством оптимизаций) в формат dalvik VM. Обратите внимание, что также могут быть некоторые файлы .so, которые также являются кодом приложения, но они генерируются при использовании NDK. Вы не можете удалить этот файл. Однако вы можете изменить его, сначала запустив эту утилиту https://github.com/JesusFreke/smali, которая будет генерировать код smali из этого скомпилированного dex, который в некоторой степени похож на java и понятен. Вы также можете использовать инструменты ApkOneClick или ApkMultiTool для получения исходного кода Java из файлов smali, но они, вероятно, не будут идеальными и потребуют дальнейшего исправления. Когда вы изменяете нужный код, вы должны снова собрать файл classes.dex и поместить его в имеющийся у вас zip/apk файл. Обратите внимание, что тогда существующие файлы сертификатов (META-INF) больше не будут действительны, и вам нужно будет удалить эту папку и переустановить пакет apk, чтобы установить его на телефон или эмулятор.

Для получения дополнительной информации вы также можете проверить этот вопрос. Что такое файлы .dex в Android?

Также это отличное руководство по разборке dex файлов с использованием существующих инструментов http://blog.vogella.com/2011/02/14/disassemble-android-dex

Ответ 4

Какова роль этого файла?

Роль classes.dex в Android аналогична роли JAR файлов в простой Java. Это файл, содержащий байт-коды. В случае Android байт-код - это байт-код Dalvik, который отличается от байт-кода Java.

Если мы модифицируем/удаляем один и тот же файл, это будет влиять на apk?

Если вы изменяете classes.dex, вы изменяете поведение программ, которые могут или не могут работать после переупаковки. Если вы удалите classes.dex, то ваше приложение не имеет кода, и вы не должны ожидать его работы.

Ответ 5

.dex файл в apk - это файл сжатия, который состоит из всех классов java в коде приложения. Его отличие от файла jar. Файл jar представляет собой коллекцию файлов .class, которые изолированы. Если мы распакуем .jar, мы получим все классы отдельно. С другой стороны,.dex файл - это один файл, состоящий из всего .class файла из кода приложения.

Копирование компиляции: несколько файлов .java → несколько файлов .classes → один .dex файл

.dex файлы - это исполняемые файлы, которые выполняются DVM... Dalvik Virtual Machine, которая является исполняемой версией для Android.

.dex никогда не будет включать ресурсы. Ресурсы отдельно сохраняются в папке /res в .apk