Xposed 简介以及小米去桌面广告的简单实现,五步搞定 Android 开发环境部署
================================================================
提起 Xposed,大多数 Android 开发者都听过或者用过,甚至有一些开发过比较炫酷的模块。这是我前段时间在公司的分享内容,分享给大家。
Xposed 简介
Xposed 框架是一款可以在不修改 APK 的情况下影响程序运行(修改系统)的框架服务,基于它可以制作出许多功能强大的模块,且在功能不冲突的情况下同时运作。项目地址:github.com/rovo89 包括以下几个部分:
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,这里我们借助两个开源项目可以轻松完成。github.com/JesusFreke/… (bitbucket.org/JesusFreke/…)
第二步,找到对应点击文件夹图标的方法,我们直接在 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.access0).isOpened())return;Launcher.access0, false);ShortcutIcon.setEnableLoadingAnim(true);Launcher.access0).bind(this.val1100(this.this0.updateStatusBarClock();Launcher.access0).cancel();if ((this.this0.isSceneShowing()))Launcher.access0).setDuration(Folder.DEFAULT_FOLDER_BACKGROUND_SHORT_DURATION);while (true){do{Launcher.access0).setFloatValues(new float[] { 0F, 1F });Launcher.access0).setInterpolator(new CubicEaseInOutInterpolater());Launcher.access0).start();}while (this.thisfolderInfo.onLaunch();LauncherModel.updateItemFlagAndLaunchCount(this.thisfolderInfo);return;Launcher.access0).setDuration(Folder.DEFAULT_FOLDER_OPEN_DURATION);
评论