Как скомпилировать android studio проект

Публикация приложения

Создание подписанного apk

После создания приложения, его тестирования и отладки мы можем приступить к его публикации. Суть публикации заключается в создании файла с расширением .apk, которое будет представлять приложение, и его последующее размещение в Google Play Market или на других внешних сайтах. По умолчанию в процессе отладки и создания приложения файл apk уже создается, и мы можем его найти в папке проекта по пути Название_проекта\app\build\outputs\apk. По умолчанию файл называется app-debug.apk и представляет debug-версию.

Но для полноценно публикации данного файла может оказаться недостаточно. И нам еще дополнительно надо произвести некоторую подготовку проекта к релизу. Для это следует указать в файле манифеста у элемента установлены атрибуты android:versionCode и android:versionName . Также в файле манифеста элемент не должен содержать атрибута android:debuggable

Кроме того, на этом этапе можно установить иконку для приложения, которая будет отображаться на рабочем экране гаджета, название приложения (атрибут android:label у элемента), а также можно задать лицензионное соглашение.

В файле манифеста также следует определить название пакета (атрибут package элемента ), которое будет использоваться для приложения в дальнейшем. По умолчанию при разработке в Android Studio пакеты приложений начинаются с com.example. Не стоит оставлять данное название, так как название пакета будет служить уникальным идентификатором вашего приложения. Например, ниже в моем случае названием пакета служит «com.maverics.eugene.telephonelist»:

При этом если в файлах кода java название пакета в начале файла также должно соответствовать пакету приложения.

Установка требований

На этапе подготовки к релизу также можно установить требования к API. Например, наше приложение имеет определеную минимальную версию ОС Android, поэтому мы можем установить в файле манифеста соответствующие атрибуты у элемента

android:minSdkVersion — минимальная версия Android

android:targetSdkVersion — оптимальная версия API

android:maxSdkVersion — максимальная версия системы

Например, пусть минимальная версия Jelly Beans 4.1.2, а оптимальная KitKat 4.4.4:

Подпись приложения

Когда все уже готово, приложение для Android должно быть подписано сертификатом, благодаря которому можно идентифицировать автора приложения. Когда мы тестируем приложение, устанавливая его через Android Studio на устройство, то оно подписывается автоматически. Но для создания релиз-версии нам надо произвести дополнительно ряд действий.

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

Во-первых, в Android Studio выберем в меню пункт Build -> Generate Signed APK . После этого нам откроется окно мастера:

Нажмем на кнопку Create new. . После этого нам откроется окно создания ключа:

Введем в поле Key store path путь к файлу сетификата, который будет создан. Если указанной папки не существует, то ее надо создать или определить существующую папку.

В поле Password/Confirm указываем пароль.

В поле Alias указываем псевдоним. Можно поставить произвольное название.

В поле First and Last Name вписываем имя и фамилию. И далее пишим подразделение, организацию, город, страну и код страны.

В конце нажимаем OK.

После этого автоматически обновится первое окошко:

Далее нажмем на кнопку Next:

Финальное окно покажет нам путь к каталогу, где будет находиться подписанное приложение apk в release-версии. Нажмем на Finish.

Теперь по указанному пути можно будет найти подписанный apk, который будет иметь название app-release.apk:

Мы можем переименовать файл, сохранив его расширение и выложить в Play Market или на любой сайт или сразу загрузить на мобильное устройство. После загрузки на телефон/планшет достоточно нажать на него, и с помощью стандартного установщика пакетов приложение будет установлено. Правда, здесь также надо учитывать, что если мы устанавливаем приложение не из Play Market, то в настройках надо разрешить установку из других источниках — Безопасность->Неизвестные источники (Разрешить установку приложений из других источников)

Читайте также:  Андроид как включить синхронизацию аккаунта google

Источник

Русские Блоги

Подробное объяснение системы сборки Android Android Studio

Android build system in AS

Android Studio использует Gradle для управления и компиляции проектов Android, а система сборки Android используется для создания приложений Android. Система сборки Android — это набор инструментов, используемых для создания, тестирования, запуска и упаковки приложений. Здесь мы узнаем больше о системе сборки Android.

Build Process — процесс сборки

Прежде всего, нам нужно понять общее поведение системы сборки Android. Чтобы сгенерировать файл apk в Android Studio, вам необходимо запустить задачу сборки Gradle. На этом этапе вы пройдете через процесс сборки. Этот процесс содержит множество инструментов и шагов, во время которых будут созданы файлы перехода.
На следующем рисунке можно проиллюстрировать полный процесс строительства:

Его можно свести к следующим шагам

  • Android Asset Packaging Tool, также известный как aapt, компилирует файлы ресурсов (такие как AndroidManifest.xml и файлы xml, используемые Activity), а также генерируетR.java. R.java эквивалентен индексу файла ресурсов.В коде Java ссылка на файл ресурсов осуществляется через R.java.
  • Инструмент aidl преобразует интерфейс .aidl в интерфейс java.
  • Все коды Java, включая коды интерфейса java, сгенерированные R.java и .aidl, компилируются в файлы .class.
  • Инструмент dex преобразует файл .class в двоичный код Dalvik .dex. Все сторонние библиотеки и файлы .class также будут преобразованы в файлы .dex.
  • Все файлы, включаяНекомпилированные ресурсы, скомпилированные ресурсы, файлы dex, Упакованы в файл apk с помощью инструмента apkbuilder.
  • После создания apk его необходимо подписать с помощью ключа отладки или ключа выпуска, прежде чем его можно будет установить на устройстве.
  • Если вы хотите опубликовать apk, вам также необходимо использовать инструмент zipalign для выравнивания файлов apk.
* Примечание: система сборки объединит все ресурсы, ресурсы могут поступать из каталога ресурсов по умолчанию app / src / main / res и библиотеки, на которые указывают зависимости , Также может зависеть от вкуса продукта и типа сборки. Если ресурсы из разных источников имеют одинаковое имя, ресурс с наивысшим приоритетом используется в соответствии со следующим приоритетом: зависимости> варианты продукта> типы сборки> каталог ресурсов по умолчанию

Конфигурация сборки — Конфигурация сборки

У нас уже есть общее представление о сборке, но что, если мы хотим внести некоторые изменения в задачу сборки, например, добавить библиотеку? Для этого необходимо изучить конфигурацию Build.
У проекта Android Studio есть главный файл конфигурации, и модули проекта также имеют свои собственные файлы конфигурации. Все их имена — build.gradle. В большинстве случаев нам нужно только отредактировать build.gradle в модуле.
Если у нас есть модуль с именем app, файл build.gradle приложения выглядит следующим образом:

Давайте посмотрим, что это за конфигурация:

  • применить плагин: ‘com.android.application’ Применить плагин с именем com.android.application к этому модулю.
    Фактически, это эквивалентно заявлению:com.android.applicationУказывает, что это сборка Android-приложения, которую также можно использоватьcom.android.libraryПредставляет библиотеку илиjavaПредставляет проект Java. С помощью этого оператора система сборки может принять эту сборку, и задача сборки будет добавлена ​​к основной задаче сборки, а параметры сборки, связанные с Android, станут доступны в следующем элементе android <. >.
  • android Элемент может настраивать все параметры сборки
    • compileSdkVersion указывает версию SDK скомпилированного приложения
    • buildToolsVersion указывает версию инструментов сборки (основной номер версии инструментов сборки не должен быть ниже compileSdkVersion и targetSdk);
    • DefaultConfig повлияет на некоторые ключевые конфигурации и записи в файле манифеста. Записи, появляющиеся в defaultConfig, перезапишут файл манифеста;
    • buildTypes Элемент типа сборки управляет сборкой и упаковкой приложения.По умолчанию существует два типа сборки: отладка и выпуск: пакет приложения отладочного типа имеет тег отладки и подписан как ключ отладки;Тип сборки выпуска не имеет сигнатуры по умолчанию. Для ее создания необходим указанный ключ.
  • dependenciesОбъявите зависимость этого модуля, и отдельное резюме будет использовано позже для иллюстрацииdependencies

Dependencies

Следующий код использует все три зависимости:

Module dependencies

Первый проект компиляции («: lib») является зависимостью модуля, что означает, что приложение модуля зависит от модуля lib. Когда приложение построено, система сборки также будет включать файл lib.

Remote binary dependencies

Далее идет зависимость удаленной библиотеки, compile’com.android.support: appcompat-v7: 19.0.1 ‘означает, что приложение модуля зависит от версии 19.0.1 библиотеки поддержки Android в библиотеке Maven. По умолчанию удаленный репозиторий указывает на центральный репозиторий Maven.

Local binary dependencies

Окончательная компиляция fileTree (dir: ‘libs’, включает: [‘.jar ‘]) означает зависимость от локальной библиотеки. Вообще говоря, мы помещаем jar-файл локальной библиотеки в папку libs модуля, а затем используем compile fileTree (dir: ‘libs’, include: [‘.jar ‘]) сообщает системе сборки, что все файлы jar в библиотеках должны быть скомпилированы и включены в приложение.

Источник

Как устроен билд 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, включая подключенные библиотеки, то произойдет ошибка при билде

Источник

Читайте также:  Что делать если произошла ошибка андроида
Оцените статью