Android-приложение с использованием отличий Proguard & R8 - программирование
Подтвердить что ты не робот

Android-приложение с использованием отличий Proguard & R8

В моем приложении для Android я использую Google R8 (экспериментальный выпуск пока) и Proguard 6.0.3... Основываясь на своем опыте, как вы думаете? В чем главное отличие? С R8 мое приложение меньше по размеру, а скорость процесса по сравнению с Proguard действительно намного лучше. Количество классов при использовании R8 меньше по сравнению с Proguard.

R8 совместим с существующими правилами Proguard, но игнорирует некоторые из них:

Ignoring option: -optimizationpasses"
Ignoring option: -assumenoexternalreturnvalues"
Ignoring option: -assumenoexternalsideeffects"

например, он также предупреждает об отсутствующих классах, а не об ошибках

AGPBI: {"kind":"warning","text":"Missing class: sun.net.www.protocol.http.HttpURLConnection","sources":[{}],"tool":"D8"}
AGPBI: {"kind":"warning","text":"Missing class: com.sun.net.httpserver.HttpHandler","sources":[{}],"tool":"D8"}
AGPBI: {"kind":"warning","text":"Missing class: org.dbunit.dataset.datatype.DefaultDataTypeFactory","sources":[{}],"tool":"D8"}
AGPBI: {"kind":"warning","text":"Missing class: com.inmobi.ads.InMobiNative$NativeAdListener","sources":[{}],"tool":"D8"}
AGPBI: {"kind":"warning","text":"Missing class: javax.enterprise.util.AnnotationLiteral","sources":[{}],"tool":"D8"}
AGPBI: {"kind":"warning","text":"Missing class: sun.net.www.protocol.http.Handler","sources":[{}],"tool":"D8"}
AGPBI: {"kind":"warning","text":"Missing class: com.flurry.android.ads.FlurryAdNativeListener","sources":[{}],"tool":"D8"}
AGPBI: {"kind":"warning","text":"Missing class: sun.net.spi.nameservice.NameServiceDescriptor","sources":[{}],"tool":"D8"}
AGPBI: {"kind":"warning","text":"Missing class: java.lang.ClassValue","sources":[{}],"tool":"D8"}

В общем, я думаю, что R8 намного лучше, чем Proguard несмотря на то, что это все еще экспериментальная версия.

Google говорит:

R8 - это замена Proguard для минимизации и оптимизации всей программы.

и я думаю, что это действительно так.

Но как этот инструмент работает в деталях? Что делает главное различие между друг другом и как R8 работает глубоко?

ОБНОВИТЬ:

После обновления до Android Studio 3.3 Canary 2 при использовании R8 кажется, что размер APK не имеет никакой разницы от использования Proguard

PS: извините за мой английский :) :) :)

ОБНОВЛЕНИЕ (14-МАРТ-2019):

Последняя версия R8 на данный момент V. 1.4.71 кажется действительно хорошей, быстрее, чем Proguard, и при сравнении сгенерированных Apk/Bundle из R8 размер меньше. Также DEX-метод также меньше. Я использую R8 Shrinker в производстве, и все кажется очень многообещающим. Отличная работа на самом деле.

ОБНОВЛЕНИЕ (08-АПРЕЛЬ-2019):

Последняя версия R8 на данный момент V. 1.4.79 кажется действительно хорошей, быстрее, чем Proguard, и при сравнении сгенерированных Apk/Bundle из R8 размер меньше. Также DEX-метод также меньше. Я использую R8 Shrinker в производстве, и все кажется очень многообещающим. Отличная работа на самом деле.

4b9b3361