最近在和心仪的妹子聊天时突然发现她修改了微信头像,居然还是一个男的,很不爽,就想着给她头像换了,然后就有了学习xposed的初衷。然后就去GitHub上找,找到了一个VirtualXposed,用着很方便,又不需要root就能体验各种插件。
VirtualXposed的使用方法:首先安装VirtualXposed应用,然后将你要使用插件的app添加进来,这相当于是应用双开,隔离出来的一个应用,装插件,也可以自己写插件安装到VirtualXposed中,在模块管理中勾选要使用的插件,然后点击设置界面的重启,运行应用就能体验插件了
xposed插件
1.下载jar包xposedApi
2.在AndroidManifest.xml
中配置
<meta-data
android:name="xposedmodule"
android:value="true" /> // 启用xposed
<meta-data
android:name="xposeddescription"
android:value="描述" />
<meta-data
android:name="xposedminversion"
android:value="53" /> // 最低版本
3.编写hook代码
public class ImageHook implements IXposedHookLoadPackage {
/**
* 每启动一个界面都会回调该方法
*/
@Override
public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {
// 当前启动应用的包名
if (lpparam.packageName.equals("com.dahai.android")) {
Class clazz = lpparam.classLoader.loadClass("com.dahai.android.activity.MainActivity");
// 在showCurrentIcon方法中MainActivity的属性ImageView ivMine的图片
XposedHelpers.findAndHookMethod(clazz, "showCurrentIcon", new XC_MethodHook() {
protected void beforeHookedMethod(MethodHookParam param) throws Throwable {
super.beforeHookedMethod(param);
}
protected void afterHookedMethod(MethodHookParam param) throws Throwable {
// MainActivity
Object thisObject = param.thisObject;
Log.e("HHH", "afterHookedMethod: " + thisObject.getClass().getSimpleName() );
Class<?> mainActivity = thisObject.getClass();
Field ivMine = mainActivity.getDeclaredField("ivMine");
ivMine.setAccessible(true);
try {
ImageView imageView = (ImageView) ivMine.get(thisObject);
if (imageView!=null) {
Bitmap bitmap = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory().getAbsolutePath()+"/img.jpg");
imageView.setImageBitmap(bitmap);
}
} catch (Exception e) {
Log.e("HHH", "afterHookedMethod: ", e );
}
}
});
}
}
}
4.配置hook代码
在assets
文件中新建文件xposed_init
里面写入hook代码的包名加类名com.dahai.demo.ImageHook
5.运行插件,将插件应用加入到VirtualXposed中,启动目标应用就OK了