玩机搞机----面具模块的组成 制作模块

 

root面具相信很多玩家都不陌生。早期玩友大都使用第三方卡刷补丁来对系统进行各种修复和添加功能。目前面具补丁代替了这些操作。今天的帖子了解下面具各种模块的组成和几种普遍的代码组成。

Magisk中运行的每个单独的shell脚本都将在内部的BusyBox的shell中执行。对于与第三方开发者而言,这包括所有引导脚本和模块安装脚本。

一个面具模块由/METAINF/*、/system/*、/customize.sh、/module.prop、/post-fs-data.sh、/service.sh、/system.prop、/uninstall.sh、/sepolicy.rule组成其中只有/META-INF/*和/module.prop是必须的其他的部分都是可选添加的,每个部分都有不同的作用.

💔💔💔以下是最简单的一个面具改机型模块的组成

 

对于那些想在Magisk之外使用此“独立模式”功能的人,有两种启用它的方法:

  1. 将环境变量ASH_STANDALONE设置为1
    示例: ASH_STANDALONE=1 /data/adb/magisk/busybox sh <script>
  2. 切换命令行选项:
    /data/adb/magisk/busybox sh -o standalone <script>
  3. Magisk模块的文件在/data/adb/modules中具有以下结构:
  4. /data/adb/modules
    ├── .
    ├── .
    |
    ├── $MODID                  <--- 该文件夹以模块的ID命名
    │   │
    │   │      *** 模块ID ***
    │   │
    │   ├── module.prop         <--- 该文件存储模块的基本信息
    │   │
    │   │      *** 主要内容 ***
    │   │
    │   ├── system              <--- 如果skip_mount不存在,则将挂载此文件夹
    │   │   ├── ...
    │   │   ├── ...
    │   │   └── ...
    │   │
    │   │      *** 状态标志 ***
    │   │
    │   ├── skip_mount          <--- 如果存在,Magisk将不会挂载你的system文件夹
    │   ├── disable             <--- 如果存在,该模块将被禁用
    │   ├── remove              <--- 如果存在,该模块将在下次重新启动时被删除
    │   │
    │   │      *** 可选文件 ***
    │   │
    │   ├── post-fs-data.sh     <--- 该脚本将在post-fs-data模式下执行
    │   ├── service.sh          <--- 该脚本将在late_start service模式执行
    |   ├── uninstall.sh        <--- 当Magisk删除您的模块时,将执行此脚本
    │   ├── system.prop         <--- 该文件中的properties将通过resetprop作为系统properties加载
    │   ├── sepolicy.rule       <--- 添加自定义的sepolicy规则
    │   │
    │   │      *** 自动生成,请勿手动创建或修改 ***
    │   │
    │   ├── vendor              <--- 指向$MODID/system/vendor的链接
    │   ├── product             <--- 指向$MODID/system/product的链接
    │   ├── system_ext          <--- 指向$MODID/system/system_ext的链接
    │   │
    │   │      *** 允许任何其他文件/文件夹 ***
    │   │
    │   ├── ...
    │   └── ...
    |
    ├── another_module

    💔💔💔module.prop记录了模块的ID,名称,版本,作者,简介等内容module.prop的含义与简单的修改型号模块代码对比。

    id=<string>
    name=<string>
    version=<string>
    versionCode=<int>
    author=<string>
    description=<string>
    id=三星9300
    name=改机型为三星9300
    version=Pro
    versionCode=1
    author=孤独的小猫咪
    description=改机型为三星9300

  5. 最简单的模块只要有
    /META-INF/com/google/android/update-binary&updater-script
    和/module.prop&/system
    就足够了。当然,这样的模块的模块也只是刷入留下module.prop信息和替换/system/*中的文件而已,但这也足够满足替换类模块的需求,也就是说不需要用到指令的情况下这样就够了。对于最简单的改机型面具模块来说就是最鲜明的例子。

  6. 💔💔 common--system.prop里面的信息就是此模块的主要起作用文件.这玩意就是修改prop的值,属于重置/替换/添加,但是没有删除这个功能。其功能一目了然。修改prop里面的型号值

  7. ro.product.model=XT2301-5
    ro.product.brand=motorola
    ro.product.manufacturer=motorola
    ro.product.device=msi

    💔💔💔customize.sh,这个脚本是在模块刷入时执行的用于各种需要刷入进行准备使用的指令,像是检测设备机型,Android版本,或是音量键选择之类的都要写在这里面,

  8. 其中customize.sh代码。例如

  9. ##########################################################################################
    #
    # Magisk Module Installer Script
    # 模块作者:孤独小猫咪
    #
    ##########################################################################################
    ##########################################################################################
    #
    # Instructions:
    #
    # 1. Place your files into system folder (delete the placeholder file)
    # 2. Fill in your module's info into module.prop
    # 3. Configure the settings in this file (config.sh)
    # 4. If you need boot scripts, add them into common/post-fs-data.sh or common/service.sh
    # 5. Add your additional or modified system properties into common/system.prop
    #
    ##########################################################################################
    
    ##########################################################################################
    # Configs
    ##########################################################################################
    
    # Set to true if you need to enable Magic Mount
    # Most mods would like it to be enabled
    
    ##########################################################################################
    # Installation Message
    ##########################################################################################
    
    # Set what you want to show when installing your mod
    
    print_modname() {
      ui_print "*******************************"
      ui_print "记得重启前将同类型模块关掉哦"
      ui_print "*******************************"
    }
    
    ##########################################################################################
    # Replace list
    ##########################################################################################
    
    # List all directories you want to directly replace in the system
    # Check the documentations for more info about how Magic Mount works, and why you need this
    
    # This is an example
    REPLACE="
    /system/app/Youtube
    /system/priv-app/SystemUI
    /system/priv-app/Settings
    /system/framework
    "
    
    # Construct your own list here, it will override the example above
    # !DO NOT! remove this if you don't need to replace anything, leave it empty as it is now
    REPLACE="
    
    "
    #添加您要精简的APP/文件夹目录
    #例如:精简状态栏,找到状态栏目录为  /system/priv-app/SystemUI/SystemUI.apk     
    #转化加入:/system/priv-app/SystemUI
    #(可以搭配高级设置获取APP目录)
    
    ##########################################################################################
    # Permissions
    ##########################################################################################
    #释放文件,普通shell命令
    on_install() {
      ui_print "- 正在释放文件"
      unzip -o "$ZIPFILE" 'system/*' -d $MODPATH >&2
    }
    
    set_permissions() {
      # Only some special files require specific permissions
      # The default permissions should be good enough for most cases
    
      # Here are some examples for the set_perm functions:
    
      # set_perm_recursive  <dirname>                <owner> <group> <dirpermission> <filepermission> <contexts> (default: u:object_r:system_file:s0)
      # set_perm_recursive  $MODPATH/system/lib       0       0       0755            0644
    
      # set_perm  <filename>                         <owner> <group> <permission> <contexts> (default: u:object_r:system_file:s0)
      # set_perm  $MODPATH/system/bin/app_process32   0       2000    0755         u:object_r:zygote_exec:s0
      # set_perm  $MODPATH/system/bin/dex2oat         0       2000    0755         u:object_r:dex2oat_exec:s0
      # set_perm  $MODPATH/system/lib/libart.so       0       0       0644
    
      # The following is default permissions, DO NOT remove
      set_perm_recursive  $MODPATH  0  0  0755  0644
      
      #设置权限,基本不要去动
    }
    
    ##########################################################################################
    # Custom Functions
    ##########################################################################################
    
    # This file (config.sh) will be sourced by the main flash script after util_functions.sh
    # If you need custom logic, please add them here as functions, and call these functions in
    # update-binary. Refrain from adding code directly into update-binary, as it will make it
    # difficult for you to migrate your modules to newer template versions.
    # Make update-binary as clean as possible, try to only do function calls in it.
    
    
    CommonPath=$MODPATH/common
    if [ ! -d ${CommonPath} ];then
      ui_print "模块高级设置不需要修复!"
      
    elif [ "`ls -A ${CommonPath}`" = "" ];then
        ui_print "模块高级设置为空!"
        rm  -rf  ${CommonPath}
    else
    
      ui_print "- 正在进行模块高级设置"
      mv  ${CommonPath}/*  $MODPATH
      rm  -rf ${CommonPath}
    
    fi
    

    这个应该是面具模块里面最简单的一个。其实目前有很多玩机工具里面有很多面具模块的初始模板.。

  10. 结合以上描述。应该可以初步了解面具模块的组成和其中各文件的作用。有兴趣的友友可以分解一些简单的模块对照了解其文件组成。原则上来说。面具模块可以完成很多第三方rec卡刷补丁的一些操作。而且操作也比较简单。更详细的可以参考:Developer Guides | Magisk各面具更新 更换等可以参考;玩机搞机----root面具的安装 更新 隐藏root 德尔塔面具等等综合解析_安卓机器的博客-CSDN博

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/81720.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营day39 | 62. 不同路径,63. 不同路径 II

目录 62. 不同路径 63. 不同路径 II 62. 不同路径 类型&#xff1a;动态规划 难度&#xff1a;medium 思路&#xff1a; 应用二维数组的动态规划&#xff0c;到达某个方格的方法数目&#xff0c;为这个方格的上一个方格和左一个方格的方法数目和。 需要先初始化第一行和第一…

关于查看处理端口号和进程[linux]

查看端口号 lsof -i:端口号如果-bash: lsof: 未找到命令那我们可以执行yum install lsof 删除端口号进程 一般我们都会使用kill命令 kill -l#列出所有可用信号1 (HUP)&#xff1a;重新加载进程。9 (KILL)&#xff1a;杀死一个进程。15 (TERM)&#xff1a;正常停止一个进程。 …

PyTorch Lightning:通过分布式训练扩展深度学习工作流

一、介绍 欢迎来到我们关于 PyTorch Lightning 系列的第二篇文章&#xff01;在上一篇文章中&#xff0c;我们向您介绍了 PyTorch Lightning&#xff0c;并探讨了它在简化深度学习模型开发方面的主要功能和优势。我们了解了 PyTorch Lightning 如何为组织和构建 PyTorch 代码提…

详解junit

目录 1.概述 2.断言 3.常用注解 3.1.Test 3.2.Before 3.3.After 3.4.BeforeClass 3.5.AfterClass 4.异常测试 5.超时测试 6.参数化测试 1.概述 什么是单元测试&#xff1a; 单元测试&#xff0c;是针对最小的功能单元编写测试代码&#xff0c;在JAVA中最小的功能单…

openpose姿态估计【学习笔记】

文章目录 1、人体需要检测的关键点2、Top-down方法3、Openpose3.1 姿态估计的步骤3.2 PAF&#xff08;Part Affinity Fields&#xff09;部分亲和场3.3 制作PAF标签3.4 PAF权值计算3.5 匹配方法 4、CPM&#xff08;Convolutional Pose Machines&#xff09;模型5、Openpose5.1 …

博客系统之功能测试

博客系统共有&#xff1a;用户登录功能、发布博客功能、查看文章详情功能、查看文章列表功能、删除文章功能、退出功能 1.登录功能&#xff1a; 1.1测试对象&#xff1a;用户登录 1.2测试用例 方法&#xff1a;判定表 用例 编号 操作步骤预期结果实际结果截图1 1.用户名正确…

【C++从0到王者】第二十一站:继承

文章目录 前言一、继承的概念及定义1. 继承的概念2.继承的格式3.继承关系与访问限定符 二、基类和派生类的赋值转换三、继承中的作用域四、派生类的默认成员函数五、继承与友元六、继承与静态成员 前言 继承是面向对象的三大特性之一。我们常常会遇到这样的情况。很多角色的信…

一、docker及mysql基本语法

文章目录 一、docker相关命令二、mysql相关命令 一、docker相关命令 &#xff08;1&#xff09;拉取镜像&#xff1a;docker pull <镜像ID/image> &#xff08;2&#xff09;查看当前docker中的镜像&#xff1a;docker images &#xff08;3&#xff09;删除镜像&#x…

Python web实战之细说 Django 的单元测试

关键词&#xff1a; Python Web 开发、Django、单元测试、测试驱动开发、TDD、测试框架、持续集成、自动化测试 大家好&#xff0c;今天&#xff0c;我将带领大家进入 Python Web 开发的新世界&#xff0c;深入探讨 Django 的单元测试。通过本文的实战案例和详细讲解&#xff…

DNS域名解析服务器

一、DNS简介 1、因特网的域名结构 2、域名服务器的类型划分 二、DNS域名解析的过程 三、DNS服务器配置 两个都定义&#xff0c;ttl的优先&#xff1a; 能解析&#xff0c;不能拼通&#xff08;没有13这个主机&#xff09; 别名&#xff1a; 测试&#xff1a; 主&#xff08;192…

AI在日常生活中的应用:从语音助手到自动驾驶

文章目录 AI的定义和发展AI在日常生活中的应用1. **智能语音助手**2. **智能家居**3. **智能医疗**4. **自动驾驶** 代码示例&#xff1a;使用Python实现基于机器学习的图片分类AI的未来前景结论 &#x1f389;欢迎来到AIGC人工智能专栏~探索AI在日常生活中的应用 ☆* o(≧▽≦…

fiddler抓包问题记录,支持https、解决 tunnel to 443

fiddler下载安装步骤及基本配置 fiddler抓包教程&#xff0c;如何抓取HTTPS请求&#xff0c;详细教程 可能遇到的问题及解决方案 1. 不能正常访问页面&#xff08;所有https都无法访问&#xff09; 解决方案&#xff1a;查看下面配置是否正确 Rules-customization 找到 OnB…

Django进阶:DRF(Django REST framework)

什么是DRF&#xff1f; DRF即Django REST framework的缩写&#xff0c;官网上说&#xff1a;Django REST framework是一个强大而灵活的工具包&#xff0c;用于构建Web API。 简单来说&#xff1a;通过DRF创建API后&#xff0c;就可以通过HTTP请求来获取、创建、更新或删除数据(…

常见排序集锦-C语言实现数据结构

目录 排序的概念 常见排序集锦 1.直接插入排序 2.希尔排序 3.选择排序 4.堆排序 5.冒泡排序 6.快速排序 hoare 挖坑法 前后指针法 非递归 7.归并排序 非递归 排序实现接口 算法复杂度与稳定性分析 排序的概念 排序 &#xff1a;所谓排序&#xff0c;就是使一串记录&#…

Win11中zookeeper的下载与安装

下载步骤 打开浏览器&#xff0c;前往 Apache ZooKeeper 的官方网站&#xff1a;zookeeper官方。在主页上点击"Project"选项&#xff0c;并点击"Release" 点击Download按钮&#xff0c;跳转到下载目录 在下载页面中&#xff0c;选择版本号&#xff0c;并点…

什么是Pytorch?

当谈及深度学习框架时&#xff0c;PyTorch 是当今备受欢迎的选择之一。作为一个开源的机器学习库&#xff0c;PyTorch 为研究人员和开发者们提供了一个强大的工具来构建、训练以及部署各种深度学习模型。你可能会问&#xff0c;PyTorch 是什么&#xff0c;它有什么特点&#xf…

springboot、java实现调用企业微信接口向指定用户发送消息

因为项目的业务逻辑需要向指定用户发送企业微信消息&#xff0c;所以在这里记录一下 目录 引入相关依赖创建配置工具类创建发送消息类测试类最终效果 引入相关依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-…

【Python机器学习】实验14 手写体卷积神经网络(PyTorch实现)

文章目录 LeNet-5网络结构&#xff08;1&#xff09;卷积层C1&#xff08;2&#xff09;池化层S1&#xff08;3&#xff09;卷积层C2&#xff08;4&#xff09;池化层S2&#xff08;5&#xff09;卷积层C3&#xff08;6&#xff09;线性层F1&#xff08;7&#xff09;线性层F2 …

数据可视化-canvas-svg-Echarts

数据可视化 技术栈 canvas <canvas width"300" height"300"></canvas>当没有设置宽度和高度的时候&#xff0c;canvas 会初始化宽度为 300 像素和高度为 150 像素。切记不能通过样式去设置画布的宽度与高度宽高必须通过属性设置&#xff0c;…

Gateway网关路由以及predicates用法(项目中使用场景)

1.Gatewaynacos整合微服务 服务注册在nacos上&#xff0c;通过Gateway路由网关配置统一路由访问 这里主要通过yml方式说明&#xff1a; route: config: #type:database nacos yml data-type: yml group: DEFAULT_GROUP data-id: jeecg-gateway-router 配置路由&#xff1a;…