Edxposed安装和xposed框架在Android 8.0以上手机使用最全攻略
d在网上,关于Xposed模块编写的博客文章可谓是一抓一大把。但由于时间的推移,很多工具和方法都发生了变化,也正因此,网上的文章往往有一些时限性,比如现如今 provide 这个关键字已经被舍弃了却仍有人在用,还有些说要把jar包放到lib文件夹而非libs文件夹。。。我当前使用的AndroidStuido版本为Magisk与EdXposed框架安装由于现在Android新版本的普及,新上市的手机
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框架开始支持。[3]
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步骤即可:
- 在Magisk Manager的“下载”中安装 Riru(Riru - Core)和 Riru - EdXposed 后重启手机。
- 去 https://github.com/ElderDrivers/EdXposedManager/releases 下载EdXposed Manager的Apk来安装。大功告成!
小米手机怎么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地址
部分操作参考自:https://ysy950803.blog.csdn.net/article/details/107118656,感谢作者的分享
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)