Build android app guide

Signing and Building — Android

This guide explains how to sign, build, and test your app on Android devices.

You do not need to install the Android SDK. However, you will need to install the proper version of the Java Development Kit if you’re using Windows. See the Java Development Kit section for details.

The Android build process generates two files: an .apk and an .aab file. You can build and test apps on Android devices without creating a Google developer account, but you will need an account if you wish to publish to the Google Play marketplace.

The Android App Bundle file, .aab , is automatically generated when you build for Android. You can use this file to submit your apps or games to Google Play.

We only support Android devices that run or higher with an ARMv7 processor. This can create some confusion because ARM processors are identified by both a family and an architecture. Family names do not have a «v» in them. For instance, the ARM7 processor is actually a ARMv3 architecture, and ARM11 is a ARMv6 architecture. See this guide to help identify the various processors.

Java Package Name

When you build an Android app using Solar2D, you must specify a package name. In general, you can specify any package name you like, but it must be chosen carefully because it should be unique to your application.

The traditional Java scheme is to use the format like com.acme , then append the name of a division/product, and finally append the name of the app. For example, com.acme.games.catchafish would be a good package name, assuming you own the acme.com domain name.

In some cases, the package name that results from using format may not be valid, and it must be modified before Solar2D will build your Android app. This would be true in any of the following cases:

The package name contains a hyphen or other special character ( com.three-amigos for example). In this case, convert the special character to an underscore: com.three_amigos .

One of the name components contains a digit or other invalid character at the beginning of an identifier ( com.3amigos for example). In this case, try to convert the package name to something like com.threeamigos .

One of the name components contains a keyword, for example com.private.idaho . In this case, suffix that part of the package name with an underscore: com.private_.idaho .

Build Process

If you aren’t familiar with the available build settings for an app, please review them before proceeding with this section.

Make sure that your Android device is enabled as a development device.

From the Solar2D Simulator, select FileOpen. to load the project you wish to build.

Select FileBuildAndroid. .

Fill in the information:

Application Name — by default, this will match your project folder; keep this name or specify another.

Version Code — this value must be an integer. Each time you update your app, you must increase the version code. It corresponds to the versionCode item detailed here. It is not visible to users.

Читайте также:  Проблемы с сертификатом безопасности андроид что делать

Version Name — specify a version name for your app.

Package — see Java Package Name above.

Target App Store — select Google Play from the pull-down list.

Keystore / Key Alias — in order to build for Android devices, you must digitally sign your app using a keystore. Please refer to either Signing for Debug Build or Signing for Release Build below.

Save to Folder — specify where to save the compiled app.

After Build — select which action should be performed after the app is successfully built.

Create Live Build — check this box to create a live build for testing. See Generating Live Builds for details.

Click Build and Solar2D will compile the app into a standard .apk file.

For debug builds, Solar2D includes a debug.keystore for testing your app on devices. To use it, follow these steps:

Select Debug from the Keystore menu.

Directly to the right, Browse. to the keystore file in the Solar2D SDK application folder:

Select the file and enter android as the password.

In the Key Alias menu, select androiddebugkey .

For release builds, you must sign with your private key. You can generate this key using the command line program Keytool. Please follow these simple steps:

Open the Command Prompt in Windows or the Terminal in macOS. Once there, use the cd command to change to the directory where you’ll keep your keystores.

Type the following command at the prompt, replacing mykeystore with the name of your application and aliasname with a similar or equal alias name.

keytool -genkey -v -keystore mykeystore.keystore -alias aliasname -keyalg RSA -validity 999999

  1. You’ll be prompted for your credentials. Supply the requested information and tap enter to sign your Android app.

Device Installation

There are four methods to install an app on an Android device. You can not simply copy the .apk file over to the device.

Copy to Device

If you’re using the Solar2D Simulator for macOS, you can copy the app directly to a connected device. This feature is not supported on Windows.

Connect your device.

Follow the steps outlined in Build Process above, ensuring that you select for the After Build option.

Android SDK

If you have already installed the Android SDK, use adb install -r your-app.apk .

Web Server

Upload the .apk to a web server. Next, point your Android device’s web browser to the file’s URL to download the app to the device. Finally, click on the file in the Download History to install it.

If this method fails, and the application downloads as a text file, you may need to add the following configuration line to a .htaccess file in the application’s directory on the web server:

AddType application/vnd.android.package-archive .apk

Also, you should set your device to install non-Market applications if you are using debug.keystore . Click the Settings icon on the device, select Applications, then check the box next to Unknown Sources.

App Installer

Obtain an app installer from Google Play to assist with the process.

Debugging

Google’s Android SDK provides a set of tools known as Android Debug Bridge or adb. These tools let you look at the device’s console log, install, and replace existing apps on your device. You can execute the adb command from the macOS Terminal or from the Windows Command Prompt. A GUI tool called monitor is also installed; it can be used to examine the log file and capture screen shots from your device.

For more details on Android debugging, see the Debugging Guide.

© 2021 Solar2D All Rights Reserved.

Help us help you! If you notice a problem with this page, please report it.

Читайте также:  Как восстановить системные настройки андроид

Источник

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

Источник

Оцените статью