Proguard с Butterknife предотвращает запутывание имен классов

Поскольку Butterknife использует отражение для создания классов, связанных с каждым используемым activity или fragment. из-за чего Proguard игнорирует эти классы и не запутывает их в своих правилах.

нашел один обходной путь для этого - использовать сгенерированные классы Butterknife, заменив ButterKnife.bind(this) новым Whatever_ViewBinder(this) и используя их в моем коде. который действительно работает, и Progurad запутывает мои классы. но единственная проблема здесь в том, что мне нужно скопировать их из папки Debug в мой пакет, чтобы они не были изменены/удалены. и обновлять его каждый раз, когда я добавляю/удаляю просмотры. источник

я нашел еще один вопрос, в котором говорится, что лучше использовать привязку данных вместо Butterknife vs Data Binding. но уже слишком поздно менять весь код

Пожалуйста, поделитесь, если вы нашли какую-либо работу для этого. Я использую Butterknife v8.6.0. если это поможет


person Jolson Da Costa    schedule 31.05.2017    source источник
comment
В чем проблема, если вы не копируете из папки отладки?   -  person Tin Tran    schedule 06.06.2017
comment
Попробуйте этот ответ: stackoverflow.com/a/44199166/3280468   -  person Amit Sharma    schedule 08.06.2017


Ответы (1)


Вы даже сами ссылались на свои ответы с помощью #746.

[...] пока я не удалю из класса весь импорт Butter Knife, Proguard не будет с ним работать.

Это связано с тем, что правила Proguard поставляются вместе с самим Butter Knife до версии 9.0.

Правила ProGuard будут разделены в версии 9.0, когда использование сгенерированного кода API станет стабильным.

Так что в принципе невозможно легко сделать то, что вы собираетесь сделать. Лучше всего было бы разветвить Butter Knife и удалить определение consumerProguardFiles из build.gradle. Затем дождитесь выхода версии 9.0 и снова используйте оригинал.

person tynn    schedule 04.06.2017
comment
Я думаю, это единственный вариант на данный момент. если это не сработает, то будем надеяться на v9. в любом случае спасибо - person Jolson Da Costa; 08.06.2017