Edxposed安装和xposed框架在Android 8.0以上手机使用最全攻略

文章正文
发布时间:2024-06-05 01:13

d在网上,关于Xposed模块编写的博客文章可谓是一抓一大把。但由于时间的推移,很多工具和方法都发生了变化,也正因此,网上的文章往往有一些时限性,比如现如今 provide 这个关键字已经被舍弃了却仍有人在用,还有些说要把jar包放到lib文件夹而非libs文件夹。。。

我当前使用的AndroidStuido版本为

Magisk与EdXposed框架安装

由于现在Android新版本的普及,新上市的手机基本都是8.0以上了。所以以前的Xposed框架已经不适用。EdXposed团队成为了后续版本研发的继任者,从Xpsoed的wikipedia中可以查到交接历史:

2017年7月,abforce在GitHub上发布了支持Nougat的xposed,不过此发布需在编译ROM前集成在源码中而不是以前直接卡刷的形式。
2017年10月,Xposed框架开始支持。[
2019年1月,ElderDrivers完成了EdXposed的开发。EdXp是一个Magisk模块,依赖于riru框架,成功将Xposed移植到了Android Pie上,成为最接近原版Xposed的框架。
2019年9月,EdXposed正式支持Android Q。
2020年1月,EdXposed与Xposed原开发团队达成共识,成为Xposed停止更新后的官方接任者。

当然,android8.0之前的系统依然可以下载官方的资源来进行刷机:https://repo.xposed.info/module/de.robv.android.xposed.installer

TWRP Recovery、Magisk、EdXposed

由于我的测试机是Android 10,所以要刷EdXposed。大致思路很简单,也是最容易成功的步骤:先刷三方Rec(这里是TWRP),然后装Magisk,最后通过Magisk装EdXposed。

在开始介绍步骤之前,我想说其实 https://magisk.me/ 是有热门刷机机型ROOT教程的,比起那些乱七八糟的二手资料要好很多,不过里面博客中的各种下载链接都打不开,后来我找到了替代的网站 https://www.androidjungles.com/。

下面开始:

1、这里默认电脑已经安装好 adb、fastboot 命令工具。

2、各机型对应的Recovery很可能是不同的,先找自己设备对应的下载:https://twrp.me/Devices/ ,比如我这里的机型打开后是这样:

我们点Download Links中的链接,2选1即可,反正不管美洲还是欧洲速度都很慢。进去后选最新版本的img文件,再点进去进行下载。我这里最后下载下来是:twrp-3.3.0-0-beryllium.img ,下载完后我们把它重命名成 recovery.img ,后面有用。

3、下载 Disable-Force-Encryption-Treble.zip ,后面在Rec中要用到,不过这个和机型有关,部分机型可能不需要,具体可查看 https://magisk.me/ 中的教程。

4、到Magisk的官方下载页面下载最新的Zip和Apk:https://www.download-magisk.com ,最终资源文件其实都在Github仓库中。我这里对应要下载的就是:

https://github.com/topjohnwu/Magisk/releases  这里下载你想要下载的Magisk版本,点击对应版本下载即可

https://github.com/topjohnwu/Magisk/releases/download  下载最新的MagiskManager.apk

5、上面下载好的两个zip都拷贝到手机里,然后打开终端,开始搞事情:

# 手机电脑连起来,先重启手机进入fastboot模式,命令和手动均可

adb reboot bootloader

# 然后把刚才下载并重命名好的img刷入

fastboot flash recovery recovery.img

# 执行完此就会自动进入Recovery模式

fastboot boot recovery.img

6、(无需安装这个zip的机型可忽略这一步)进入Rec后,可能第一次会有提示,点选 Keep Read Only ,然后在主界面点 Install ,选择刚才下载的 DisableForceEncryption_Treble.zip ,右滑Swipe安装。安装完后别急着点Reboot System,为了方便,按返回键到主界面中点击 Reboot ,选 Recovery 重启后自动进入Rec模式。

7、再次进入Rec,还是点Install,然后选刚才下载的Magisk-xxx.zip,进行安装(操作图文可见官方:https://www.download-magisk.com)。完事直接点Reboot System重启进入系统即可。

8、不出意外,进入系统后,桌面上就会出现 Magisk Manager 的图标(这里图片中请忽略EdXposed,那是后续手动装的),说明安装成功(所以刚才下载的Apk并没有太大用哈哈,当然可以覆盖安装一下保证版本最新)。打开Manager应该可以看到两项都安装成功了。我这里使用的是21版本,因为最新版手机启动不了,经过多次试验,Magsik.zip  v21.0是可用的

 

9、后面就简单了,参考EdXposed官方文档(https://github.com/ElderDrivers/EdXposed)的Install步骤即可:

小米手机怎么Root

1、首先去官网登录小米账户,下载root工具https://www.miui.com/unlock/index.html

点击下载后,解压压缩包,点击unlock.exe,按照提示操作即可,具体步骤参考官方指导  https://www.xiaomi.cn/post/3892846

如果小米手机因为更新了magsik manage的某个版本变成砖头了,大概率是你的magisk版本导致的,这时候只需要执行如下命令就可以让你手机恢复正常开启,

# 手机电脑连起来,先重启手机进入fastboot模式,命令和手动均可

adb reboot bootloader

# 然后把刚才下载并重命名好的img刷入

fastboot flash recovery recovery.img

# 执行完此就会自动进入Recovery模式

fastboot boot recovery.img  

进入twrp界面后重新走上面6,7步骤,安装原来的magsk.zip版本就可以了,当然也可以直接线刷系统

魅族手机怎么root

打开魅族手机官网  https://www.flyme.com/firmware.html

选择你要root的机型,然后下载对应的刷机包

如果你的魅族手机变成砖头无法开机了,长按电源键和音量+,会进入这个界面,你选择USB传输文件,把上面官网下载的update.zip发送到手机,然后点击开始就可以重装系统了

待系统安装完毕就可以愉快root了

Xposed简介

Xposed 框架的原理就不多说了,它部署在ROOT后的安卓手机上,通过替换/system/bin/app_process程序控制zygote进程,使得app_process在启动过程中会加载XposedBridge.jar这个jar包,从而完成对Zygote进程及其创建的Dalvik虚拟机的劫持。可以让我们在不修改APK源码的情况下,通过自己编写的模块来影响程序运行的框架服务,实现类似于自动抢红包、微信消息自动回复等功能。

其实,从本质上来讲,Xposed 模块也是一个 Android 程序。但与普通程序不同的是,想要让写出的Android程序成为一个Xposed 模块,要额外多完成以下四个硬性任务:

让手机上的xposed框架知道我们安装的这个程序是个xposed模块

模块里要包含有xposed的API的jar包,以实现下一步的hook操作。

这个模块里面要有对目标程序进行hook操作的方法。

要让手机上的xposed框架知道,我们编写的xposed模块中,哪一个方法是实现hook操作

这就引出我即将要介绍的四大件(与前四步一一对照):

AndroidManifest.xml

compileOnly 'de.robv.android.xposed:api:82' compileOnly 'de.robv.android.xposed:api:82:sources'

实现hook操作的具体代码

assets下的xposed_Init文件

下面开始实操

新建Android项目就省了,新建项目后在AndroidManifest文件中添加如下配置

<meta-data android:name="xposedmodule" android:value="true" /> 告诉xposed这是基于他的一个模块 <meta-data android:name="xposeddescription" android:value="ido" /> 你对这个模块的描述 <meta-data android:name="xposedminversion" android:value="82" /> xposed的最低版本要求

gradle中添加依赖

compileOnly 'de.robv.android.xposed:api:82' compileOnly 'de.robv.android.xposed:api:82:sources'

编译通过后,在assets文件夹里面新建xposed_init文件,xposed框架会根据这个文件中的配置路径找到你hook操作的类

在MainActivity中调用

public class MainActivity extends AppCompatActivity { private static final String TAG = "MainActivity"; private TextView textView; private TextView textView2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = findViewById(R.id.info); textView2 = findViewById(R.id.info2); Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); FloatingActionButton fab = findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(view, toastMessage(), Snackbar.LENGTH_LONG) .setAction("Action", null).show(); } }); AppInfo.getInstance().ValidateEnvironment(this); boolean boolResult = AppInfo.getInstance().isXposedInstall(); textView.setText(boolResult ? "V" + AppInfo.getInstance().getXposedVersionName() : "未安装"); boolResult = AppInfo.getInstance().isXposedActive(); textView2.setText(boolResult ? "已激活" : "未激活"); } public String toastMessage() { return "我未被劫持"; }

调用结果

判断xposed是否激活

public class AppUtils { public static final String PACKAGE_NAME_XPOSED = "de.robv.android.xposed.installer"; public static String getAppVersionName(Context context, String packageName) { PackageManager packageManager = context.getPackageManager(); List<PackageInfo> packageInfos = packageManager.getInstalledPackages(0); for (PackageInfo packageInfo : packageInfos) { if (packageInfo.packageName.equals(packageName)) { return packageInfo.versionName; } } return ""; } public static boolean isModuleActive() { return false; } } public class StringUtils { public static boolean isEmpty(final CharSequence s) { return s == null || s.length() == 0; } } public class AppInfo { private boolean mIsXposedInstall; private String mXposedVersionName; private static volatile AppInfo mInstance = null; private AppInfo() { } public static AppInfo getInstance() { if (mInstance == null) { synchronized (AppInfo.class) { if (mInstance == null) { mInstance = new AppInfo(); } } } return mInstance; } public void ValidateEnvironment(Context context) { mXposedVersionName = AppUtils.getAppVersionName(context, AppUtils.PACKAGE_NAME_XPOSED); mIsXposedInstall = !StringUtils.isEmpty(getmXposedVersionName()); } public boolean isXposedActive() { return AppUtils.isModuleActive(); } public boolean ismIsXposedInstall() { return mIsXposedInstall; } public void setmIsXposedInstall(boolean xposedInstall) { mIsXposedInstall = xposedInstall; } public String getmXposedVersionName() { return mXposedVersionName; } public void setmXposedVersionName(String xposedVersionName) { mXposedVersionName = xposedVersionName; } }

具体调用

AppInfo.getInstance().ValidateEnvironment(this); AppInfo appInfo = AppInfo.getInstance(); boolean isInstall = appInfo.ismIsXposedInstall(); boolean isActive = appInfo.isXposedActive(); String xposedVersionName = appInfo.getmXposedVersionName(); String msg = (isInstall ? xposedVersionName : "未安装") + " " + (isActive ? "已激活" : "未激活"); Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();  

注意某些细节

1、可能你做完上面所有操作后xposed框架还是没激活,有可能是没有启用xposed

打开Edxposed Manager-->模块  找到你自己写的应用,打开图示按钮

2、可能你下载Riru.core的时候会提示你版本不对什么的,你根据提示去GitHub下载对应的zip包保存到手机,然后通过本地安装进行安装即可

具体的下载路径,可以在app上面看到git地址

首页
评论
分享
Top