在Android Gradle插件4.2.x中,assumenosideeffects的行为发生了变化。在此之前,当使用assumenosideeffects时,ProGuard将删除方法调用,并将进行相应的优化。然而,现在,即使使用assumenosideeffects,ProGuard也会保留方法调用,并仅标记它们不会引起任何可见效果。这意味着具有副作用的方法调用将不再被删除。
为了解决这个问题,我们可以使用一个新的ProGuard选项:dontshrink。这将确保方法不被缩小,即使使用了assumenosideeffects。以下是一个示例配置:
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
// Disable shrinking for methods with no side effects
proguardFiles.add(file('proguard-dontshrink.txt'))
}
}
然后,在proguard-dontshrink.txt文件中,添加要保留的方法列表:
-dontshrink
-keep class com.example.MyClass {
boolean myMethod(int);
}