Android Broadcast
14.1K subscribers
3.42K photos
308 videos
11 files
5.73K links
Подборка новостей и статей для Android разработчиков.

Связь с автором @android_broadcast_bot
Реклама @android_broadcast_bot

РКН https://abdev.by/rkn_tg_ab
Download Telegram
#JakeWharton #R8 #Optimizations

R8 Optimization: Class Constant Operations

Продолжение серии статей о оптимизация кода, которые реализованы в R8 от Jake Wharton. В новой статье рассказывается о оптимизации констант классов.

Рассмотрим частый пример классов в константах:
private static final String TAG = "MyClass";
// or
private static final String TAG =
MyClass.class.getSimpleName();

Такие константы очень часто используются для логирования. Если рассмотреть после компиляции кода, то MyClass.class.getSimpleName() всегда будет возвращать одно и тоже значение - "MyClass". Фактически в оптимизированном байткоде можно делать подмену выполнения метода на простую строку. Важно понимать что это не работает для случая getClass().getSimpleName(), т.е. когда класс получается динамически.

R8 получила такую оптимизацию кода и теперь неважно как вы будете создать LOG_TAG для ваших логов 🎉

Android Studio 3.4 уже на подходе и R8 становится инструментом по умолчанию для оптимизации кода в ней.
#D8 #R8 #CPU #JVM

Android CPU, Compilers, D8 & R8

Статья о компиляции кода в Android и как Google улучшает процесс. В ней вы найдете:
👉 JVM и ее связи с Android
👉 Как работает JVM
👉 DEX
👉 Как читать байткод
👉 Как происходит сборка Android приложения
👉 Android Runtime (ART)
👉 D8 & R8
#R8 #Optimizations #JackWharton

R8 Optimization: Method Outlining

Продолжение серии статей от Jake Wharton об оптимизациях, выполняемых R8.

R8 умеет избавляться от констант, коротких методов, или методов, которые вызываются в одном месте, вставкой этого кода в место вызова. Это называется method inlining.

R8 также умеет избавляться от дублирующегося кода выделением его в новый метод и заменой оригинального кода на новый метод 🔥. Это называется method outlining.
#R8 #Proguard

Важно: R8 на моем проекте в этом релизе AS завелся сразу, но при включение full режима требуется дополнительная настройка. Самый безопасный режим включения R8 сейчас это добавить в gradle.properties вашего проекта следующее:
android.enableR8=true
android.enableR8.fullMode=false

Если вы столкнетесь с проблемами при переходе, то в первую очередь попробуйте перенастроить правила для обфускации и оптимизации кода.
Если это не помогает - откатитесь на Proguard (пока есть возможность) и сообщите о баге.
#R8 #Optimization #jakeWharton

R8 Optimization: Class Reflection and Forced Inlining

В новой серии статей Jake Wharton рассказывает о том как R8 умеет оптимизировать некоторые вызовы рефлексии и принудительный inline методов с помощью -alwaysinline.

Бойся ProGuard - R8 все качает мышцы и наращивает фичи
#R8 #JakeWharton #Optimization

R8 Optimization: Enum Ordinals and Names

Продолжение серии статей об оптимизациях, который выполняют R8. В этот раз разбираются Enum:
👉 inline вызовов функции ordinal()
👉 замена вызова функции name() на соответствующую строковую константу
#R8 #ProGuard

Comparison of ProGuard vs. R8: October 2019 edition

Proguard уходит из Android. Уже начиная с Android Gradle Plugin 3.4.0 по умолчанию используется R8. Смогла ли Google сделать продукт лучше? Однозначно сказать нельзя. Что-то лучше в R8, что-то в ProGuard, а что-то ProGuard уже скопировал у R8 😁

Разработчики ProGuard уже проводили сравнение, но решили это сделать повторно т.к. R8 развивается быстро. Новое сравнение предназначено для продвижение, но позволяет понять отдельные детали.