- .APK File Extension
- Android Package File
- What is an APK file?
- How do I install an APK file on my Android device?
- What does an APK file contain?
- How do I view the contents of an APK file?
- How do I create APK files?
- What Is an APK File?
- How to open, edit, and convert APK files
- What Is an APK File?
- How to Open an APK File
- Open an APK File on Android
- Open an APK File on Windows
- Open an APK File on a Mac
- Open an APK File on iOS
- Extracting APK Files
- How to Convert an APK File
- Как устроен билд 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
.APK File Extension
Android Package File
What is an APK file?
An APK file is an app created for Android, Google’s mobile operating system. Some apps come pre-installed on Android devices, while other apps can be downloaded from Google Play. Apps downloaded from Google Play are automatically installed on your device, while those downloaded from other sources must be installed manually.
Typically, users never see APK files because Android handles app installation in the background via Google Play or another app distribution platform. However, there are many websites that offer direct APK file downloads for Android users who want to install apps manually themselves. In this case, you should be careful that you trust the source of the APK file, because malware can be distributed in APK files, just as it can in the case of Windows and .EXE files.
How do I install an APK file on my Android device?
You can install APK files manually by following these instructions. Make sure that you trust the source of the APK file.
What does an APK file contain?
Android packages contain all the necessary files for a single Android program. Below is a list of the most prominent files and folders:
- META-INF/ : Contains the manifest file, signature, and a list of resources in the archive
- lib/ : Native libraries that run on specific device architectures (armeabi-v7a, x86, etc.)
- res/ : Resources, such as images, that were not compiled into resources.arsc
- assets/ : Raw resource files that developers bundle with the app
- AndroidManifest.xml : Describes the name, version, and contents of the APK file
- classes.dex : The compiled Java classes to be run on the device (.DEX file)
- resources.arsc : The compiled resources, such as strings, used by the app (.ARSC file)
How do I view the contents of an APK file?
APK files are saved in a compressed .ZIP format and can be opened by any Zip decompression tool. Therefore, if you would like to explore the contents of an APK file, you can rename the file extension to «.zip» and open the file, or you can open the file directly through a Zip application’s open dialog box.
How do I create APK files?
Android apps are developed using Android Studio, the official IDE for Android software developers. It is available for Windows, Mac, and Linux, and it allows users to develop apps and prepare them for upload to a distribution service, such as Google Play. When apps are ready, developers can build them into APK files and sign them for release.
NOTE: See the .AAB description for details on Google’s new publishing format for developers.
Источник
What Is an APK File?
How to open, edit, and convert APK files
This article describes what an APK file is, how to open or install one (exactly how depends on your operating system), and why converting one might not be useful.
What Is an APK File?
A file with the APK file extension is an Android Package file that’s used to distribute applications on Google’s Android operating system.
APK files are saved in the ZIP format and are typically downloaded directly to Android devices, usually via the Google Play store, but can also be found on other websites.
Some of the content found in a typical APK file includes an AndroidManifest.xml, classes.dex, and resources.arsc file; as well as a META-INF and res folder.
How to Open an APK File
APK files can be opened on a number of operating systems but they’re used mainly on Android devices.
Open an APK File on Android
Opening an APK file on your Android device just requires that you download it like you would any file, and then open it when asked. However, APK files installed outside of the Google Play store might not install right away because of a security block put into place.
To bypass this download restriction and install APK files from unknown sources, navigate to one of these menus, depending on your Android version:
- Settings >Apps & notifications >Advanced >Special app access >Install unknown apps
- Settings >Apps and notifications
- Settings >Security
Depending on your device, you might need to give a specific app, such as Chrome, permission to install unofficial APK files. Or, if you see it, enable Install Unknown Apps or Unknown sources.
If the APK file doesn’t open, try browsing for it with a file manager like Astro File Manager or ES File Explorer File Manager.
Open an APK File on Windows
You can open an APK file on a PC using an Android emulator (these are our favorites) like BlueStacks. In that program, go into the My Apps tab and then choose Install apk from the corner of the window.
Open an APK File on a Mac
ARC Welder is a Google Chrome extension that’s meant for testing Android apps for the Chrome OS, but it works on any OS. This means you can open an APK on your Mac or Windows computer so long as you have this app installed within the Chrome browser.
Open an APK File on iOS
You can’t open or install APK files on an iPhone or iPad because the file is built in an entirely different manner than apps used on those devices, and the two platforms aren’t compatible with each other.
Extracting APK Files
You can also open an APK file in Windows, macOS, or any other desktop operating system, with a file extractor tool. (Try one of our top free unzip programs.) Since APK files are simply archives of multiple folders and files, you can unzip them with a program like 7-Zip or PeaZip to see the different components that make up the app.
Doing that, however, doesn’t let you actually use the APK file on a computer. To do so requires an Android emulator (like BlueStacks), which essentially runs the Android OS on the computer.
How to Convert an APK File
Although a file conversion program or service is normally necessary to convert one file type to another, they’re not very useful when dealing with APK files. This is because an APK file is an application that’s built to run on specific devices only, unlike other file types like MP4s or PDFs that work on a variety of platforms.
Instead, if you want to convert your APK file to ZIP, you’d use the instructions explained above. Either open the APK file in a file extraction tool and then repackage it as a ZIP or simply rename the .APK file to .ZIP.
Renaming a file like this isn’t how you convert a file. It only works in the case of APK files because the file format is already using ZIP but it’s just appending a different file extension (.APK) to the end.
As you read above, you can’t convert an APK file to IPA for use on iOS, nor can you convert APK to EXE to use the Android app in Windows.
However, you can normally find an iOS alternative that works in place of the Android app that you want to be installed on your iPhone or iPad. Most developers have the same app available on both platforms (an APK for Android and an IPA for iOS).
Instead of an APK to EXE converter, install a Windows APK opener from above and then use it to open the Android app on your computer; it doesn’t need to exist in the EXE file format for that to work.
You can convert your APK file to BAR for use with a BlackBerry device by just uploading the APK file to the Good e-Reader online APK to BAR converter. Wait for the conversion to finish, and then download the BAR file back to your computer.
Yes, unfortunately, APK files can sometimes harm devices. That’s because they can contain malware, so it’s recommended to run APK files through an online virus scanner before installing them. Only download from sites you know and trust to minimize the possibility of a fraudulent program infecting your device.
It’s perfectly legal to download APK files and use them to install apps from outside the Google Play Store. APK is just a file format like the EXE or ZIP. Google developed the APK format, but anyone can create and use APK files.
Locate APK files on your device by using an Android file manager to search for the file. Some mobile devices come with a preloaded file manager, but many alternatives are in the Google Play Store.
Источник
Как устроен билд 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, включая подключенные библиотеки, то произойдет ошибка при билде
Источник