Сразу хочу предупредить, что я в сборке под Андроид полнейший ноль, поэтому могу дико косячить с терминологией, пониманием даже самых базовых элементарнейших вещей и вообще чем угодно. Прошу снисхождения.
Захотелось мне попробовать пропатчить для себя одну open-source андроидную прожку, QKSMS,
https://github.com/moezbhatti/qksms
Однако застрял даже на попытке компиляции исходного немодицифированного проекта. Проект состоит из пяти модулей, причём один из них (android-smsmms) настроен на сборку в SDK 25, остальные — SDK 29. Насколько я понял, связано это с тем, что android-smsmms использует deprecated-интерфейсы, которые будут невидимы, если версию поднять. Для остальных же нужна версия 29 для поддержки механизма RoleManager. Однако при попытке сборки проекта модуль data падает с ошибками, которые выглядят так, будто модуль собирается 25-й версией. А именно, в файле
data/src/main/java/com/moez/QKSMS/manager/PermissionManagerImpl.kt выдаётся ругань на:
1) слово "role" в
строчке
import android.app.role.RoleManager
с сообщением
Unresolved reference: role
2) идентификатор "Q" в
строчке
return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
<...>
с ошибкой:
Unresolved reference: Q
(Дальше идут ещё несколько ошибок, но они уже являются следствием того, что не импортировался класс RoleManager.)
Гугление показало, что этот самый RoleManager как раз был добавлен в 29-й версии (ну и версионная константа Q имеет значение 29). Когда я ради эксперимента заменил константу Q на N_MR1, значение которой равно 25, ругань на это место исчезла, а с константой O=26 снова появилась. Это подтверждает гипотезу об использовании сборочной системой 25-го SDK. Но в файле build.gradle для этого модуля прописана версия 29, и если открыть настройки модулей в IDE, то там отображается версия 29, и когда я ставлю курсор на VERSION_CODES и жму Ctrl+B для перехода к определению, открывается класс именно из версии 29, содержащий все необходимые константы вплоть до Q.
Сам я никаких спецнастроек не делал, выбор инструментов, сборочной среды и прочего оставил целиком на умолчальные параметры проекта, как они были в репозитории. Со своей стороны я: установил Студию, доустановил необходимые версии SDK, принял лицензии, открыл в Студии проект qksms, дождался завершения всевозможных фоновых процессов, запустил сборку. (Реальный путь был более извилистым и тернистым, но в итоге свёлся к перечисленному.) В процессе поиска решений проблемы пытался играться с версиями SDK (в результате чего как раз и узнал об использовании deprecated в модуле android-smsmms); попробовал указать Build Tools Version 29.0.2; переключил с умолчальной debug-версии на release… На результаты сборки это всё не повлияло ни в малейшей степени.
Прошу помощи у всемогущего all.
Android Studio 4.1.1; OS: Windows 10 20H2.
Установлены версии SDK: 25, 29, 30.