Google может удалить доступ к недокументированным/скрытым API в Android P

Согласно набору коммитов в AOSP, Google может начать ограничивать доступ к недокументированным или скрытым API в Android P. Многие приложения известных брендов используют скрытые API для расширения функциональности, поэтому эффект может быть широко распространенным.

Обновление от 28 февраля 2018 г.: Google опубликовал сегодня сообщение в блоге, подтверждающее изменения. Подробности в конце статьи.

Хотя некоторые энтузиасты Android спекуляция В честь какого десерта будет названа следующая версия Android, за кулисами происходит несколько интересных событий. Мы заметили несколько заслуживающих внимания предстоящие функции в Android P, но недавнее открытие в Android Open Source Project (AOSP) оказалось гораздо более интересным. Согласно этим недавним изменениям, приложениям может быть ограничен доступ к API, которые не документированы в Android SDK (например, к API, отмеченным атрибутом @hide в javadoc).


Почему это важно

Комплект разработки программного обеспечения Android (SDK) предоставляет разработчикам библиотеки API и инструменты, необходимые для тестирования и создания новых приложений Android. С каждой новой версией Android появляется целый ряд новых API, которые доступны разработчикам через Android SDK. Какие API-интерфейсы доступны приложению, зависит от того, какую версию compileSDKVersion устанавливает разработчик. Вот почему Google

новые требования Play Store настолько значительны — это заставит приложения обновляться и переходить на использование более новых API.

Google хосты страницы документации для каждого класса и всех его методов, доступных на каждом уровне API. Это набор документированных API, доступных в официальном Android SDK. Вы можете легко просмотреть список классов с помощью приложения Android, например недавно выпущенного приложения Android SDK Search от Android Engineer. Джейк Уортон.

SDK-поискРазработчик: Джейк Уортон

Цена: Бесплатно.

4.1.

Скачать

Однако не все API, доступные в каждой версии Android, задокументированы Google или доступны в официальном Android SDK. Часто встречаются полезные API, которые недокументированный, но, тем не менее, очень полезны. Не рекомендуется разработчикам создавать свои приложения с использованием недокументированных или скрытых API, но многие делают это, потому что альтернативы просто нет, если они хотят предложить определенную функцию. Разработчики, использующие скрытые или недокументированные API, также могут получить конкурентное преимущество. поскольку они могут предлагать функции, которые их конкуренты, которые придерживаются API, предлагаемых Android SDK — нельзя.

Хотя я не могу предоставить список приложений, использующих недокументированные API (разработчики, вероятно, не делятся какие из них они используют, потому что это даст преимущество их конкурентам), список, вероятно, довольно большой. Таким образом, я бы пришел к выводу, что запрет доступа к скрытым API будет иметь важное значение. Марк Мерфи, основатель Общее ПО, согласен:

Я согласен с мнением, что массовый запрет доступа к элементам с аннотациями @hide будет иметь большое значение, если это произойдет. Будем надеяться, что немногие приложения получают доступ к этим элементам как к части ключевой функциональности. Однако я подозреваю, что многие приложения известных брендов время от времени используют их напрямую или через библиотеку.


Что происходит в Android P?

Эти предстоящие изменения были впервые отмечены старшим признанным разработчиком XDA. rovo89, разработчик Экспоузд фреймворк. Он указал мне на два коммита, один из который был объединенный, который представляет новый инструмент сборки под названием «hiddenapi». Этот инструмент изменяет флаги доступа всех членов класса в файле DEX, если их подписи появляются в входном сером или черном списке, и если это так, отмеченные методы будут рассматриваться как внутренние API с ограниченным доступом. доступ. Другой коммит описывает, как работает черный список API; это предотвращает доступ к класс загрузки методы и поля, отмеченные вышеупомянутым «скрытым API», к которым разработчики могут получить доступ посредством статического связывания, отражения и JNI.

По словам rovo89, конечный результат этих двух изменений в Android P следующий:

Если эти коммиты будут объединены, это будет означать, что приложения больше не смогут использовать скрытые API или получать к ним доступ, то есть классы, методы и поля, которые помечены @hide в AOSP и, следовательно, не являются частью официальный SDK. Это не будет проблемой для модулей Xposed, поскольку я мог бы легко отменить эти коммиты или разрешить модулям также получить доступ к этим API. Но существует множество приложений, использующих скрытые API, и они потерпят неудачу в будущее.

Действительно, дальнейшие данные показывают, что именно это и планирует Google. Этот совершить заявляет следующее:

Хотя этот конкретный коммит не был объединен, поскольку от него отказались в пользу трех меньших коммитов, сообщение о коммите описывает цель этих изменений. Еще один набор совершает покажите, что Google предложит альтернативы разработчикам, которые стремятся использовать закрытые API:

Однако некоторым скрытым API зачастую нет альтернативы. Мы в XDA можем говорить здесь по своему опыту: к сожалению, это изменение может означать конец некоторых инновационных приложений или может потребовать от некоторых известных приложений сократить их функциональность. Это предстоящее изменение похоже по духу на недавнее подавление служб доступности (это было к счастью остановился поскольку Google оценивал инновационное использование). Хотя большинство приложений, использующих недокументированные API, делают это по безобидным причинам, могут быть некоторые приложения, которые злоупотребляют ими в гнусных целях.

Из-за этого Google может заблокировать доступ ко всем скрытым API в Android P, чтобы защитить пользователей от тех немногих, кто ими злоупотребляет. Трудно сказать, какое влияние это может оказать на пользователей, но если вы разработчик рассматривая возможность поиска в AOSP инновационного использования скрытого API, возможно, вам захочется пересмотреть.


Обновление: Google подтверждает

В Сообщение блога опубликовано сегодня, 28 февраля, Google подтвердил эти изменения. Ссылаясь на риски сбоев для пользователей и впоследствии вынуждая разработчиков внедрять экстренные исправления, Google заявляет, что компания постепенно переходит к тому, чтобы отговаривать разработчиков от доступа к не-SDK интерфейсы. Начиная с Android P, ограничения будут распространяться на интерфейсы SDK на языке Java.

Компания заявляет, что «некоторые методы и поля, не относящиеся к SDK, будут ограничены», но не уточнила, какие из них будут ограничены. Первоначально ограничение будет касаться редко используемых интерфейсов, а на некоторое время компания разрешит разработчикам продолжать использовать методы и поля, не относящиеся к SDK, где переход к методу SDK технически невозможен. испытывающий. Однако со временем ограничения будут расширяться, поэтому разработчикам приложений, использующих методы, не связанные с SDK, следует как можно скорее перейти на Android P. Что касается методов, не имеющих альтернативы SDK, Google просит разработчиков опубликовать их на своих страницах. баг трекер с дополнительной информацией.

Следующая предварительная версия для разработчиков, которая якобы появится в ближайшее время, позволит разработчикам протестировать существующие приложения на предмет соответствия черному или серому списку перед финальным выпуском.