Android Studio Private方法在编译后成为公共最终方法



使用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不知道的代码边界必须包含在保留规则中。

相关内容

  • 没有找到相关文章

最新更新