R8 меняет «защищенные» методы абстрактного класса на «publi c» без флага -allowaccessmodification - PullRequest
2 голосов
/ 10 января 2020

У меня проблема с R8. В MyLib у меня есть publi c abstract MyLibsClass, в котором у меня есть защищенные методы. MyChildClass простирается от MyLibsClass в MyApp и после магии R8 c все защищенные методы (включая защищенный реферат) в MyLibsClass заменяются на публичные c и, конечно же, на MyChildClass Я получение "attempting to assign weaker access privileges ('protected'); was 'public') проблемы с попыткой переопределить защищенные абстрактные методы.

Дополнительная информация

gradle-6.0.1

build.gradle MyLib

release {

        minifyEnabled true

        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),'proguard-rules.pro'
    }

proguard-rules.pro

- сохранить класс com.example.mylib. * {Publi c защищенный *; }

-класс класса com.example.mylib. $ {publi c protected *; }

У кого-нибудь была такая проблема или знаете способ ее исправить?

Ответы [ 2 ]

2 голосов
/ 13 января 2020

Таким образом, на основе обсуждения здесь ,

НЕ ИСПОЛЬЗУЙТЕ ПАРАМЕТРЫ ПРОГРАММЫ ПО УМОЛЧАНИЮ ДЛЯ БИБЛИОТЕК

, поскольку allowAccessModification включено по умолчанию настройки proguard, которые находятся в Android SDK (\Android\Sdk\tools\proguard\proguard-android-optimize.txt), и моя ошибка заключалась в использовании этого для моих библиотек.

Цитирование из руководства по proguard

вам, вероятно, не следует использовать эту опцию при обработке кода, который будет использоваться в качестве библиотеки, поскольку классы и члены класса не предназначенные для публикации в API c могут стать публикациями c.

Поэтому, если у кого-то возникнет такая же проблема, я предложу создать свой собственный базовый конфигурационный файл для proguard и скопируйте в него все настройки по умолчанию без "allowAccessModification".

Также, если кому-то интересно больше, вы можете отследить эту проблему. Надеемся получить отдельный файл конфигурации для библиотек в ближайшей функции.

0 голосов
/ 13 января 2020

Об этом также сообщалось на баг-трекере R8 и там разрешалось. См http://issuetracker.google.com/147447502.

...