Как скомпилировать apk файл
Перейти к содержимому

Как скомпилировать apk файл

  • автор:

Как устроен билд 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» опцию.

Декомпиляция и Компиляция APK приложения Android (Видео)

Для того чтобы редактировать APK приложения. Прежде всего их нужно декомпилировать, а после скомпилировать! Как это сделать и чем можно узнать в этом уроке.

В прошлом уроке вы узнали из чего состоят основные внутренности приложения, а также что данные что APK приложения (в дальнейшем просто APK) можно открыть архиватором, но что либо изменить у вас не получиться! Нужна Декомпиляция APK приложения Android!

Содержание:

  1. Необходимые инструменты
  2. Настройка
  3. Декомпиляция приложения с помощью Apktool через командную строку
  4. Компиляция приложения с помощью Apktool через командную строку
  5. Что необходимо чтобы работать с системными APK
  6. Графические надстройки утилиты ApkTool

Декомпиляция и Компиляция APK приложения Android
Необходимые компоненты

    — среда разработки; — программа декомпилятор; — bat файл; — подпись приложения APK.

Настройка Java

После установки Java JDK , необходимо, добавить ее в переменную Windows. Если кто не понял официальное куроводство то,

декомпиляция apk

Скопируйте путь Java JDK:

Перейдите в меню Дополнительные настройки:

декомпиляция apk

(Мой) Компьютер ->Свойства системы->Дополнительные параметры системы->Дополнительно->Системные переменные->Правка

Java JDK настроена!

Настройка ApkTool

  1. Создать папку на диске C:\ и в нее переместить файлы apktool_x_x.jar и apktool.bat
  2. Файл apktool_x_x.jar переименовать в apktool.jar

Если появилось наподобие такой вывод информации, то все сделано правильно.

Декомпиляция APK

Чтобы декомпилировать приложение, скопируйте файл APK приложения в папку где находится apktool, далее необходимо выполнить вот что, в командной строке ввести команду:

apktool d название.apk

apktool d browser.apk

Декомпиляция и Компиляция APK приложения Android

Декомпиляция APK завершена.

После того как вы отредактируете или русифицируете APK, его надо компилировать обратно.

Компиляция APK

Вводим в командной строке:

Декомпиляция и Компиляция APK приложения Android

apktool b имя_проекта

После чего перейдите в папку проекта ( в данном случае папка browser) и вы увидете две новые папки:

  • build
  • dist

Декомпиляция и Компиляция APK приложения Android

В папке dist будет находится готовое приложение:

Если папки dist не обнаружили, значит apktool не смог собрать редактируемый проект, причиной тому может быть то, что имения которые вы вносили(«поломали») не позволяют собрать приложение apk.

После компиляции приложения apk его необходимо подписать.

Подпись APK

  1. Для этого Вам надо разархивировать архив Sign Android;
  2. Скопировать готовое приложение в папку с распакованным Sign Android;
  3. Потянуть приложение на файл Sign_APK.bat после чего приложение будет подписано!

Декомпиляция и Компиляция APK приложения Android

Готовое подписанное приложение будет носить название apk_signed.apk

Работа с системными APK

Для того чтобы модифицировать системные приложения необходимо прежде всего необходимо скормить программе APKTOOL системный файл framework -res.apk который находиться в системном разделе Android:

/system/framework/framework -res.apk

Для того чтобы скормить Apktool данный файл необходимо, ввести команду:

apktool if framework -res.apk

Учитывайте что, команду нужно вводить относительно пути расположения, то есть если файл framework -res.apk находиться в папке C:\primer, то команда будет выглядеть следующим обзором:

apktool if С:\primer\framework -res.apk

Также для того чтобы можно было модифицировать системные файлы прошивка должна быть вначале Deodex-ирована.

Теперь как это можно все упросить! (не использовать командную строку)

Скачайте приложение SmartApkTool, данное программа имеет графический интерфейс и очень легкая в использование. Автор данной программы мой хороший друг Никита Коровкин (на данный момент работает в Surfingbird)! за что ему огромное Спасибо!

Как пользоваться SmartApkTool

Прежде всего вам надо установить и настроить Java JDK и Apktool как указано выше.

Откройте программу SmartApkTool

Если Вам необходимо Декомпилировать приложение в SmartApkTool, то выберите данный пункт и необходимое приложение

декомпиляция apk

Если компилировать, то

декомпиляция apk

и выбрать файл в проекте apktool.yml

NoName1.1

Для подписи приложения APK, нажать обзор, выбрать приложение и подписать

NoName

Все так легко и просто!

Альтернативный вариант

Для тех кому не понравился SmartApkTool, есть альтернатива Android MultiTool

Как скомпилировать apk файл

APKing
версия: 1.3.4

Последнее обновление программы в шапке: 31.05.2016

APKing Прикрепленное изображениеTools

Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

Краткое описание:
Компиляция/декомпиляция/подпись/оптимизация и установка apk файлов одним нажатием (из контекстного меню Windows)

Описание:
ApKing Tools — наверное самое простое и удобное средство для работы с Android приложениями, так как встраивается в стандартное контекстное меню Windows (нажатие правой кнопки мыши).
Благодаря своей простоте и быстроте, должно понравится не только разработчикам, но и обычным юзерам, которые испытывали какие-то трудности с другим софтом.
Основное преимущество утилиты над аналогами заключается и в том, что она устанавливается с помощью простого установщика, так что никаких дополнительных модулей устанавливать не надо.

Возможности:
— Обычная компиляция/декомпиляция apk, jar одним кликом;
— Подписание приложений цифровой подписью одним кликом;
— * Полная декомпиляция (включая smali) одним кликом;
— * Оптимизация (zipalign);
— * Компиляция+подпись+zipalign оптимизация одним кликом;
— * Установка приложений на телефон одним кликом (по usb);
— Пакетные операции (просто выделите нужное и нажмите ПКМ).

Основные функции вызываются кликом правой кнопки мыши (ПКМ).
* — Для вызова дополнительных функций кроме ПКМ требуется еще и зажатие Shift.

Установка:
Для установки данной утилиты необходимо всего лишь запустить установщик и дождаться окончания.
Дополнительные пункты сразу же появятся. Если вас что-то не устраивает — запустите деинсталятор, и от программы не останеться и следа.

Внимание! Для работы должна быть установлена Java (JRE 7 или выше).

1.3.4:
— Apktool версии 2.1.1;
— Устранены ошибки на последних API;
— English version.

1.3.3:
— Apktool версии 2.0.0 RC4;
— Поддержка Android L;
— Исправлен баг с невозможностью декомпиляции некоторых apk;
— Уменьшен размер установщика.

1.3.2:
— Новая функция «Оптимизация» (zipalign), доступна при зажатом SHIFT;
— При установке приложения на устройство окно автоматически закрываться не будет;
— Некоторые исправления.

1.3.1:
— Apktool версии 2.0.0b8;
— Исправлен баг с компиляцией/декомпиляцией .jar-файлов;
— Улучшено функцию «Скомпилировать и подписать»;
— Доделан перевод.

1.3:
— Основана на Apktool 2.0.0-b7 (Beta9 не всегда работает гладко);
— Нет необходимости копировать папку META-INF после компиляции (готовый apk будет в папке sys);
— Добавлена функция установки/очистки опорных фреймворков (Put_frameworks_here.cmd и Clear_frameworks.cmd в папке с программой);
— Если при декомпиляции в расположении уже есть папка с именем программы, то она перезаписывается заново;
— С нуля переписана функция «Компиляция+подпись+zipalign»;
— При возникновении ошибок окно не закрывается автоматически;
— Добавлена функция «Очистить содержимое папки»;
— Авто zipalign при подписи приложений;
— Убраны *звездочки* в названиях опций;
— Переделаны окна.

Русский интерфейс: Да

Разработчик: ATs / ATsuAnd

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

ApkTool – Decompile and Edit APK (Windows, Mac & Linux)

Compile and Decompile APK

Long back in 2016, we published a detailed tutorial on compiling and decompiling APK files using APK Easy Tool. Today, we’ve come up with another utility that lets you compile and decompile APK files even more easily and it’s simply called ‘apktool’, a Java-based tool that works on Windows, Linux, and MacOS. In this apktool tutorial, we’ll see how to use apktool to compile APK from a modified source, decompile APK, edit and recompile APK files, and make an Android app package.

APK modding is quite common in the Android world. By modding an APK file, you can add or remove features from an App, sign it with your own key, change the UI design or theme the UI and add custom translations. APK modding can also be potentially used to inject malicious code inside an App. This is the reason why special care must be taken when installing modified APKs from third-party sources. In this article, we will discuss the basics of how to manipulate an APK to apply modifications to it.

In order to do any sort of modification to an Android APK file, you must first decompile it, edit its contents and then compile it back. Currently, the easiest way to do this is using a special desktop PC tool known as apktool. Apktool is a Java-based utility which can run on Windows, MacOS, and Linux with minimal effort. Once it is set up, it can decompile or compile an APK file with a single command.

Warning

Modifying APK files might cause them to become unstable and/or unusable. Be extra cautious when manipulating system APK files, as a wrong change might render your device inoperable. DroidViews does not support in any way modifying APK files to add malicious code in them. This process is strictly prohibited by law.

Set up Requirements

Before you can follow our apktool tutorial, there are a few prerequisites you need to take care of. The only requirement of apktool is Java version 1.8 or greater. You can check if you have Java installed on your machine by opening a command prompt on Windows (click the Start Menu, type cmd.exe and hit enter) or a terminal on MacOS/Linux and giving the command

apktool tutorial

APK Tool setup

If this command returns 1.8 or greater, you are good to go. If not, you need to install Java first. You can get Java for your machine here.

Download and Set up apktool

setting up things

Save as… option in apktool

You can download the latest version of apktool by clicking on this link. When the download is finished, rename the file to apktool.jar. You will next need to download a wrapper file, depending on your desktop Operating System. You can get the wrapper file by using the following links. For your convenience, right click on the link and select ‘Save As’.

Save the file as apktool.bat on Windows and apktool on MacOS/Linux:

  • Windows
  • MacOS
  • Linux

Finally, you will need to move both the apktool and wrapper files to a special location so they can be executed everywhere on the system: On Windows, this location is C:\\Windows . On MacOS and Linux, place them under /usr/bin or /usr/local/bin (root required). If you are on Linux or MacOS, make sure that both files have the execute permission set.

apktool tutorial - setup screen

apktool log

To test that everything works as expected, open a command prompt on Windows or a terminal emulator on MacOS and Linux. Then issue the command apktool and hit enter. You should get an output similar to the following:

apktool Tutorial to Edit APK Files

We will cover only the basics of APK file manipulation. This only includes decompilation and compilation. Anything else lies outside of the scope of this article and should be covered in a separate writing.

Decompile, Edit and Recompile APK Files

First, download the APK file which you need to decompile and edit. In this guide, we will be using the Facebook Lite App APK as an example. You can download it here.

Next, open a terminal emulator or command prompt inside the folder you downloaded the APK file to. To do this on Windows, navigate to the folder using Windows Explorer and then type CMD in the address bar as shown below. Hit enter and a command prompt window will open.

launch cmd in windows explorer

Decompiling an APK file is quite simple. You just need to issue a command in the following form:

For the Facebook Lite App, this will get into:

Apktool will create a new folder with the same name as the APK file and place all the App data inside it.

Compile and Decompile APK

The new folder will have a structure similar to the following:

  • The res folder contains everything that has to do with translations and user interface layout.
  • The smali folder contains App source code in the smali form. Smali is a language type similar to assembly. To make any changes apart from cosmetic ones to an App, these are the files you need to mess with.
  • The unknown folder contains everything else that comes packaged inside the APK file but does not follow Google’s guidelines for APK packaging.
  • Lastly, AndroidManifest.xml is the Manifest file. This contains information like the App name and characteristics, the Intents it listens to and the Permissions it uses.

Compile APK from a Modified Source

Compiling a modified source with apktool is as simple as decompiling. You can get the job done by just issuing a command in the form:

In our example with the Facebook Lite App, this will get into:

That is all you need to know if you want to compile and decompile APK files for Android. Stay tuned for special guides about manipulating App icons and colors and adding or removing functionalities to your apps! Try it now and let us know if you were able to decompile and compile an APK. I just hope our apktool tutorial will help you edit APK files yourself.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *