zoukankan      html  css  js  c++  java
  • XposedInstaller 是如何安装的

    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 X86arm 等属性,然后做一些如版本号、平台架构匹配之类的校验

    校验通过后,会释放一些文件到指定位置

    /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下原来的诸如虚拟机的相关文件

  • 相关阅读:
    【英语天天读】Places and People
    【OpenCV学习】错误处理机制
    【英语天天读】Heart of a stranger 陌生的心灵
    【英语天天读】第一场雪
    【OpenCV学习】角点检测
    【英语天天读】Life is What We Make It
    【英语天天读】培养自信
    【英语天天读】Perseverance
    【OpenCV学习】cvseqpartition序列分类
    【英语天天读】自然
  • 原文地址:https://www.cnblogs.com/cyy12/p/11682113.html
Copyright © 2011-2022 走看看