使用android studio AGP 7.0、Java 11和minimyEnabled=true
以下是我的方法
private void init(){
}
编译后,它变成了公共的final init((,因此我在运行时崩溃,说LinkageError为什么访问说明符在编译后会发生更改?
R8进行整个程序优化,如果该方法没有保留规则,R8可以使用该方法做任何事情,包括更改修饰符。如果你想确保方法保持不变,你可以添加一个保持规则,如下所示:
-keep class <class name holding method> {
private void init();
}
则R8不应触及该方法。
LinkageError
是否是由于在运行时添加未经R8处理的代码引起的?对于整个程序的优化和R8不知道的代码边界必须包含在保留规则中。