обратитесь к функциям AOS в Android Core App, используя Gradle - PullRequest
0 голосов
/ 11 октября 2018

Как ссылаться на скрытые методы в основном приложении для Android, используя систему сборки gradle.Я имею в виду фреймворк и другие файлы из папки, но не могу получить доступ к скрытому API.Есть ли способ получить доступ к скрытым методам.

1 Ответ

0 голосов
/ 11 октября 2018

Есть несколько способов.

  1. Скрытый API Android

    Пока вы хорошо настраиваете таргетинг на API 27 (API нет28 релиз на момент написания этого) этот способ прекрасно работает.Вы можете напрямую вызывать скрытые методы с правильным завершением кода и всем остальным.

    Примечание. На момент написания этой статьи вам необходимо установить путь к классу Gradle на 3.1.4.3.2.0 добавляет некоторую проверку целостности, которая нарушает сборки при использовании модифицированного фреймворка JAR.

  2. Использовать отражение

    Это не идеально, но будет работать, если выхотите использовать 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
    
...