Xposed framework что это
В 2012 году пользователь с ником rovo89 на комьюнити XDA опубликовал исходные коды и готовый к использованию фреймворк, упрощающий кастомизацию прошивок, с подробной инструкцией и примерами, предложив альтернативу традицоинному, на тот момент, способу (деодексирование→ дизассемблирование → декомпиляция → рекомпиляция → тестирование → загрузка патчей в телефон): Часть 1, Часть 2, Часть 3, Часть 4
Он предложил использовать отдельные модули, которые можно изменять фактически налету, не вмешиваясь в исходный код прошивки или отдельных ее компонентов. Но авторитетные разработчики хором ответили: "Неа… никому это не нужно"
Rovo не забросил свое детище, а продолжил развитие. Когда в 2013-ом году вышла версия KitKat, все то же сообщество именитых девелоперов ответило: "Неа, это слишком опасно… хотя. "
Тем временем Google принял решение выпускать новую версию операционной системы ежегодно. Разумеется, стало накладно кастомизировать прошивки: не успеваешь сделать одну, как появляется новая версия ОС. Так в 2014-ом выходит версия Lollipop и разработчики наконец обращают внимание на фреймфорк с мыслями: "Может все же стоит посмотреть что это такое? Выглядит многообещающим".
В 2015-ом году вышла очередная версия (Marshmallow) и большая часть сообщества, в итоге, признала разработку весьма стоящей, на порядок сокращающей время разработки кастомизаций стоковых прошивок в виде установки отдельных модулей, расширяющих функционал. "Ничего себе, это же совсем безопасно и есть библиотека готовых полезных модулей!" — воскликнули они.
Сейчас конец февраля 2017-го. Xposed под Nougat все еще не доступен, а толпы страждущих разработчиков и пользователей то и дело открывают темы под тип "Xposed не работает! Он мне нужен! Rovo, пожалуйста!"
Сегодня я расскажу об Xposed Framework.
Отказ от ответственности
Установка и использование Xposed
Установка фреймворка. Если на вашем смартфоне установлен «чистый» Android с минимумом изменений, вам повезло. В большинстве случаев достаточно установить официальную версию Xposed Installer в виде apk-файла и нажать пару кнопок в его интерфейсе для установки фреймворка в систему. Обязательно убедитесь в том, что инсталлятор соответствует архитектуре процессора вашего гаджета и версии операционной системы.
В том случае, если ваш гаджет работает на кастомизированной версии Android, например, Samsung Experience, MIUI, EMUI, Flyme OS или подобных, вам потребуется специальная версия Xposed — ссылки на модификации расположены в шапке темы на форуме, посвящённой фреймворку. Однако перед установкой не помешает уточнить в теме обсуждения или прошивки вашего аппарата, какая именно версия Xposed работает с ним без проблем.
Установка модулей. Что касается модулей, то немалая их часть уже есть в каталоге Xposed Installer, где для загрузки и установки достаточно нажать одну кнопку. Множество дополнительных модулей находятся в свободном доступе в Google Play — их несложно найти, введя название фреймворка в строку поиска.
Наконец, некоторые модули вроде GravityBox распространяются только сайтах разработчиков или специализированных ресурсах. На нашем форуме тоже есть обширный каталог, который содержит больше 150 модулей для Xposed с описаниями их функциональности.
Напоследок дадим несколько советов по использованию Xposed, которые помогут минимизировать риск вывести устройство из строя:
- устанавливайте по одному модулю за раз. Так вы сможете точно найти виновника неполадок при их возникновении и обезопасите себя от конфликтов между модулями;
- всегда перезагружайте смартфон после установки модуля. После установки нового модуля Xposed предлагает либо только активировать модуль, либо активировать и перезагрузить. Мы советуем выбирать именно второй вариант, поскольку для некоторых модулей перезагрузка перед первым запуском — обязательное условие их правильной работы.
- устанавливайте только проверенные модули. Xposed обладает глубоким контролем над системой, а потому существование вредоносных программ, выполненных в виде модулей для фреймворка вполне логично. Мы рекомендуем устанавливать модули только из встроенного каталога Xposed, с официальных сайтов разработчиков и форумов 4PDA и xda, где каждый модуль проверяется много раз другими пользователями.
Полезные ссылки по теме:
Как установить Xposed Framework
Установить Xposed Framework возможно только с помощью специальной утилиты, которая называется Xposed Installer. Сделать это придется из apk-файла, так как в каталоге Google Play эта программа отсутствует. Для установки необходим Android версии 4.0.3 и выше, однако Android L пока не поддерживается. Перед началом необходимо убедиться, что у вас разрешена установка программ из незнакомых источников. Сделать это можно в разделе Безопасность настроек операционной системы. Кроме этого, еще раз хочу напомнить о необходимости обладания правами суперпользователя. Если все эти требования вами соблюдены, то выполните следующие шаги:
1. Скачайте apk-файл с этой страницы и сохраните его в любом удобном месте на своём гаджете.
2. Откройте инсталляционный файл и установите утилиту Xposed Installer.
3. Запустите установленную программу. Перейдите в раздел Фреймворк и нажмите кнопку Установить/Обновить.
4. После этого появится запрос на предоставление прав суперпользователя, с которым вы должны согласиться. Далее автоматически загрузятся и установятся необходимые для работы фреймворка файлы.
5. Перезагрузите устройство.
Теперь в вашем телефоне появилась среда выполнения Xposed Framework и можно найти и подключить нужные модули.
Принцип работы
Перед тем, как установить и использовать этот замечательный продукт, стоит понять принцип работы самого Xposed Framework и понять главное: он взаимодействует с системой на очень глубоком уровне, и его использование без должных знаний может нанести вред вашему устройству.
В операционной системе Android существует процесс под названием «Зигота» (англ. «Zygote») — если погуглить, что это такое и разобраться с кучей непонятных научных терминов, то можно предположить, что этот процесс постоянно порождает себе подобных — так и есть. «Zygote» — это своеобразное сердце виртуальной машины Android, по подобию которого создаются другие процессы в нашей любимой операционной системе, поэтому «зигота» начинает своё существование ещё во время загрузки устройства. Отвечает за это скрипт "/init.rc".
Каждый новый процесс создаётся по подобию «зиготы» и приводятся в действие благодаря «system/app_process», с помощью которого запускаются все методы и классы, предусмотренные разработчиком. И здесь в игру вступает Xposed: он заменяет стоковый файл «app_process» на свой собственный модифицированный. Здесь дополнительно подключается ещё один jar-файл, который подсоединяется к classpath, и вызывает некоторые методы или классы. И ещё до метода «main» «зиготы», что, говоря простым языком, является отправной точкой процесса, мы имеем доступ ко всему содержимому процесса.
Возможности, предоставляемые Xposed, можно получить с помощью набора XposedBridge API, который находится в открытом доступе на GitHub. К API прилагаются весьма подробные гайды, которые помогут разобраться с основными методами и классами.
Сам Xposed не несёт никакой дополнительной функции кроме своей основной — обеспечения доступа к app_process. Но так называемые модули, которые были созданы с использованием XposedBridge, могут выполнять самые разнообразные действия. Например, смена цвета часов на информационной панели. Или обход защиты банковского приложения — всё зависит от ваших пожеланий. Сегодня вы научитесь устанавливать Xposed Framework и любые интересующие вас дополнительные модули.
Xposed
версии: 2.6.1 / 3.1.5 | 89.0
Последнее обновление программы в шапке: 27.01.2018
В данной теме ведется обсуждение работы Xposed Framework и различных его модулей.
Публикация готовых модулей производится только в теме Xposed framework modules .
Для функционирования программы необходимы права root пользователя.
Краткое описание: системная программа для изменения настроек прошивок и приложений без их декомпиляции.
Вопросы вида "какую версию мне ставить?" свидетельствуют о полном игнорировании FAQ и удаляются без предупреждения как флуд, замусоривающий тему. То же касается и других вопросов, разобранных в FAQ. Соблюдайте п. 4.4 правил 4PDA !
Xposed - это продукт независимых разработчиков, который позволяет вносить изменения в системные ресурсы и конфигурационные файлы, что необходимо для добавления новых или модификации существующих функций Android. В рамках этого проекта были написаны десятки, а может уже и сотни различных утилит, каждая из которых служит для своей конкретной задачи. Например, есть инструменты, которые отключают встроенную рекламу в программах, изменяют вид и цвет иконок в строке состояния, позволяют управлять смартфоном жестами и многое другое. Эти утилиты работают в специальной среде выполнения Xposed Framework, к которой подключаются в виде отдельных модулей.
Таким образом, для получения полного доступа ко всем скрытым возможностям своего смартфона нам придется сначала получить рут, затем инсталлировать Xposed Framework, после этого загрузить и установить необходимые модули. Расскажем о каждом из перечисленных шагов подробнее.
Заключение
Я привел основные трюки и решения задач программирования, с которыми столкнулся за все время разработки различных модулей. Не вижу смысла разбирать каждый случай в деталях, так как опытным программистам достаточно воспользоваться руководствами от автора здесь и здесь.
На этом я планирую закончить цикл статей про модификацию прошивок, но тема практического применения Xposed, надеюсь, не закрыта. Есть в планах большая статья о том, как я работал водителем Uber и разработал Xposed модуль, который давал мне расширенную информацию как о предстоящей поездке, так и во время выполнения заказа, что, к моему удивлению, не предусмотрено в стандартном приложении. Получил весьма и весьма интересный опыт и сделал выводы: как о качестве самой архитектуры Uber, так и о том, какая информацию передается через приложение о пользователях и как, возможно, компания планирует монетизировать свой сервис и полученные данные в будущем.
Даже «из коробки» Android даёт пользователю немало возможностей по кастомизации, но иногда хочется большего. На радикальные эксперименты со своим смартфоном готовы далеко не все, однако создать интерфейс своей мечты можно и без перепрошивки устройства. Поможет в этом программа для тюнинга системы Xposed. Среди прочего, она позволит уменьшить энергопотребление гаджета, активировать пробуждение двойным тапом, управлять камерой и плеером аппаратными клавишами, проигрывать видео с YouTube в фоне, усовершенствовать MIUI или другую фирменную оболочку.
Что умеет Xposed
А умеет Xposed практически всё, на что хватает фантазии разработчиков: для фреймворка существуют сотни модулей с самым разным предназначением. Мы приведём в качестве примеров несколько ярких и полезных возможностей Xposed.
Экономия заряда батареи. В одной из статей мы рассказывали, как wakelock’и влияют на расход заряда батареи и предложили способ их отключения без root-доступа. Однако если он у вас есть, вы можете поставить модуль Amplify Battery Extender для Xposed, который проанализирует все wakelock’и и будет ограничивать их активность автоматически — ему не требуется абсолютно никаких настроек.
Переназначение кнопок. Хотите переключать треки качелькой регулировки громкости? Или назначить собственное действие на клавишу с фирменной функцией, например, Bixby в новых флагманах Samsung? С этим справится модуль Xposed Additions Pro, который не только позволяет настроить своё действие для короткого и длинного нажатия любой клавиши (включая сенсорные кнопки навигации), но и поддерживает три условия для их работы: при включённом и выключенном дисплее, а также на экране блокировки. То есть, одна и та же клавиша может выполнять разные действия в зависимости от того, заблокирован гаджет или нет.
Свайпы на выключенном экране. Некоторые смартфоны «из коробки» поддерживают функцию разблокировки двойным тапом и запуск разных программ свайпами по заблокированному экрану, но если ваш гаджет не в их числе, вы всегда можете «научить» его этому с помощью модуля Wake Gestures. Для его работы, правда, нужна поддержка этой возможности ядром — если модуль после запуска сообщит о том, что её нет, вам придётся найти альтернативную прошивку с подходящим ядром.
Тюнинг внешнего вида системы. Существуют десятки модулей Xposed, позволяющих так или иначе изменить внешний вид системы. Чаще всего их функциональность ограничена — например, изменением только панели уведомлений или экрана блокировки. Но есть и настоящие монстры, позволяющие изменить практически каждый элемент системы, один из таких модулей — GravityBox.
Среди возможностей GravityBox — тонкая настройка внешнего вида и поведения различных системных элементов: экрана блокировки, строки состояния, панели уведомлений, навигационной панели и множества других. С помощью GravityBox вы можете использовать подсветку сенсорных кнопок навигации в качестве индикатора уведомлений, добавить в панель навигации кнопки управления курсором при активной клавиатуре или настроить отображении фотографии звонящего на весь экран. Полное изучение настроек GravityBox может занять немало времени, но результат того стоит.
Тюнинг фирменных оболочек. Несмотря на то, что большинство модулей Xposed требуют для работы «чистый» Android, некоторые, напротив, предназначены для работы с фирменными оболочками производителей, например, с MIUI. Модуль ExtMIUI, разработанный, между прочим, с помощью пользователей нашего форума, имеет множество настроек, позволяющих расширить функциональность и изменить внешний вид фирменных прошивок Xiaomi.
Принцип работы «на пальцах»
В системе Android есть процесс под название «Zygote». Это и есть основная исполнительная система. Любой процесс запускается как его копия. Zygote запускается через /init.rc как только загружается основное ядро системы. Запуск приложений осуществляется через скрипт /system/bin/app_process, который подгружает необходимые классы и запускает инициализацию приложения через задекларированные методы.
Именно в этом месте на сцену выходит Xposed. При установке фреймворка модифицированный app_process копируется в /system/bin. Суть модификации в том, что в переменную среду добавляется дополнительная jar библиотека, которая может исполнять специальные методы при определенных условиях и случаях. Например, мы можем вмешаться сразу, как только создается виртуальная машина Dalvik или даже перед тем как будет вызван основной метод Zygote. Являясь частью процесса Zygote, мы можем вмешиваться в работу любых методов, даже синтетических и производить любые действия в их контексте.
Как установить модули Xposed
Модули для Xposed Framework могут быть установлены сразу несколькими способами. Во-первых, многие модули вы сможете найти в магазине приложений Google Play и установить как обычные программы. Во-вторых, в сети существует специальный каталог Xposed Module Repository, откуда вы сможете их скачать в виде apk-файлов. И третий способ заключается в использовании установленного нами ранее Xposed Installer. Остановимся на этом методе подробнее
Для того, чтобы добавить новый модуль прямо из интерфейса утилиты Xposed Installer необходимо выполнить следующие действия:
1. Запустите Xposed Installer и перейдите в раздел Загрузка.
2. Здесь вы увидите длинный перечень доступных модулей и их краткое описание.
3. Найдите необходимый вам элемент с помощью строки поиска.
4. Нажмите на название нужного модуля. Перед вами откроется его подробное описание.
5. Свайпом перейдите на соседнюю вкладку Версии и нажмите кнопку Загрузка. Начнется установка выбранного вами модуля.
6. Вернитесь обратно в раздел Модули Xposed Framework и активируйте установленный модуль установкой флажка возле его названия.
7. Перезагрузите устройство.
Обратите внимание, что два последних пункта вам необходимо выполнить независимо от способа установки. То есть даже в том случае, если вы установили модуль из Google Play или в виде отдельного файла, вам все равно перед использованием нужно активировать его в списке Xposed Installer и перезагрузить устройство.
Возможно, для некоторых наших читателей, особенно только знакомящихся с устройством Android, данная инструкция покажется слишком длинной и сложной. Однако это совсем не так - все описанные действия занимают буквально несколько минут и ни в коем случае не могут нанести вред вашему гаджету. Зато взамен вы получите десятки полезных функций, которые позволят вам использовать свое устройство намного быстрее, удобнее и продуктивнее. О некоторых из них мы расскажем в следующих статьях.
Практическая ценность Xposed
Предположим, необходимо изменить какой-то метод, и, например, вместо булева значения TRUE вернуть FALSE. Вместо трудоемкого и затратного традиционного метода (разбираем-собираем-тестируем приложение) вы можете «перехватить» этот метод класса и «вживить» свой Java код, который произведет необходимую операцию (изменит, в данном примере, значение) и вернет нужный нам результат. При этом, с Xposed можно: модифицировать или просто посмотреть какие данные передаются в метод, либо после исполнения метода узнать результат обработки данных и в зависимости от требований изменить их или воспользоваться ими.
Бывают случаи, когда вы не хотите, чтобы тот или иной метод вообще срабатывал, либо хотите полностью поменять логику и алгоритм. Xposed позволяет полностью заменить метод, либо не дать ему вообще сработать.
В случае с ресурсами стало вообще все просто. Вы загружаете в свой модуль свои ресурсы, хоть графические элементы, хоть цельные xml файлы и при загрузке модуля в память можете заменять их при инициализации.
А теперь главное — зачастую не приходится даже изменять работу модуля (или производить минимальные доработки) с выходом новой версии прошивки/приложения! Это логично, ведь названия методов, классов и переменных, как правило, остаются прежними.
Не правда ли, удобно?
Что такое Xposed?
Xposed — это фреймворк, то есть, «каркас», для работы специальных приложений-модулей. Они предназначены для модификации системных файлов и стороннего ПО. Чтобы фреймворк мог обеспечить работу модулей и управлять ими, его необходимо сделать системным приложением с повышенными привилегиями. Как несложно догадаться, для этого вам потребуются права суперпользователя.
Как и root, Xposed может быть несистемным, то есть, устанавливаться не в системный раздел устройства, а в специально выделенный. Главное преимущество такого подхода — неизменный системный раздел и его контрольная сумма, что даёт возможность получения и установки OTA-обновлений. Возможность использования несистемного root-доступа на конкретном смартфоне можно проверить на форуме в разделе прошивок, а дополнительные сведения о несистемном Xposed и возможности его использования на различных устройствах — почерпнуть в теме, посвящённой непосредственно фреймворку.
Полезные ссылки по теме:
Отступление
Больше трех лет назад я начал писать цикл статей про модификацию прошивок для Android. В данный момент актуальность данных статей весьма сомнительна: процесс очень трудоемок, требует много времени и инструментов, а малейшая ошибка может обернуться значительными проблемами вплоть до полной перепрошивки телефона.
Я прождал около двух лет в надежде, что кто-то все же опишет на Хабре что такое Xposed Framework и как он может упросить процесс кастомизации приложений, но подозреваю, что мало кто знаком с этим чудным творением. Для своих нужд я написал несколько десятков модулей, некоторые даже публиковал в общем репозитарии, который на данный момент содержит более 1000 готовых к эксплуатации разработок. Каждый модуль — это может быть не одна единственная кастомизация, а целый набор функций с интерфейсом настроек или дополнительного функционала. Яркий пример тому GravityBox или Sense ToolBox.
Я не буду описывать процесс установки и получение root прав, а хочу описать что из себя представляет фреймфорк и как написать простейший модуль.
Java class
Сам класс должен содержать один из трех методов для работы с фреймворком. Не обязательно указывать все, можно лишь указать те, с которыми вы планируете делать модификацию приложения или приложений. Я по привычке указываю все как шаблон.
Метод initZygote исполняется тогда, когда ваш модуль загружается в память.
Весьма удобен, если в вашем приложении имеется Activity с настройками вашего модуля. Как правило, данные вашего приложения сохраняются в файл
/data/data/YOUR_PACKAGE_NAME/shared_prefs/YOUR_PACKAGE_NAME_preferences.xml . Во время загрузки вы можете единожды получить дескриптор и во время работы просто считывать с него ваши настройки. Также можно предопределить любые переменные, сделать проверки. По сути это аналог метода-конструктора.
Метод handleLoadPackage исполняется в тот момент, когда Dalvik загружает исходный код любого! приложения при запуске. Это очень важный момент. Если у вас в телефоне 10 различных модулей, то через этот метод исходники запускаемого приложения «прогонятся» во всех 10-ти случаях. Для фильтрации используется обычная проверка по названию пакета. Разумеется, если вы хотите изменить работу нескольких приложений, то ставите столько проверок сколько вам нужно.
Метод handleInitPackageResources нужен вам тогда, когда вы хотите подменить ресурсы приложения во время их загрузки в память. Здесь тоже самое как и с handleLoadPackage — вы фильтруете по названию приложения.
Важно указать наименование приложения так, как оно указано в манифесте. На этом настройка модуля в среде разработки закончена и можем приступить непосредственно к программированию.
Manifest.xml
При установке любого приложения Xposed проверяет наличие определенных заголовков в Manifest.xml. Если есть три нужные строки, то фреймворк сохраняет информацию о приложении в своих настройках и далее вы можете активировать установленный модуль (здесь и далее будут использоваться примеры кода разных модулей, в том числе и для из известных приложений).
С первой строкой все понятно.
Во второй строке указываем минимальную версию фреймворка для работы с модулем. Каждая версия заточена под определенный релиз Android и чтобы модуль случайно не был запущен на платформе, для которой он не предназначен, указывается версия.
Третья строка определяет как будет идентифицироваться ваше приложение в списке доступных или установленных модулей на вашем телефоне.
Подготовка к установке Xposed
Если вы решили установить Xposed на свой гаджет, первым шагом должно стать получение прав суперпользователя. Универсального метода нет, но найти пошаговую инструкцию почти для любого смартфона вы можете на нашем форуме в теме, посвящённой прошивке вашего аппарата.
Второй шаг — установка стороннего recovery. Это нужно для создания так называемого Nandroid-бэкапа, то есть полной резервной копии всей системы в одном архиве. Инструкции по установке recovery можно найти там же, в теме прошивки смартфона.
Наконец, третий шаг — непосредственно создание бэкапа. Не сделав его, вы рискуете потерять все настройки и данные в случае, если установка Xposed или одного из модулей приведёт к зависанию системы.
Если что-то пошло не так, нужно перезагрузиться в режиме восстановления. Обычно для этого необходимо при включении смартфона удерживать кнопку уменьшения или увеличения громкости. Зайдя в «рекавери», первым делом необходимо очистить накопитель от остатков нерабочей системы — сделать Wipe. После этого вернитесь в главное меню и нажмите на Restore (для TWRP) или Backup and restore (для CWM). Вне зависимости от того, какой recovery вы используете, дальнейшие действия будут интуитивно понятны: вам необходимо выбрать архив с резервной копией и подтвердить действие. Если бэкапа нет, после сброса (Wipe) вы можете через «рекавери» установить на смартфон ту же самую или другую прошивку, поставляемую в виде zip-файла.
Полезные ссылки по теме:
/assets/xposed_init
В корне вашего приложения необходимо создать папку assets и положить в него файл с названием xposed_init. Внутри этого файла вы просто пишите в каком Java классе описана работа вашего модуля. Я привык называть класс как XMain. В моем случае в файле присутствует строка
Заключение
Xposed нельзя назвать простым способом, особенно если вы используете прошивки со сторонними оболочками. Но наградой становится глубокий тюнинг, новые возможности для всей системы и отдельных приложений. Не случайно же фреймворк настолько популярен: для него написаны сотни самых разнообразных модулей. Чтобы возможные неполадки при установка Xposed не стали для вас проблемой — предварительно делайте резервные копии. Nandroid-бэкап можно восстановить буквально парой нажатий в recovery, и, если он у вас есть, можете смело экспериментировать.
Фанаты различных мобильных операционных систем частенько устраивают «стычки» на форумах, пытаясь доказать, что их выбор — самый лучший. Android — операционную систему от Google — часто обвиняли в плохой оптимизации под железо, «мусор» в магазине приложений и «прожорливости» по отношению к ресурсам аккумулятора — но никто никогда не оспаривал статус Android как свободной для модификаций и открытой для разработчиков операционной системы.
За всё время её существования сообщество сгенерировало огромную массу различных модификаций — от простого модифицированного SystemUI до полноценного проекта по созданию идеальной прошивки. Но самым известным продуктом можно назвать Xposed Framework — действительно необычную разработку под Android.
С момента своего «зарождения» ещё во времена, когда Android украшал лишь блёклый Holo, а Root можно было получить одним кликом, прошло уже много времени. Xposed встретил на своём пути немало препятствий: обновления Android, смену виртуальной машины, повышение общего уровня защиты ОС — но это не смогло сломить проект на его пути и не мешает ему до сих пор.
Создание модуля
Сам модуль — это обычный apk файл, созданный в среде разработки. В нем не обязательно должно присутствовать какое-то Activity либо графические ресурсы. По сути там может быть только один файл с инструкцией, разумеется помимо обязательных файлов, и модуль может работать. Для настройки нам надо сделать три вещи:
Примеры кода
Основной код, если вы конечно не решили всего лишь изменить цвета или шрифты какого-то приложения, происходят в handleLoadPackage. Для этого мы предварительно изучаем исходный код интересующего приложения, придумываем как модифицировать код и описываем нашу логику.
Основная логика работает через findAndHookMethod метод, реже через findAndHookConstructor и findClass. Все основные методы можно подглядеть в классе XposedHelpers.
Выглядит это примерно так:
В первую очередь нам надо обернуть наши «хуки» в try/catch, так как если в вашем коде будет ошибка, без обертки основное приложение может завершить работу c ошибкой, а полный трейс может попасть разработчику, который станет в курсе, что на его приложение наложили модуль. При обертке весь трейс можно вывести в лог Xposed и понять где у нас произошла ошибка и почему.
В findAndHookMethod первый параметр — это название класса, вторая — ссылка на загрузчик класса, третья — название нужного нам метода, далее идет перечисление в виде строк какие переменные передаются в метод и в конце наш callback метод.
Вот пример как можно заполучить контекст класса и воспользоваться им
Помимо XC_MethodHook можно использовать XC_MethodReplacement. Название говорит само за себя. Мы полностью заменяем какой-то метод нашим собственным. Вот типичный пример когда мне захотелось избавиться от всплывающего уведомления, когда я подключаю телефон по USB к ноутбуку
В данном void методе вызывалось уведомление. Я его просто заменил и забыл что мне когда-то это мешало.
Были случаи и посложней. Я своими модулями исправлял ошибки в системных приложениях. Ждать, когда производитель исправит баг в новом ОТА приложении меня не особо прельщало, поэтому я исправлял сам.
Вот так вот я разрешал всем приложениям писать информацию на SD карточку, когда этот функционал урезали в целях безопасности на KitKat.
Доступ к переменным и методам класса осуществляется через класс XposedHelpers. Например:
Если объект является доступным импортируемым классом, то можно полученный объект сразу привести к нужному типу
и облегчить дальнейший код. Если же объект является каким-то типом внутреннего класса, который нам не доступен для импорта, в дальнейшем использование его методов и свойств также доступно через XposedHelpers.
Резюмируя вышесказанное: мы можем изменять статические и финальные переменные любого класса, в любое время и в любом месте. Проверять переменные передаваемые в методы, изменять их до выполнения, изменять результат отдельных методов, либо полностью замещать их своим кодом.
В большинстве случаев достаточно отловить нужный метод и модифицировать либо изменить его логику можно сразу, как только приложение запускается. Но существует известная проблема с лимитом количества методов в одном DEX файле, поэтому многие громоздкие приложения имеют по 3-5 дополнительных DEX файла. Здесь скрывается подводный камень. Обойти его довольно таки просто:
Что касается обфусцированных приложений, на первый взгляд нужно переписывать модуль при каждом новом релизе приложения. Выход из этого положения всегда есть, но это отдельная тема. Основной принцип — это найти класс, который не обфусцируется и бэктрейсом определить имена классов и методов.
Установка
Если раньше для установки сторонней прошивки требовалось производить разблокировку загрузчика телефона, то для использования Xposed пользователю необходимо всего лишь иметь root права на телефоне. Даже сейчас получение этих прав на большинстве девайсов не представляет больших сложностей: вы скачиваете приложение, а оно само делает все нужные манипуляции и через несколько минут вы становитесь обладателем телефона с уровнем прав «БОГ».
Что нужно знать перед установкой Xposed
Некоторые приложения перестанут работать. Несмотря на создание огромного числа новых возможностей, фреймворк приносит и некоторые ограничения. Часть прямо вытекает из необходимости получения прав суперпользователя: единожды сделав это, вы лишитесь возможности использовать Samsung Pay и Android Pay, а также потеряете часть функциональности сторонних программ, например, клиента Сбербанка. Возможны проблемы и с функционированием другого ПО, в том числе сервисов Яндекса.
Возможны «бутлупы» и зависания. Поскольку Xposed вносит изменения глубоко в систему, а Android — достаточно фрагментированная ОС, проблемы могут начаться уже при установке фреймворка. Больше всего повезло владельцам смартфонов с «чистым» Android, их шансы столкнуться с проблемами минимальны. Но если у вас гаджет от Samsung, Xiaomi или Huawei, которые активно используют собственные оболочки, выбор неправильной версии Xposed может привести к «бутлупу» — зависанию гаджета на этапе загрузки. Это, впрочем, не критическая проблема, ниже мы расскажем, как с помощью Nandroid-бэкапа вернуть устройство к жизни за пару минут.
Правильная работа Xposed и модулей зависит от прошивки. Работоспособность конкретного модуля Xposed тоже варьируется не только от устройства к устройству, но и от прошивки к прошивке. Перед установкой фреймворка важно уточнить, какая именно версия Xposed работает с конкретным устройством и прошивкой, особенно если у вас установлена кастомизированная версия Android. Неподдерживаемый модуль может привести к зависанию гаджета. Как и в предыдущем случае, выручит Nandroid-бэкап.
Удалять Xposed нужно правильно. Если вы решите отказаться от Xposed, удалять его тоже нужно правильно. Как минимум — воспользоваться специальной кнопкой в интерфейсе приложения, а в некоторых случаях может потребоваться прошивка специального zip-файла через recovery.
Читайте также: