Android
Xposed
Поиск…
Создание модуля Xposed
Xposed - это структура, которая позволяет вам перехватывать вызовы методов других приложений. Когда вы делаете модификацию путем декомпиляции APK, вы можете вставлять / изменять команды напрямую, где хотите. Однако после этого вам нужно будет перекомпилировать / подписать APK, и вы можете распространять только весь пакет. С помощью Xposed вы можете ввести свой собственный код до или после методов или полностью заменить целые методы. К сожалению, вы можете установить Xposed на корневые устройства. Вы должны использовать Xposed всякий раз, когда вы хотите манипулировать поведением других приложений или базовой системы Android и не хотите проходить через декомпиляцию, перекомпиляцию и подписку APK.
Во-первых, вы создаете стандартное приложение без Activity в Android Studio.
Затем вы должны включить следующий код в свой build.gradle :
repositories {
jcenter();
}
После этого вы добавляете следующие зависимости:
provided 'de.robv.android.xposed:api:82'
provided 'de.robv.android.xposed:api:82:sources'
Теперь вы должны поместить эти теги в тег приложения, найденный в AndroidManifest.xml, чтобы Xposed распознал ваш модуль:
<meta-data
android:name="xposedmodule"
android:value="true" />
<meta-data
android:name="xposeddescription"
android:value="YOUR_MODULE_DESCRIPTION" />
<meta-data
android:name="xposedminversion"
android:value="82" />
ПРИМЕЧАНИЕ. Всегда заменяйте 82 последней версией Xposed .
Подключение метода
Создайте новый класс, реализующий IXposedHookLoadPackage
и реализующий метод handleLoadPackage
:
public class MultiPatcher implements IXposedHookLoadPackage
{
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable
{
}
}
Внутри метода вы проверяете loadPackageParam.packageName
для имени пакета приложения, которое хотите подключить:
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable
{
if (!loadPackageParam.packageName.equals("other.package.name"))
{
return;
}
}
Теперь вы можете подключить свой метод и либо манипулировать им до того, как он будет запущен, либо после:
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam loadPackageParam) throws Throwable
{
if (!loadPackageParam.packageName.equals("other.package.name"))
{
return;
}
XposedHelpers.findAndHookMethod(
"other.package.name",
loadPackageParam.classLoader,
"otherMethodName",
YourFirstParameter.class,
YourSecondParameter.class,
new XC_MethodHook()
{
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable
{
Object[] args = param.args;
args[0] = true;
args[1] = "example string";
args[2] = 1;
Object thisObject = param.thisObject;
// Do something with the instance of the class
}
@Override
protected void afterHookedMethod(MethodHookParam param) throws Throwable
{
Object result = param.getResult();
param.setResult(result + "example string");
}
});
}