xposed初体验

坑1:

跑起来出现class ref in pre-verified class resolved to unexpected implementation

解决1:

是因为XposedBridgeApi-<version>.jar这个包要放在lib文件夹下,需要自己新建一个lib文件夹,然后选中jar包添加到build_path,不能放在android工程自带的libs中去,或者放在和项目同级下面然后右键build path添加进去。


集成方式:

需要root的手机并且安装xposed框架,试过genymotion和夜神模拟器都不行,逍遥模拟器可以使用

添加xposed jar包到根目录

AndroidManifest.xml添加

        <!-- Xposed -->
        <meta-data
            android:name="xposedmodule"
            android:value="true" />
        <meta-data
            android:name="xposedminversion"
            android:value="54" />
        <meta-data
            android:name="xposeddescription"
            android:value="test" />
assets文件添加xposed_init文件com.example.hook_test.TestHook(包名加hook类名)


复杂的资源替换

public class ColoredCircleBattery implements IXposedHookZygoteInit, IXposedHookInitPackageResources {
    private static String MODULE_PATH = null;

    @Override
    public void initZygote(StartupParam startupParam) throws Throwable {
        MODULE_PATH = startupParam.modulePath;
    }

    @Override
    public void handleInitPackageResources(InitPackageResourcesParam resparam) throws Throwable {
        if (!resparam.packageName.equals("com.android.systemui"))
            return;

        XModuleResources modRes = XModuleResources.createInstance(MODULE_PATH, resparam.res);
        resparam.res.setReplacement("com.android.systemui", "drawable", "stat_sys_battery", modRes.fwd(R.drawable.battery_icon));
        resparam.res.setReplacement("com.android.systemui", "drawable", "stat_sys_battery_charge", modRes.fwd(R.drawable.battery_icon_charge));
    }
}
//修改布局:实现IXposedHookInitPackageResources
@Override
public void handleInitPackageResources(InitPackageResourcesParam resparam) throws Throwable {
    if (!resparam.packageName.equals("com.android.systemui"))
        return;

    resparam.res.hookLayout("com.android.systemui", "layout", "status_bar", new XC_LayoutInflated() {
        @Override
        public void handleLayoutInflated(LayoutInflatedParam liparam) throws Throwable {
            TextView clock = (TextView) liparam.view.findViewById(
                    liparam.res.getIdentifier("clock", "id", "com.android.systemui"));
            clock.setTextColor(Color.RED);
        }
    }); 
}
//资源替换:


@Override
public void initZygote(IXposedHookZygoteInit.StartupParam startupParam) throws Throwable {
    XResources.setSystemWideReplacement("android", "bool", "config_unplugTurnsOnScreen", false);
}

@Override
public void handleInitPackageResources(InitPackageResourcesParam resparam) throws Throwable {
    // replacements only for SystemUI
    if (!resparam.packageName.equals("com.android.systemui"))
        return;

    // different ways to specify the resources to be replaced
    resparam.res.setReplacement(0x7f080083, "YEAH!"); // WLAN toggle text. You should not do this because the id is not fixed. Only for framework resources, you could use android.R.string.something
    resparam.res.setReplacement("com.android.systemui:string/quickpanel_bluetooth_text", "WOO!");
    resparam.res.setReplacement("com.android.systemui", "string", "quickpanel_gps_text", "HOO!");
    resparam.res.setReplacement("com.android.systemui", "integer", "config_maxLevelOfSignalStrengthIndicator", 6);
}

//返回值修改:

public class TestHook implements IXposedHookLoadPackage{

	@Override
	public void handleLoadPackage(LoadPackageParam lpparam) throws Throwable {
		if ("".equals(lpparam.packageName))// System
		{
			return;
		}
		XposedHelpers.findAndHookMethod("org.example.android_test.MainActivity", lpparam.classLoader, "test", new XC_MethodHook() {
			@Override
			protected void afterHookedMethod(MethodHookParam param) throws Throwable {
				XposedBridge.log("test------------");
				param.setResult("成功");
			}
		});
	}

}





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值