0

    Xposed简介以及小米去桌面广告的简单实现

    2023.05.01 | admin | 262次围观

    Xposed简介

    Xposed框架是一款可以在不修改APK的情况下影响程序运行(修改系统)的框架服务,基于它可以制作出许多功能强大的模块,且在功能不冲突的情况下同时运作。项目地址: 包括以下几个部分:

    Xposed & android_art ,Xposed framework,核心XposedBridge java 部分的framework,我们开发模块要用到XposedInstaller 安装器,用去安装Xposed framework以及管理Xposed 模块

    那么,Xposed有什么应用场景么,就目前来说,我们耳熟能详的应用场景就是抢红包了,xposed的应用场景取决于我们的思维和想法。现在比较火的模块如抢红包之类的,消息防撤回、绿色守护、黑狱、小米去广告等等。

    如何使用Xposed

    就目前的国内情况来讲,要想用Xposed的话,我个人推荐小米手机。

    root安装Xposed,要找对应手机RAM对应Android版本的Xposed framework,可以去小米论坛上找从酷安市场或者Xposed installer里安装自己喜欢的模块,勾选,重启生效 如何开发自己的Xposed模块

    关于开发自己的Xposed模块,在Xposed项目的wiki中,有很详细的介绍,并且开发Xposed模块的话确实比较简单,难点在于找到你想实现功能的切入点,我们这里以去掉小米桌面的广告为例。关于如何开发Xposed模块,前往Xposed Wiki 查看学习

    要想实现去广告,首先我们需要想一些办法,我最初想到的办法是从广告的Api入手,替换掉url地址,经过试验,失败了。但是发现,小米桌面文件夹(就那个好几个app放在一起的地方)有个隐藏的功能,修改名称的时候,下面有个是否推荐那个,这里可以关掉广告,所以,从这里入手。

    第一步,我们需要拿到小米Home的代码,这个对于我们root了的手机,简单的很,不过,这里我们要对代码进行一些操作,因为我们能拿到的是odex文件,我们要将其转化为jar文件,转换过程odex->smail->dex->jar,这里我们借助两个开源项目可以轻松完成。 ()

    第二步,找到对应点击文件夹图标的方法去广告模块,我们直接在Launcher中搜索openF(older),关于Launcher,这里不多说。我们能搜索到如下代码。

    public void openFolder(FolderInfo paramFolderInfo, View paramView)

    {

    this.mFolderClosingInNormalEdit = false;

    this.mWorkspace.post(new Runnable(this, paramFolderInfo)

    {

    public void run()

    {

    if (Launcher.access$1100(this.this$0).isOpened())

    return;

    Launcher.access$3702(this.this$0, false);

    ShortcutIcon.setEnableLoadingAnim(true);

    Launcher.access$1100(this.this$0).bind(this.val$folderInfo);

    Launcher.access$1100(this.this$0).open();

    this.this$0.updateStatusBarClock();

    Launcher.access$3800(this.this$0).cancel();

    if ((this.this$0.isInNormalEditing()) || (this.this$0.isSceneShowing()))

    Launcher.access$3800(this.this$0).setDuration(Folder.DEFAULT_FOLDER_BACKGROUND_SHORT_DURATION);

    while (true)

    {

    do

    {

    Launcher.access$3800(this.this$0).setFloatValues(new float[] { 0F, 1F });

    Launcher.access$3800(this.this$0).setInterpolator(new CubicEaseInOutInterpolater());

    Launcher.access$3800(this.this$0).start();

    }

    Xposed简介以及小米去桌面广告的简单实现

    while (this.this$0.isInEditing();

    this.val$folderInfo.onLaunch();

    LauncherModel.updateItemFlagAndLaunchCount(this.this$0, this.val$folderInfo);

    return;

    Launcher.access$3800(this.this$0).setDuration(Folder.DEFAULT_FOLDER_OPEN_DURATION);

    }

    }

    });

    }

    我们这里,能发现FolderInfo这个类作为了一个参数,很明显,这是描述Folder的信息的,那么是否推荐这个属性,一定是在这里面了。我们进去看看。

    在这里搜索recommend,我们能发现这么一个变量。

    private boolean mEnbaleRecommendAppsView = false;

    细心的同学发现他这个变量名是不是手抖了。。。

    private?那么,我们不管三七二十一,直接干掉get方法,直接返回false是不是就可以实现呢?尝试一波,写下如下代码。

    public class XposedDemo implements IXposedHookLoadPackage {

    private static final String TAG = "myxposed";

    @Override

    public void handleLoadPackage(XC_LoadPackage.LoadPackageParam lpparam) throws Throwable {

    Log.e(TAG, "handleLoadPackage: " + lpparam.packageName + "----->" + lpparam.appInfo.sourceDir);

    if (lpparam.packageName.equals("com.miui.home")) {

    Log.e(TAG, "handleLoadPackage: " + "miui.home ");

    findAndHookMethod("com.miui.home.launcher.FolderInfo", lpparam.classLoader, "isRecommendAppsViewEnable", Context.class, new XC_MethodReplacement() {

    @Override

    protected Object replaceHookedMethod(MethodHookParam param) throws Throwable {

    Log.e(TAG, "replaceHookedMethod: " + "被调用了");

    return false;

    }

    });

    }

    }

    }

    安装,勾选去广告模块,重启。然后点开文件夹,发现,舒服的很,确实没了,在编辑文件夹属性,把这个推荐打开,哈,还是没有。果然,我们成功了。

    最后

    有没有学到呢?我把小米Home的jar包以及当时做的简陋的ppt放在了 blog_resource这个仓库,有需要的可以去拿。

    %E7%AE%80%E4%BB%8B%E4%BB%A5%E5%8F%8A%E5%B0%8F%E7%B1%B3%E5%8E%BB%E6%A1%8C%E9%9D%A2%E5%B9%BF%E5%91%8A%E7%9A%84%E7%AE%80%E5%8D%95%E5%AE%9E%E7%8E%B0/

    版权声明

    本文仅代表作者观点。
    本文系作者授权发表,未经许可,不得转载。

    发表评论