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、这里默认电脑已经安装好 adbfastboot 命令工具。

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 模块,要额外多完成以下四个硬性任务:

  1. 让手机上的xposed框架知道我们安装的这个程序是个xposed模块
  2. 模块里要包含有xposed的API的jar包,以实现下一步的hook操作。
  3. 这个模块里面要有对目标程序进行hook操作的方法。
  4. 要让手机上的xposed框架知道,我们编写的xposed模块中,哪一个方法是实现hook操作

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

  1. AndroidManifest.xml
  2. compileOnly 'de.robv.android.xposed:api:82'
    compileOnly 'de.robv.android.xposed:api:82:sources'
  3. 实现hook操作的具体代码
  4. assets下的xposed_Init文件

下面开始实操

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

        <meta-dataandroid:name="xposedmodule"android:value="true" />   告诉xposed这是基于他的一个模块<meta-dataandroid:name="xposeddescription"android:value="ido" />    你对这个模块的描述<meta-dataandroid: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;@Overrideprotected 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() {@Overridepublic 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,感谢作者的分享

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

  1. Android 进阶——性能优化之电量优化全攻略及实战小结(二)

    文章大纲 引言 一.在低电耗模式和应用待机模式下进行测试 1.在低电耗模式下测试您的应用 2.在应用待机模式下测试您的应用 3.列入白名单的可接受用例 4.确定当前充电状态 5.监控充电状态变化 6. ...

  2. Windows平板装Android双系统及建立UEFI引导全攻略(windows8.1+android6+phoenix)

    我的windows平板型号是dell venue 11 pro 5130,CPU是Intel baytrail z3770,原系统是windows8.1 32位. 写本文的时候,时间是2016.7. ...

  3. android+壁纸+比例,安卓手机壁纸尺寸选择攻略:屏幕分辨率≠壁纸分辨率

    1.安卓手机壁纸的分辨率 ≠ 安卓手机屏幕分辨率 像iPhone等很多手机,都是手机壁纸的分辨率= 手机屏幕的分辨率(或者等比例的分辨率).但是安卓手机则有自己一套创新的壁纸系统,手机壁纸的分辨率不等 ...

  4. iOS 使用Charts框架 折线,柱状,K线,饼状,雷达全攻略

    我是前言: 大约几个月前我写了一篇文章, 文中简单地介绍了Charts两种图表的样式的使用, 不过有种意犹未尽的感觉, 利用周末的空闲时间再次看了看, 有了新的收获, 今天发出来,分享给大家, 来稍加 ...

  5. android动态视力测试,android《神庙逃亡》轻松通关技巧全攻略

    三种奇妙地形,乐趣变化妙无穷 基本上,人物会自动往前狂奔,操纵方法很简单 手指触控向右滑动->右转 手指触控向左滑动->左转 手指触控向上滑动- >跳 手指触控向下滑动->低姿 ...

  6. Android面试题最全攻略!

    这是安卓系列的第四个课题,面试相关.在这个册子里面,完成了一些经典问题的回答,以及一些建议,学习技巧. Android 深入系统完全讲解(三)操作系统完全攻略 PDF Android 深入系统完全讲解 ...

  7. xp怎样安装android-studio,Xposed 框架的安装

    借鉴: 安装流程: 安装 雷电模拟器3.93 下载安装xposed框架. xposed 框架在Dalvik 虚拟机和ART虚拟机上的安装不一样(至于ART虚拟机和Dalvik虚拟机的区别,可以参阅 文 ...

  8. android 7 apk 安装程序,Android安装apk文件并适配Android 7.0详解

    Android安装apk文件并适配Android 7.0详解 首先在AndroidManifest.xml文件,activity同级节点注册provider: android:name="a ...

  9. android apk安装过程,Android安装apk文件并适配Android 7.0详解

    Android安装apk文件并适配Android 7.0详解 首先在AndroidManifest.xml文件,activity同级节点注册provider: android:name="a ...

最新文章

  1. 线性回归算法原理简介
  2. java购物车简介_Java--购物车
  3. Github阅览神器来啦!瞬间提升50%的阅览效率
  4. 怎么主动发起话题_谈恋爱怎样找话题聊天?
  5. 在eclipse中开发servlet流程
  6. Chapter 5 带颜色的同心圆
  7. python的作者叫什么_作者的来历是什么?
  8. SqlMap异常的处理
  9. c#调用c++ dll const char* String类型转换问题。传值,与接收返回值问题
  10. linux scp命令 不输入远程机器的密码,scp 命令无需输入密码完成 Linux 系统间远程拷贝...
  11. 脚本学习python和linux-shell和jQuery(javascript)
  12. python电脑怎么打开任务管理器_利用Python调用Windows API,实现任务管理器功能
  13. 当你想对常用网站定制属于自己的颜色,然而又没人理你怎么办
  14. react-native 解决“Could not get BatchedBridge...” 的问题
  15. PB通过VDN实现Http上传、下载
  16. ue4移动到一定距离_UE4 移动物体的几种方法
  17. golang+vue3+websocket 实时推送首页数据或者站内信
  18. ride运行时报错ERROR
  19. 大数据就业前景如何?马云曾经说过大数据是未来顶峰时代应验了
  20. 零基础学习微信小程序(7):组件

热门文章

  1. 微博时代的企业公关危机特征研究
  2. 解决mysql 数据迁移过程中使用 select into或inert into select 批量插入时id使用UUID重复问题(已解决)
  3. 我的世界服务器正版号名字,我的世界借号1.9-借一个我的世界正版账号?
  4. GIS-国内常见的地理坐标系
  5. .NET Core微服务之路:文章系列和内容索引汇总 (v0.52)
  6. 关于三维扫描及重建工作
  7. Git Flow 的正确使用姿势
  8. [STM32]STM32CubeIDE开发环境安装与STM32F407-DISC kit实现Hello,LED
  9. url自动编码问题,包含; / ? : @ = + $ , #的密文Http url请求问题
  10. 多行文本框(Text.MultiLine)问题