XposedInstaller 是如何安装的
Launcher 如何通过startActivity 传送一个 intent 到 zygote 如何 接收到它并且 fork出该app的进程的?
安装框架的时候会现有各种检查,比如当前系统版本等
下载对应的框架安装文件
安装文件是个zip文件
下载完成后会检查zip文件,通过下面的方法检查
InstallZipUtil. checkZip()
- META-INF/com/google/android/update-binary 是否存在
- META-INF/com/google/android/flash-script.sh 是否存在
安装方式有种 1. 直接刷入 2.通过recover自动刷入
安装框架最关键的代码在Falshable 的2个子类的 falsh() 方法种
1.直接刷入
FlashDirectly
1.把zip包种的 META-INF/com/google/android/update-binary
复制到 App. getCacheDir() / update-binary
然后用 supperuser 以 root 权限 执行
。。。
int result = rootUtil.execute(getShellPath(updateBinaryFile) + " 2 1 " + getShellPath(mZipPath), callback);
。。。
直接刷入:用root权限执行了zip里的update-binary 可执行文件
2.recover自动刷入
FlashRecoveryAuto
1.
在 /cache/recovery
目录下(没有就用root权限创建)
2.
复制zip到 /cache/recovery/
3.
写入刷入命令到
/cache/recovery/command
文件中
cmd = "echo --update_package=/cache/recovery/" + zipName + " > /cache/recovery/command";
所以重点又到了update-binary做了什么
这个文件从make 系统的ota升级包中复制同名文件
两种方式最终结果都是安装了所需的文件
分析 sh
检查 system/xposed.prop
Mounting /system and /vendor read-write
从 system/build.prop 确定system/ arch 如 X86或arm 等属性,然后做一些如版本号、平台架构匹配之类的校验
校验通过后,会释放一些文件到指定位置
/system/xposed.prop
/system/framework/XposedBridge.jar
等
(在zip包中的几乎都要释放到对应位置)
然后配置文件权限和selinux
主要是修改后的虚拟机(art dvm) /system/lib/libart.so , system/lib/libart-compiler.so 等等一系列so文件
还有入口app_process32
以及自身框架 system/framework/XposedBridge.jar
一段释放文件的源码:
install_nobackup /system/xposed.prop 0 0 0644
install_nobackup /system/framework/XposedBridge.jar 0 0 0644
install_and_link /system/bin/app_process32 0 2000 0755 u:object_r:zygote_exec:s0
install_overwrite /system/bin/dex2oat 0 2000 0755 u:object_r:dex2oat_exec:s0
install_overwrite /system/bin/dexdiag 0 2000 0755
install_overwrite /system/bin/dexlist 0 2000 0755
install_overwrite /system/bin/dexoptanalyzer 0 2000 0755 u:object_r:dexoptanalyzer_exec:s0
install_overwrite /system/bin/oatdump 0 2000 0755
install_overwrite /system/bin/patchoat 0 2000 0755 u:object_r:dex2oat_exec:s0
install_overwrite /system/bin/profman 0 2000 0755 u:object_r:profman_exec:s0
install_overwrite /system/lib/libart.so 0 0 0644
install_overwrite /system/lib/libart-compiler.so 0 0 0644
install_overwrite /system/lib/libart-dexlayout.so 0 0 0644
install_overwrite /system/lib/libart-disassembler.so 0 0 0644
install_overwrite /system/lib/libsigchain.so 0 0 0644
install_overwrite /system/lib/libopenjdkjvm.so 0 0 0644
install_overwrite /system/lib/libopenjdkjvmti.so 0 0 0644
install_nobackup /system/lib/libxposed_art.so 0 0 0644
if [ $IS64BIT ]; then
install_and_link /system/bin/app_process64 0 2000 0755 u:object_r:zygote_exec:s0
install_overwrite /system/lib64/libart.so 0 0 0644
install_overwrite /system/lib64/libart-compiler.so 0 0 0644
install_overwrite /system/lib64/libart-dexlayout.so 0 0 0644
install_overwrite /system/lib64/libart-disassembler.so 0 0 0644
install_overwrite /system/lib64/libsigchain.so 0 0 0644
install_overwrite /system/lib64/libopenjdkjvm.so 0 0 0644
install_overwrite /system/lib64/libopenjdkjvmti.so 0 0 0644
install_nobackup /system/lib64/libxposed_art.so 0 0 0644
fi
综合来说,这个安装脚本主要就是
根据当前平台特性,释放对应的文件覆盖到/system下原来的诸如虚拟机的相关文件
XposedInstaller 是如何安装的的更多相关文章
- - 反编译 AndroidKiller 逆向 实践案例 MD
目录 目录 反编译 AndroidKiller 逆向 实践案例 MD AndroidKiller 简介 插件升级 基本使用 实践案例 修改清单文件 打印 debug 级别的日志 方式一:直接代理 Lo ...
- mumu模拟器安装xposed--如何在android模拟器上进行root
问题描述 安装xposed表示failed to access root权限,新版的mumu模拟器没有了root选项,需要自己root. 1.先关掉应用兼容性,然后重启 电脑一般都是x86的,mumu ...
- 小米5安装Xposed框架——需要解锁刷机
Xposed官网 https://forum.xda-developers.com/xposed 官方模块厂库 https://repo.xposed.info/ 中文站点 https://xpose ...
- docker——容器安装tomcat
写在前面: 继续docker的学习,学习了docker的基本常用命令之后,我在docker上安装jdk,tomcat两个基本的java web工具,这里对操作流程记录一下. 软件准备: 1.jdk-7 ...
- 网络原因导致 npm 软件包 node-sass / gulp-sass 安装失败的处理办法
如果你正在构建一个基于 gulp 的前端自动化开发环境,那么极有可能会用到 gulp-sass ,由于网络原因你可能会安装失败,因为安装过程中部分细节会到亚马逊云服务器上获取文件.本文主要讨论在不变更 ...
- Sublime Text3安装JsHint
介绍 Sublime Text3使用jshint依赖Nodejs,SublimeLinter和Sublimelinter-jshint. NodeJs的安装省略. 安装SublimeLinter Su ...
- Fabio 安装和简单使用
Fabio(Go 语言):https://github.com/eBay/fabio Fabio 是一个快速.现代.zero-conf 负载均衡 HTTP(S) 路由器,用于部署 Consul 管理的 ...
- gentoo 安装
加载完光驱后 1进行ping命令查看网络是否通畅 2设置硬盘的标识为GPT(主要用于64位且启动模式为UEFI,还有一个是MBR,主要用于32位且启动模式为bois) parted -a optima ...
- Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级
Linux平台 Oracle 10gR2(10.2.0.5)RAC安装 Part3:db安装和升级 环境:OEL 5.7 + Oracle 10.2.0.5 RAC 5.安装Database软件 5. ...
随机推荐
- XMind 是一个全功能的思维导图和头脑风暴软件,为激发灵感和创意而生
XMind 是一个全功能的思维导图和头脑风暴软件,为激发灵感和创意而生 https://www.xmind.cn/
- MSSQL 字段分组拼接
方法1:缺点,不去重,不去空:见表1 with t as( select 'A' parent, 'A1' child union all select 'A', 'A1' union all sel ...
- Django2.1 更新说明!
Django2.1版本发布时间:2018-8-1 一.Python兼容性 Django2.1只支持Python 3.5. 3.6和3.7以上版本.Django2.0是最后一个支持Python3.4及一 ...
- 【转】关闭firefox火狐浏览器下载完成时自动扫描(49.0.2以后版本)
用firefox火狐浏览器下载文件到最后时,会显示"剩余时间未知",将持续10秒钟左右,即使几KB 的文件,也要持续这么长时间,问度娘才知道是自动扫描,检查是否有毒,用的却是Goo ...
- jenkins下载插件无插件显示+离线下载插件方法
1.打开Jenkins插件管理,可选插件为空,无法选择自己需要的插件进行下载 打开插件管理的“高级”选项,在升级站点填写 http://mirror.xmission.com/jenkins/upda ...
- 新手入门:python的安装(一)
windows下python的安装 -----因为我是个真小白,网上的大多入门教程并不适合我这种超级超级小白,有时候还会遇到各种各样的问题,因此记录一下我的安装过程,希望大家都能入门愉快,欢迎指教 - ...
- 《细说PHP》第四版 样章 第23章 自定义PHP接口规范 7
23.5 创建RESTful规范 WebAPI框架 虽然我们现在可以自己实现API了,也了解了RESTful API的设计原则,但让自己实现的API符合RESTful API规范,对很多刚接触API ...
- rpmbuild打包
安装: yum install -y rpm-build 目录介绍: 默认目录在 /root/rpmbuild BUILD :你要打包的文件将会在这里编译(编译rpm包的临时目录) BUILDRO ...
- 黄聪:PHP转换网址相对路径到绝对路径的一种方法
相信很多程序(尤其是采集类的程序)都会有需要把网址的相对路径转换成绝对路径的需要,例如采集到某页面的HTML代码中包含资源文件经常会看到这样的文件名: <link rel="style ...
- opencv Mat基础
Mat Mat由两部分构成 matrix header pointer to the matrix containing the pixel values Mat is basically a cla ...