提问人:alphanso 提问时间:2/21/2022 最后编辑:alphanso 更新时间:3/2/2022 访问量:182
Android Studio Private 方法在编译后成为公共最终方法
Android Studio Private method becomes public final after compile
问:
使用 android studio AGP 7.0、Java 11 和 minifyEnabled=true
以下是我的方法
private void init(){
}
编译后,这成为公共的最终 init(),因此我得到运行时崩溃,说 LinkageError,为什么访问说明符在编译后会发生变化?
答:
1赞
sgjesse
3/2/2022
#1
R8 执行整个程序优化,如果该方法没有保留规则,R8 可以对该方法执行任何它想要的事情,包括更改修饰符。如果要确保方法保持不变,可以添加如下所示的保留规则:
-keep class <class name holding method> {
private void init();
}
则该方法不应被 R8 触及。
是由于在运行时添加 R8 未处理的代码引起的吗?对于整个程序的优化和 R8 未知代码的边界,必须由保留规则覆盖。LinkageError
评论