Launcher 如何通过startActivity 传送一个 intent 到 zygote 如何 接收到它并且 fork出该app的进程的?

安装框架的时候会现有各种检查,比如当前系统版本等

下载对应的框架安装文件

安装文件是个zip文件

下载完成后会检查zip文件,通过下面的方法检查

InstallZipUtil. checkZip()

  1. META-INF/com/google/android/update-binary 是否存在
  2. 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 是如何安装的的更多相关文章

  1. - 反编译 AndroidKiller 逆向 实践案例 MD

    目录 目录 反编译 AndroidKiller 逆向 实践案例 MD AndroidKiller 简介 插件升级 基本使用 实践案例 修改清单文件 打印 debug 级别的日志 方式一:直接代理 Lo ...

  2. mumu模拟器安装xposed--如何在android模拟器上进行root

    问题描述 安装xposed表示failed to access root权限,新版的mumu模拟器没有了root选项,需要自己root. 1.先关掉应用兼容性,然后重启 电脑一般都是x86的,mumu ...

  3. 小米5安装Xposed框架——需要解锁刷机

    Xposed官网 https://forum.xda-developers.com/xposed 官方模块厂库 https://repo.xposed.info/ 中文站点 https://xpose ...

  4. docker——容器安装tomcat

    写在前面: 继续docker的学习,学习了docker的基本常用命令之后,我在docker上安装jdk,tomcat两个基本的java web工具,这里对操作流程记录一下. 软件准备: 1.jdk-7 ...

  5. 网络原因导致 npm 软件包 node-sass / gulp-sass 安装失败的处理办法

    如果你正在构建一个基于 gulp 的前端自动化开发环境,那么极有可能会用到 gulp-sass ,由于网络原因你可能会安装失败,因为安装过程中部分细节会到亚马逊云服务器上获取文件.本文主要讨论在不变更 ...

  6. Sublime Text3安装JsHint

    介绍 Sublime Text3使用jshint依赖Nodejs,SublimeLinter和Sublimelinter-jshint. NodeJs的安装省略. 安装SublimeLinter Su ...

  7. Fabio 安装和简单使用

    Fabio(Go 语言):https://github.com/eBay/fabio Fabio 是一个快速.现代.zero-conf 负载均衡 HTTP(S) 路由器,用于部署 Consul 管理的 ...

  8. gentoo 安装

    加载完光驱后 1进行ping命令查看网络是否通畅 2设置硬盘的标识为GPT(主要用于64位且启动模式为UEFI,还有一个是MBR,主要用于32位且启动模式为bois) parted -a optima ...

  9. 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. ...

随机推荐

  1. Node.js接口避免重复启动

    众所周知,一个Node接口要是想被调用,得先在命令行中执行如下代码来启动接口 node base.js 但是一旦修改了base.js,就得重新执行这句命令 注:这里的base.js是我的node接口文 ...

  2. python 1 默写用递归实现无限极分类 2 默写用树实现无限极分类

    data=[ {"cat_id":3,"name":"沙河","parent_id":1}, {"cat_id ...

  3. nginx学习(四):nginx处理web请求机制

    worker抢占机制 如下图所示,如果有一个请求,各个work进程会进行争锁.谁抢到是谁的.需要注意Nginx 所有worker进程协同工作的关键(共享内存). [accept_mutex的介绍] 当 ...

  4. Linux设备树文件结构与解析深度分析

    Copy from :https://blog.csdn.net/woyimibayi/article/details/77574736 正文开始 1. Device Tree简介 设备树就是描述单板 ...

  5. Docker安装MySQL 8.0并挂载数据及配置文件

    安装部署环境 Ubuntu 18.04.3 LTS Docker 19.03.2 MySQL latest(8.0.17) 下载镜像 # docker从仓库中拉取最新版的mysql镜像,如果没加标签的 ...

  6. Centos7 下cobbler安装及配置

    1.背景介绍 作为运维,在公司经常遇到一些机械性重复工作要做,例如:为新机器装系统,一台两台机器装系统,可以用光盘.U盘等介质安装,1小时也完成了,但是如果有成百台的服务器还要用光盘.U盘去安装,就显 ...

  7. IT兄弟连 Java语法教程 数组 数组的使用

    数组最常用的用法就是访问数组元素,包括对数组元素进行赋值和取出数组元素的值.访问数组元素都是通过在数组引用变量后紧跟一个方括号([]),方括号里是数组元素的索引值,这样就可以访问数组元素了.访问到数组 ...

  8. IT兄弟连 Java语法教程 数组 数组的初始化

    Java语言中数组必须先初始化,然后才可以使用.所谓初始化,就是为数组的数组元素分配内存空间,并为每个数组元素赋初始值. 这时有人会问,能不能只分配内存空间,不赋初始值呢?答案是肯定不行的,一旦为数组 ...

  9. JDBC进阶 元数据

    1:resultSet 1.1最基本的ResultSet. 1.2 可滚动的ResultSet类型 1.3 可更新的ResultSet 1.4 可保持的ResultSet 2:PrepareState ...

  10. Protractor - 怎样运行

    前一篇设置好了Protractor基本运行环境,那怎样运行Protractor呢? 要运行我们的测试脚本,至少需要配置好两个文件: ---Package.json ---conf.js Package ...