Comments 2
Я точно не поставлю 10 баллов за совместимость R8 c PG правилами. Потому что переход с PG на R8 был для меня болезненным. У меня было среднее по размеру приложение (где-то на 15 экранов), PG работал на настройках по-умолчанию, все работало. А когда я обновил AGP, в котором заменили PG на R8, у меня приложение стало падать. Причина оказалась как раз в том, что в R8 работает не точно также как PG. R8 почему-то удалил некоторые вещи в моём коде, и пришлось явно прописать удаленные вещи в правилах R8, чтобы они не удалялись. При следующем обновлении AGP, R8 стал удалять ещё что-то, я тогда плюнул на все это, и просто прописал в настройках следующее правило:
# Не удалять, но обфусцировать классы и их содержимое
-keep,allowobfuscation class ** { *; }
kosikov2006. Согласен, это два не совершенно одинаковых продукта. Совместимость PG-R8 распространяется на уровне поддержки файлов с правилами, но не абсолютно всех правил и уж тем более их реализации (вспомните хотя бы сравнение оптимизаций (520 к 6)).
Уверен, у вас всё получится :)
- Если вас не устраивает R8, но пользоваться новыми версиями AGP все же хочется, то обратите внимание на инструкции:
android.enableR8=false
android.enableR8.libraries=false
- Если хотите совладать с R8, то попробуйте проанализировать содержимое папки app/build/outputs/mapping/(build)/, а именно файлов: configuration.txt, mapping.txt, resources.txt, seeds.txt, usage.txt. Там вы найдете артефакты PG/R8, по которым можно выяснить, как прошла оптимизация.
Уверен, у вас всё получится :)
Sign up to leave a comment.
Оптимизация сборок Android приложений: ProGuard, D8, R8. Тайны обфускации