QQ登录

只需一步,快速开始

 找回密码
 注册账号

QQ登录

只需一步,快速开始

查看: 253|回复: 1

[实用教程] ROM定制教程--7系统脚本的初步分析及修改

[复制链接]
  • TA的每日心情
    慵懒
    2017-6-16 11:09
  • 签到天数: 18 天

    [LV.4]小有名气

    发表于 2015-4-22 16:58:35 | 显示全部楼层 |阅读模式
    ROM定制教程--7系统脚本的初步分析及修改
    脚本语法:
    1.copy_dir
    语法:copy_dir <src-dir><dst-dir> [<times**p>]<src-dir>表示原文件夹,<dst-dir>表示目的文件夹,[<times**p>]表示时间戳
    作用:将<src-dir>文件夹中的内容复制到<dst-dir>文件夹中。<dst-dir>文件夹中的原始内容将会保存不变,除非<src-dir>文件夹中有相同的内容,这样<dst-dir>中的内容将被覆盖
    举例:copy_dir PACKAGE:system SYSTEM:(将升级包中的system文件夹复制到手机中)2.format
    语法:format <root>
    <root>表示要格式化的分区
    作用:格式化一个分区
    举例:format SYSTEM:(将手机/system分区完全格式化)
    注意:格式化之后的数据是不可以恢复的

    3.delete
    语法:delete <file1> [... <fileN>]
    <file1> [... <fileN>]表示要格式化的文件,可以是多个文件用空格隔开
    作用:删除文件1,2到n
    举例:delete SYSTEM:app/Calculator.apk(删除手机systen文件夹中app中的Calculator.apk文件)

    4.delete_recursive
    语法:delete_recursive <file-or-dir1> [...<file-or-dirN>]
    <file-or-dir1> [... <file-or-dirN>]表示要删除的文件或文件夹,可以使多个,中间用空格隔开
    作用:删除文件或者目录,删除目录时会将目录中的所有内容全部删除
    举例:delete_recursive DATA:dalvik-cache(删除/data/dalvik-cache文件夹下的所有内容)

    5.run_program
    语法:run_program <program-file> [<args> ...]
    <program-file>表示要运行的程序,[<args> ...]表示运行程序所加的参数
    作用:运行终端程序
    举例:run_program PACKAGE:install_busybox.sh(执行升级包中的install_busybox.sh脚本)6.set_perm
    语法:set_perm <uid> <gid> <mode><path> [... <pathN>]
    <uid>表示用户名称,<gid>表示用户组名称,<mode>,表示权限模式,<path> [...<pathN>]表示文件路径,可以使多个,用空格隔开
    作用:设置单个文件或目录的所有者和权限,像linux中的chmod、chown或chgrp命令一
    样,只是集中在了一个命令当中
    举例:set_perm 0 2000 0550 SYSTEM:etc/init.goldfish.sh(设置手机system中的etc/init.goldfish.sh的用户为root,用户组为shell,所有者以及所属用户组成员可以进行读取和执行操作,其他用户无操作权限)

    7.set_perm_recursive语法:set_perm_recursive <uid><gid> <dir-mode> <file-mode> <path> [... <pathN>]
    <uid> 表示用户,<gid>表示用户组,<dir-mode>表示文件夹的权限,<file-mode>表示文件的权限,<path> [... <pathN>]表示文件夹的路径,可以多个,用空格分开
    作用:设置文件夹及文件夹中的文件的所有者和用户组
    举例:set_perm_recursive 0 0 0755 0644 SYSTEM:app(设置手机system/app文件夹及其中文件的用户为root,用户组为root,app文件夹权限为所有者可以进行读、写、执行操作,其他用户可以进行读取和执行操作,其中的文件的权限为所有者可以进行读写操作,其他用户可以进行读取操作)

    8.show_progress
    语法:show_progress <fraction> <duration>
    <表示一个小部分> <表示一个小部分的持续时间>
    作用:为下面进行的程序操作显示进度条,进度条会根据<duration>进行前进,当操作时间是确定的时候会更快
    举例:show_progress 0.1 0(显示进度条当操作完成后前进10%)

    9.symlink
    语法:symlink <link-target> <link-path>
    <link-target>表示链接到的目标,<link-path>表示快捷方式的路径
    作用:相当于linux中的ln命令,将<link-target>在<link-path>处创建一个软链接,<link-target>的格式应为绝对路径(或许相对路径也可以),<link-path>为“根目录:路径”的形式
    举例:symlink /system/bin/su SYSTEM:xbin/su(在手机中system中的xbin中建立一个/system/bin/su的快捷方式)

    10.assert
    语法:assert <boolexpr>
    作用:此命令用来判断表达式boolexpr的正确与否,当表达式错误时程序终止执行※此作用有待验证

    11.package_extract_file/dir语法:package_extract_file(file/dir,file/dir)
    作用:提取包中文件/路径
    举例:package_extract_dir("system","/system");
    package_extract_file("system/bin/modelid_cfg.sh","/tmp/modelid_cfg.sh");
    12.write_radio_image
    语法:write_radio_image <src-image>
    作用:将基带部分的镜像写入手机,<src-image>表示镜像文件
    举例:write_radio_image PACKAGE:radio.img

    13.write_hboot_image
    语法:write_hboot_image <src-image>
    作用:将系统bootloader镜像写入手机,<src-image>表示镜像位置,此命令在直到在所有的程序安装结束之后才会起作用
    举例:write_hboot_image PACKAGE:hboot.img
    14.write_raw_image语法:write_raw_image <src-image> <dest-root>
    作用:将boot.img写入手机,里面包含了内核和ram盘
    举例:write_raw_image PACKAGE:boot.img BOOT:
    META-INF文件夹的修改:        

            打开META-INF文件夹,你会看到一些文件和一个文件夹。文件就是加密信息,我们可以不用管它,重要的是那个文件夹,一步步点进去,会看到update-script,这个就是升级脚本,它控制着我们刷机的步骤和顺序等信息,非常重要。
            我大概复制一部分来做下解释(该文件可以直接用文本打开并编辑):
            
                   

            show_progress 0.500000 0                       ----插入一个标签信息
            format SYSTEM:                                 ----格式化system
            copy_dir PACKAGE:systemSYSTEM:           --拷贝刷机包的system到机身system
                    set_perm_recursive 0 0 0755 0644SYSTEM:          -------权限类的设置
                    show_progress 0.2000000                          -------再插入一个标签
            write_raw_image PACKAGE:boot.imgBOOT:             ---刷写boot
            
            format CACHE:                          -----格式化缓存
            show_progress 0.100000 10                       -----插入一个标签
            
    ok,大部分的东西都不需要我们修改。但如果你自己新建了一个/data/app,并在里面内置了自己喜欢的软件,那我们就要在升级脚本里做一些修改了,因为脚本里并没有提到这个data文件夹(上面的脚本里,提到了system文件夹)。

            我们只需要加入(这个是比较保守的写法):
            show_progress 0.200000 0               ---样成好习惯,加入一个显示标签吧      
            
            delete DATA:app                                    
            delete DATA:init.rc
            delete DATA:local
            delete DATA:dalvik-cache
            copy_dir PACKAGE:data DATA:          -----拷贝刷机包的data
            set_perm 1000 1000 0771DATA:app           ----设置data/app的权限
            

    那我们把这段脚本加在哪个位置呢?我自己一般是放在
            show_progress 0.200000 0                          
            write_raw_image PACKAGE:boot.imgBOOT:
    的前面。

    修改过的升级脚本,就可以让你新建的data文件夹,能够成功刷进去了。
    再次体现,升级脚本是非常重要的东西,如果你想制作一个简单的升级补丁,也需要用到升级脚本。我在后面会单独介绍小补丁的制作方法

    <

    该用户从未签到

    发表于 2015-8-1 07:25:55 | 显示全部楼层
    你说吧,你是想死呢还是不想活了?
    回复 支持 反对

    使用道具 举报

    *滑块验证:
    您需要登录后才可以回帖 登录 | 注册账号

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    GMT+8, 2017-10-19 04:18 , Processed in 0.077470 second(s), 21 queries , Gzip On, Yac On.

    © 2013-2017 Powered by Discuz! X3.3. Theme By Yeei!

    快速回复 返回顶部 返回列表