Ограничения Android P для интерфейсов, отличных от SDK — темный серый список против черного списка

Сегодня вышла Developer Preview 3, и я заметил некоторые изменения, связанные с интерфейсами, отличными от SDK:

Доступ к следующему API создает разные журналы на DP2 и DP3.

Class<?> androidIdClass = Class.forName("com.android.internal.R$id");
Integer search_close_btn = getFieldValue(androidIdClass, null, "search_close_btn");

DP2: Accessing hidden field Lcom/android/internal/R$id;->search_close_btn:I (blacklist, reflection)

Результат: NoSuchFieldException, невозможно получить доступ к полю

DP3: Accessing hidden field Lcom/android/internal/R$id;->search_close_btn:I (dark greylist, reflection)

Результат: поле доступно

Может кто-нибудь объяснить, почему это поле стало доступным в DP3 и в чем разница между темным серым списком и черным списком?


person Mickey Tin    schedule 07.06.2018    source источник
comment
Мишаал Рахман из XDA указал, что этот подкаст посвящен различиям в списках API. Что касается причины внесения изменений, я предполагаю, что кто-то подал жалобу, заявив, что им это нужно, и поэтому они понизили наказание. Если я правильно понимаю, это поле по-прежнему рискует стать недоступным в будущем.   -  person CommonsWare    schedule 08.06.2018
comment
@CommonsWare, спасибо за комментарий и ссылку на подкаст. Согласно информации в подкасте, черный список — это то, что, по их мнению, никто не использует, поэтому они добавили туда этот частный API, чтобы никто не мог начать его использовать. Я предполагаю, что DP2 показал, что используются API из черного списка, и они переместили эти API обратно в черный список.   -  person Mickey Tin    schedule 08.06.2018


Ответы (1)


Может кто-нибудь объяснить, почему это поле стало доступным в DP3?

  • Google постоянно блокирует вызовы, не относящиеся к SDK. Но они также открыли форум для разработчиков, где можно сообщать о проблемах, связанных с ними. Итак, чтобы ответить на ваш вопрос, кто-то мог создать тикет по этому поводу, который Google мог бы откатить. Есть смысл?

в чем разница между темным серым списком и черным списком?

  • Черный список — это вызовы, которые не будут работать независимо от того, на какой уровень API будет нацелено ваше приложение.

  • Темный серый список — это вызовы, которые не будут работать тогда и только тогда, когда ваше приложение нацелено на уровень API 28, иначе они будут работать нормально.

person Avinash Shinde    schedule 23.07.2018
comment
А как насчет greylist-max-p? Что произойдет, если вы настроите API уровня 28 и запустите Android 10? Работают ли вызовы, потому что целевой уровень API равен greylist-max-p, или не работают, потому что версия Android выше? Я действительно смущен этим. - person Alex Predescu; 29.07.2020