Что такое время компиляции в смартфоне
Что такое время компиляции в смартфоне
Краткое описание:
отображение всей информации о вашем телефоне (только для смартфонов компании samsung)
Описание:
Отображение всей информации о вашем телефоне в одном приложении, начиная от страны производителя (сборщика) и цвета аппарата, заканчивая версией bootloader.
Дополнительные опции приложения:
— Firmware Browser поиск и скачивание стоковых прошивок от самсунга (с ресурса sammobile.com)
— Refurbishment Check детектор клонов для всех моделей смартфонов от samsung, для отображения данных в пунктах Charger connect и S Pen detach требуется наличие root-прав
— Serial Number Decoder определение страны производителя и месяц/год производства смартфона самсунг по введенному серийному номеру)
— IMEI Analizer проверка валидности IMEI
— CSC Lookup база самсунговских кодов регионов CSC
— CSC Changer смена региона аппарата (CSC) смена региона ведет к полному сбросу данных в телефоне
Внимание:
— с версии 1.6.5 для отображения информации в некоторых пунктах требуется наличие root-прав
— приложение только для смартфонов от компании Samsung, корректная работа гарантированна только на стоковых прошивках Samsung
— в приложении присутствует реклама, после доната вы сможете удалить рекламу и выгружать информацию из приложения в текстовый файл на sd-карту
Версия: 3.6.8 Original + Patched Сообщение №512, автор Alex0047
Версия: 3.6.7 Original + Patched Сообщение №500, автор Alex0047
Версия: 3.6.6 Original + Patched Сообщение №496, автор Alex0047
Версия: 3.6.5 Original + Patched Сообщение №485, автор Alex0047
Версия: 3.6.4 Phone INFO Samsung (Пост wasp3792 #72198753)
Версия: 3.6.4 Patched Сообщение №479, автор Giacomino
Версия: 3.6.3 + Patched Phone INFO Samsung (Пост Alex0047 #72038461)
Версия: 3.6.2 + Patched Phone INFO Samsung (Пост Alex0047 #71342042)
Версия: 3.6.1 + Patched Phone INFO Samsung (Пост Alex0047 #71036611)
Версия: 3.5.9 + Patched Phone INFO Samsung (Пост Alex0047 #66527182)
Версия: 3.5.8 + Patched Phone INFO Samsung (Пост Meoweom #63567557)
Версия: 3.5.8 Patched (Balatan) Phone INFO Samsung (Пост Alex0047 #63568442)
Версия: 3.5.7 + Patched Phone INFO Samsung (Пост Alex0047 #61900207)
Версия: 3.5.6 + Patched Phone INFO Samsung (Пост Alex0047 #61467456)
Версия: 3.5.5 + Patched Phone INFO Samsung (Пост Alex0047 #58690456)
Версия: 3.5.2 + Patched Phone INFO Samsung (Пост Alex0047 #56955183)
Версия: 3.5.1 Patched Phone INFO Samsung (Пост Alex0047 #54817375)
Версия: 3.5.0 build 84 Phone INFO Samsung (Пост vutak #54038486)
Версия: 3.5.0 + Patched Phone INFO Samsung (Пост Alex0047 #54019551)
Версия: 3.4.9 Offline Paid Patched Phone INFO Samsung (Пост Alex0047 #53664316)
Версия: 3.4.4 GP Phone INFO Samsung (Пост gar_alex #49449876)
Версия: 3.4.8 + Offline Paid Patched Phone INFO Samsung (Пост Alex0047 #53324075)
Версия: 3.4.7 Offline Paid Patched Phone INFO Samsung (Пост Alex0047 #52053507)
версия: 3.4.5 Offline Paid Patched Phone INFO Samsung (Пост Alex0047 #49649853)
версия: 3.4.4 Offline Paid Patched Phone INFO Samsung (Пост Alex0047 #49432259)
версия: 3.4.3 Offline Paid Patched Phone INFO Samsung (Пост Alex0047 #47966988)
Версия: 3.3.10 с маркета Phone INFO Samsung (Пост Alex0047 #44749374)
версия: 3.4.2 Offline Paid Patched Phone INFO Samsung (Пост Alex0047 #47330015)
Версия: 3.4.1 Offline Paid Patched Phone INFO Samsung (Пост Alex0047 #47243835)
Версия: 3.4.0 Offline Paid Patched Phone INFO Samsung (Пост Alex0047 #47126014)
Версия: 3.3.10 Offline Paid Patched Phone INFO Samsung (Пост Alex0047 #44731624)
Версия: 3.3.9 Offline Paid Patched Phone INFO Samsung (Пост Vetal`M #44061027)
Версия: 3.3.8 Offline Paid Patched Phone INFO Samsung (Пост Vetal`M #43903344)
Версия: 3.3.8 с маркета Phone INFO Samsung (Пост Baphomet666 #31591021)Версия: 3.3.6 Offline Paid Patched Phone INFO Samsung (Пост Alex0047 #42608689)
Версия: 3.3.5 Offline Patched Phone INFO Samsung (Пост Alex0047 #42178637)
Версия: 3.3.5 с маркета Phone INFO Samsung (Пост Baphomet666 #31591021)
Версия: 3.3.4 Offline Patched Phone INFO Samsung (Пост Alex0047 #41678061)
Версия: 3.3.4 с маркета Phone INFO Samsung (Пост DeYura #41677087)
Версия: 3.3.3 Offline Patched Phone INFO Samsung (Пост Alex0047 #41318762)
Версия: 3.3.3 с маркета //4pda.to/forum/d…/Phone+INFO++3.3.2.apk
Версия: 3.3.2 Patched Phone INFO Samsung (Пост Alex0047 #40993259)
Версия: 3.3.0 Patched Phone INFO Samsung (Пост Vetal`M #40742829)
Версия: 3.2.5 Patched Phone INFO Samsung (Пост Alex0047 #39920463)
Версия: 3.2.8 с маркета Phone INFO Samsung (Пост Baphomet666 #31591021)
Версия: 3.2.0 Pro Rus Phone INFO Samsung (Пост boar-hooligan #39679039)
Версия: 3.2.0 Patched Phone INFO Samsung (Пост Alex0047 #39656676)
Версия: 2.6.0 Pro RUS Phone INFO Samsung (Пост boar-hooligan #38828682)
Версия: 3.0.1 Patched Phone INFO Samsung (Пост Alex0047 #39278738)
Версия: 3.0.1 с маркета Phone INFO Samsung (Пост Alex0047 #39282129)
Версия: 3.0.0 с маркета //4pda.to/forum/index.php?showtopic=559028&view=findpost&p=31591021
Версия: 3.0.0 Patched Phone INFO Samsung (Пост Alex0047 #39270176)
Версия: 2.6.1 с маркета //4pda.to/forum/index.php?showtopic=559028&view=findpost&p=31591021
Версия: 2.6.1 Patched //4pda.to/forum/index.php?showtopic=559028&view=findpost&p=39238224
Версия: 2.6.0 с маркета Phone INFO Samsung (Пост Baphomet666 #31591021)
Версия: 2.6.0 Patched Phone INFO Samsung (Пост Alex0047 #38818706)
Версия: 2.5.0 Patched Phone INFO Samsung (Пост Alex0047 #38277145)
Версия: 2.5.0 с маркета Phone INFO Samsung (Пост #31591021)
Версия: 2.4.0 Pro RUS Phone INFO Samsung (Пост boar-hooligan #38161413)
Версия: 2.4.0 Patched Phone INFO Samsung (Пост Alex0047 #38111241)
Версия: 2.3.2 Patched Phone INFO Samsung (Пост Alex0047 #37968736)
Версия: 2.3.0 Patched Phone INFO Samsung (Пост Alex0047 #37968736)
Версия: 2.2.1 Patched Phone INFO Samsung (Пост #37903791)
Версия: 2.2.0 Patched Phone+INFO+Samsung+v2.2.0+Paid+Patched.apk
Версия: 2.2.0 Free Phone+Info+v.2.2.0.b.48+market.apk ( 1.78 МБ )
Версия: 2.2.0 Patched
Версия: 2.1.5 с маркета Phone INFO Samsung (Пост #31591021)
Версия: 2.1.5 Paid Phone INFO Samsung (Пост #37777049)
Версия: 2.1.0 Patched Phone INFO Samsung (Пост #37241396)
Версия: 2.1.0 с маркета Phone INFO Samsung (Пост #31591021)
Версия: 2.0.0 Phone INFO Samsung (Пост #35579564)
Версия: 2.0.0 Patched Phone INFO Samsung (Пост #35762726)
Версия: 2.0.0 с маркета Phone INFO Samsung (Пост #31591021)
Версия: 1.9.7 Plus Phone INFO Samsung (Пост #31591021)
Версия: 1.9.6 Phone INFO Samsung (Пост #35024821)
Версия: 1.9.5 Phone INFO Samsung (Пост #35021116)
Версия: 1.9.0 Plus + Patched Phone INFO Samsung (Пост #33194286)
Версия: 1.9.0 Phone INFO ★Samsung★ (Пост #33179401)
Версия: 1.8.6 Plus Phone INFO ★Samsung★ (Пост #31591021)
Версия: 1.8.6 Plus (под обычный маркет) //4pda.to/forum/d…0.crk.Custom.Patch.apk
версия с рекламой и без экспорта: 1.8.5 Phone+Info+1.8.5.b.39.apk ( 247.17 КБ )
plus-версия (с экспортом данных и без рекламы): 1.8.5 Phone+Info+Plus+1.8.5.b.39.apk
версия: 1.8.2 Phone+Info+Samsung+1.8.2.apk
версия: 1.8.0Phone+Info+Samsung+1.8.0.apk ( 247 КБ )
версия: 1.7.5Phone+Info+Samsung+1.7.5.apk ( 211.27 КБ )
версия: 1.7.3Phone+Info+Samsung+1.7.3.apk ( 210.05 КБ )
версия: 1.7.2Phone+Info+Samsung+1.7.2.apk ( 209.16 КБ )
версия: 1.7.0Phone+Info+Samsung+1.7.0.apk ( 208.46 КБ )
версия: 1.6.6Phone+Info+Samsung+1.6.6.apk ( 207.96 КБ )
версия: 1.6.5Phone+Info+Samsung+1.6.5.apk ( 207.15 КБ )
версия: 1.6.2Phone+Info+Samsung+1.6.2.apk ( 206.18 КБ )
версия: 1.6.0Phone+Info+Samsung+1.6.0.apk ( 205.71 КБ )
версия: 1.5.2Phone+Info+Samsung+1.5.2.apk ( 204.75 КБ )
версия: 1.5.0Phone+Info+Samsung+1.5.0.apk ( 204.55 КБ )
версия: 1.4.9Phone+Info+Samsung+1.4.9.apk ( 204.18 КБ )
Уменьшаем время сборки ваших Android-проектов
Доброе утро! Начинаем понедельник с материала, перевод которого подготовлен специально для студентов курса «Android-разработчик. Продвинутый курс».
Недавно я переносил кодовую базу Android в Kure на AndroidX. Мне показалось, что это прекрасная возможность поработать над скоростью сборки проекта. У Gradle всегда была плохая репутация из-за медлительности и ресурсоемкости, но я был очень удивлен, что незначительные изменения в конфигурации сборки могут так значительно увеличить ее скорость.
Посмотрите на показатели сканирования сборки до/после оптимизации
до оптимизации
после оптимизации ️️
Снизились с 5,5 минут до 17 секунд?? С ума сойти!
Не так уж и сложно переусердствовать с оптимизацией, чтобы еще больше сократить время сборки. Но для того, чтобы пост был понятен начинающим, я намеренно сосредоточусь на незначительных, безболезненных мерах, которые я предпринял, чтобы приблизиться к такому показателю.
Прежде всего!
Перед тем, как начать оптимизацию, важно протестировать наш проект, чтобы узнать, сколько времени требуется на его сборку. Gradle имеет удобную опцию сканирования, которую вы можете использовать для анализа производительности вашей задачи. Запустите терминал в Android Studio и выполните следующую команду:
После успешного завершения сборки вам будет предложено принять условия обслуживания, чтобы загрузить результаты сканирования. Введите yes, чтобы продолжить. После завершения публикации вы получите ссылку на терминал для проверки сканирования. Откройте ее.
На сайте есть довольно много опций, но для краткости мы рассмотрим только то, что является наиболее важным.
В Summary отображается сводная информация о выполненных задачах и времени их выполнения. Но что нас здесь интересует, так это раздел Performance. Он делает более подробную разбивку общего времени сборки, как показано ниже.
В разделе Performance есть вкладка Settings and suggestions, в которой приведены рекомендации по улучшению скорости сборки. Давайте посмотрим на них.
В этом разделе мы можем найти несколько простых исправлений для повышения скорости. Итак, давайте продолжим и применим эти исправления в нашем проекте.
Шаг № 1: Обновите инструменты
Команда Android постоянно совершенствует и развивает систему сборки. Таким образом, в большинстве случаев вы можете получить значительное улучшение, просто установив последнюю версию инструментария.
Во время этого рефакторинга наш проект был на версии 3.2.1 плагина Gradle для Android Studio (на несколько версий старше, чем последний выпуск).
Вы можете перейти по этой ссылке, чтобы получить последнюю версию Gradle Plugin. На момент написания этого поста последней была версия 3.4.0.
Но здесь есть подвох, о котором мы должны помнить:
(Примечание: При использовании Gradle версии 5.0 или выше размер памяти демона Gradle по умолчанию уменьшается с 1 ГБ до 512 МБ. Это может привести к снижению производительности сборки. Чтобы переопределить этот параметр по умолчанию, укажите размер памяти для демона Gradle в файле gradle.properties вашего проекта.)
При использовании Gradle 5.0 и выше нам нужно будет явно увеличить размер памяти, чтобы скорость нашей сборки не ухудшилась. Мы вернемся к этому через минуту.
Откройте файл build.gradle верхнего уровня, который вы найдете в корне вашего проекта, и добавьте следующую строку в раздел зависимостей:
Вы столкнетесь с ошибкой при использовании Kotlin, если версия плагина Kotlin Gradle меньше 1.3.0. Если это так, воспользуйтесь подсказкой IDE, чтобы обновить Gradle плагин для Kotlin до последней версии (на момент написания этой статьи это версия 1.3.31).
Хорошо, давайте снова запустим сборку из терминала, чтобы посмотреть, добились ли мы каких-нибудь улучшений.
Шаг № 2: Обновите конфигурации
Итак, мы смогли срезать около 2,5 минут от времени сборки, но это все еще недостаточно хорошо. Изучив логи сборки в терминале, я наткнулся на одну строку, которая нас заинтересует:
Gradle может отключить инкрементную компиляцию, так как следующие процессоры аннотаций не являются инкрементными: butterknife-compiler-10.1.0.jar (com.jakewharton:butterknife-compiler:10.1.0), dagger-compiler-2.9.jar (com.google.dagger:dagger-compiler:2.9).
Рассмотрите возможность установки экспериментального флага android.enableSeparateAnnotationProcessing-true в файле gradle.properties для запуска обработки аннотаций в отдельной задаче и выполнения инкрементной компиляции.)
К счастью, в версии 1.3.30 Kotlin добавлена поддержка пошаговой обработки аннотаций.
(Инкрементная обработка аннотаций (с 1.3.30)
Начиная с версии 1.3.30, kapt поддерживает инкрементную обработку аннотаций в качестве экспериментальной функции. В настоящее время обработка аннотаций может выполняться инкрементально, только если все используемые процессоры аннотаций являются инкрементными.
Чтобы включить инкрементную обработку аннотаций, добавьте эту строку в файл gradle.properties :
Обратите внимание, что инкрементная обработка аннотаций требует, чтобы инкрементная компиляция также была включена.)
apply plugin: ‘kotlin-kapt’
Затем измените все конфигурации annotationProcessor в разделе зависимостей для использования kapt. Например:
//До
annotationProcessor ‘com.google.dagger:dagger-compiler:2.9’
//После
kapt ‘com.google.dagger:dagger-compiler:2.9’
Теперь откройте файл gradle.properties, расположенный в корне вашего проекта, и добавьте следующую строку:
Давайте снова запустим сборку.
Хорошо, похоже, мы еще немного продвинулись.
Шаг № 3: свойства Gradle
Мы на последнем этапе. Помните подвох, с которым мы столкнулись при обновлении версии плагина Gradle? Оказывается, более новые версии Gradle уменьшают размер используемой памяти до 512 МБ. Это сделано для того, чтобы слабые машины не расходовали слишком много памяти. У меня компьютер с 16 гигабайтами оперативной памяти, поэтому я могу позволить себе скормить около 2-3 гигов демону Gradle, но ваши цифры могут отличаться.
Откройте файл gradle.properties, расположенный в корне вашего проекта, и добавьте следующую строку. Не забудьте выбрать размер в соответствии с вашими требованиями и спецификацией компьютера.
Пока мы это делаем, давайте также включим параллельные сборки и настройку по требованию в свойствах.
Вот как выглядит мой окончательный вариант файла gradle.properties :
Заключительные замечания
Это ни в коем случае не обширный охват всех способов оптимизации скорости сборки. Есть множество других вещей, которые я не рассмотрел в этом посте, таких как использование minSdk 21 при использовании MultiDex, предварительная индексация библиотек, отключение сжатия PNG и т. д., — это всего лишь некоторые из них.
Но большинство из этих конфигураций требуют более глубокого понимания системы сборки Android и опыта работы с крупными многомодульными проектами (где преимущества наиболее очевидны). Шаги, которые я упомянул выше, легко внедряются в проект даже джуниор разработчиками и имеют значительные выгоды. Я надеюсь, что это поможет вам увеличить скорость сборки!
Как устроен билд APK файла внутри
Процесс создания APK и компиляции кода
Рассматриваемые темы
Архитектура процессоров и зачем нужна виртуальная машина
Андроид после того как вышел в 2007 году претерпел множество изменений связанный с билд процессом, средой исполнения и улучшениями производительности.
У андроида много удивительных характеристик и одна из них разные архитектуры процессоров такие как ARM64 и x86
Невозможно скомпилировать код, который поддерживает каждую архитектуру. Вот именно поэтому используется Java виртуальная машина.
Понимание Java виртуальной машины
JVM это виртуальная машина, позволяющая устройству запускать код, который скомпилирован в Java байткод
Используя JVM, вы избавляетесь от проблемы с разной архитектурой процессоров.
JVM предоставляет переносимость и она позволяет запускать Java код в виртуальной среде, вместо того, чтобы запускать его сразу «на железе»
Но JVM была создана для систем с большими мощностями по ресурсам, а наш андроид имеет сравнительно мало памяти и заряда батареи.
По этой причине Google создал адаптированную под андроид виртуальную машину, которая называется Dalvik.
Компилируем исходный код
Для котлина есть kotlinc компилятор, который делает совместимый с Java байткод.
Байткод — это набор инструкций, который выполняется на целевом устройстве.
Java байткод — это набор инструкций для Java виртуальной машины.
Андроид виртуальная машина
Каждое андроид приложение работает на своей виртуальной машине. С версий 1.0 до 4.4, это был Dalvik. В андроид 4.4, вместе с Dalvik, Google представил в качестве эксперимента новый андроид runtime, который назывался ART
Но у андроида есть свой собственный оптимизированный формат байткода, который называется Dalvik bytecode — это просто инструкции машинного кода для процессора также как и JVM байткод.
Dex — это аббревиатура с английского — Dalvik Executable.
ART против Dalvik
Преимущество ART над Dalvik проявляется в том, что приложения запускаются быстрее, потому что весь DEX байткод транслируется в машинный код во время установки, не нужно дополнительного времени на компиляцию в рантайме.
ART и Dalvik совместимы, так что приложения разработанные для Dalvik должны работать и на ART.
Компиляция Dalvik (JIT- just in time) имела такие минусы как — быстрая трата батареи, лаги в приложениях и плохой перформанс. В Dalvik трансляция происходит только когда это нужно. Мы открываем новый экран и только в этот момент происходит трансляция, за счет этого установка происходит быстрее, но при этом проседает перформанс.
Это причина по которой Google сделал Android Runtime (ART).
ART — основан на AOT (ahead of time) компиляции, она происходит до того как приложение запустится.
В ART компиляция происходит во время установки приложения. Это ведет к более долгому времени установки, но уменьшает трату батареи и избавляет от лагов, которые были на Dalvik.
В андроид 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 для компиляции, туда передается по одному ресурсному файлу на каждый вызов
resources.arsc
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, включая подключенные библиотеки, то произойдет ошибка при билде