Как ссылаться на скрытые методы в основном приложении для Android, используя систему сборки gradle.Я имею в виду фреймворк и другие файлы из папки, но не могу получить доступ к скрытому API.Есть ли способ получить доступ к скрытым методам.
Есть несколько способов.
Скрытый API Android
Пока вы хорошо настраиваете таргетинг на API 27 (API нет28 релиз на момент написания этого) этот способ прекрасно работает.Вы можете напрямую вызывать скрытые методы с правильным завершением кода и всем остальным.
Примечание. На момент написания этой статьи вам необходимо установить путь к классу Gradle на 3.1.4.3.2.0 добавляет некоторую проверку целостности, которая нарушает сборки при использовании модифицированного фреймворка JAR.
Использовать отражение
Это не идеально, но будет работать, если выхотите использовать API 28 или Gradle 3.2.0.
Пример (Kotlin):
val IWindowManager = Class.forName("android.view.IWindowManager") val IWindowManagerStub = Class.forName("android.view.IWindowManager\$Stub") val ServiceManager = Class.forName("android.os.ServiceManager") val binder = ServiceManager.getMethod("checkService", String::class.java).invoke(null, Context.WINDOW_SERVICE) val iWindowManagerInstance = IWindowManagerStub.getMethod("asInterface", Binder::class.java).invoke(null, binder) val hasNavBar = IWindowManager.getMethod("hasNavigationBar").invoke(iWindowManagerInstance) as Boolean