R8 将抽象类的“受保护”方法更改为“公共”方法,不带 -allowaccessmodification 标志

2023-12-13

我对 R8 有疑问。在MyLib我有公开摘要MyLibsClass其中我有受保护的方法。MyChildClass延伸自MyLibsClass in MyApp在 R8 的魔法之后,所有受保护的方法(包括受保护的抽象)MyLibsClass都变成了公共的,当然在MyChildClass我越来越"attempting to assign weaker access privileges ('protected'); was 'public')尝试覆盖受保护的抽象方法时出现问题。

附加信息

gradle-6.0.1

MyLib的build.gradle

release {
    minifyEnabled true
    proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'),'proguard-rules.pro'
}

proguard-rules.pro

-keep class com.example.mylib.*{
    public protected *; }

-keep class com.example.mylib.*$*{
    public protected *; }

有人遇到过此类问题或知道解决此问题的方法吗?


所以根据讨论here ,

不要对库使用默认的 PROGUARD 设置

as allowAccessModification在默认 proguard 设置中启用,该设置位于 Android SDK 中(\Android\Sdk\tools\proguard\proguard-android-optimize.txt)我的错误是在我的图书馆中使用它。

引文来自混淆器手册

在处理以下代码时,您可能不应该使用此选项 被用作库,因为类和类成员不是 设计为公开的 API 可能会公开。

因此,如果有人遇到同样的问题,我建议您创建自己的基本配置文件proguard并复制过去的整个默认配置,而不需要"allowAccessModification"进去。

另外,如果有人更感兴趣,您可以跟踪this问题。希望能够为附近的功能中的库获得单独的配置文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

R8 将抽象类的“受保护”方法更改为“公共”方法,不带 -allowaccessmodification 标志 的相关文章

随机推荐