对应sdk中代码:
//推荐使用的方法,官方不限制
public int getMonthLength(CalendarDate var1) {
BaseCalendar.Date var2 = (BaseCalendar.Date)var1;
int var3 = var2.getMonth();
if (var3 >= 1 && var3 <= 12) {
return this.getMonthLength(var2.getNormalizedYear(), var3);
} else {
throw new IllegalArgumentException("Illegal month value: " + var3);
}
}
//官方黑名单方法,运行在 P 设备上直接crash
private int getMonthLength(int var1, int var2) {
int var3 = DAYS_IN_MONTH[var2];
if (var2 == 2 && this.isLeapYear(var1)) {
++var3;
}
return var3;
}
所以呢,黑名单 虽然听起来 骇人听闻,但是对于存量app的影响倒不是很大,因为基本上都是一些私有的,罕见的方法。
影响范围最大的当属 深灰名单, 因为官方强烈不推荐使用,但是为了给开发者缓冲时间,只有 Target Api 28+ 才会出现异常,代表性的 Api 有 DexFile 类:
Ldalvik/system/DexFile;->(Ljava/io/File;Ljava/lang/ClassLoader;[Ldalvik/system/DexPathList E l e m e n t ; ) V L d a l v i k / s y s t e m / D e x F i l e ; − > < i n i t > ( L j a v a / l a n g / S t r i n g ; L j a v a / l a n g / C l a s s L o a d e r ; [ L d a l v i k / s y s t e m / D e x P a t h L i s t Element;)V Ldalvik/system/DexFile;-><init>(Ljava/lang/String;Ljava/lang/ClassLoader;[Ldalvik/system/DexPathList Element;)VLdalvik/