update-script脚本语法简介

合集下载

update用法js

update用法js

update用法js在JavaScript中,`update`是一个通用的术语,用于表示更新或修改某个对象、元素或实体的状态或属性。

`update`的具体用法与上下文有关,可以用于不同的对象和操作。

以下是一些常见的`update`用法:1.更新HTML元素的内容:可以使用`innerHTML`属性来更新HTML元素的内容。

例如,通过获取元素的ID并设置其`innerHTML`属性,可以更新元素的文本、HTML或其他内容。

```javascriptdocument.getElementById('elementId').innerHTML = 'New content';```2.更新对象的属性:对象的属性可以通过直接赋值的方式进行更新。

例如,可以通过给对象的属性赋新值来更新它们的状态。

```javascriptvar obj = { name: 'John', age: 25 }; = 'Alice';obj.age = 30;```3.更新数组的元素:数组元素可以通过索引进行更新。

可以通过给数组指定的索引位置赋新值来更新特定位置的元素。

```javascriptvar arr = [1, 2, 3, 4];arr[1] = 5;arr[3] = 6;```4.更新数据库记录:在与数据库交互的应用程序中,可以使用SQL语句或ORM(对象关系映射)工具来更新数据库记录。

具体的`update`语法和用法取决于所使用的数据库和工具。

5.更新框架的状态:许多JavaScript框架(如React、Vue和Angular)使用状态管理来管理应用程序的状态。

可以通过更新状态来反映应用程序中发生的变化,并相应地更新用户界面。

```javascript// React示例constructor(props)super(props);this.state = { count: 0 };}handleClicthis.setState({ count: this.state.count + 1 });}rendereturn<div><p>Count: {this.state.count}</p><buttononClick={this.handleClick.bind(this)}>Increment</button> </div>}```上述示例中,通过调用`this.setState`方法来更新`Counter`组件的状态,从而重新渲染并显示更新后的计数。

update语法汇总

update语法汇总

update语法汇总UPDATE语法是用于修改关系型数据库中表中的数据的重要语法之一、通过UPDATE语法可以更新表中已有的数据,并且可以根据需要更新一条或多条数据。

下面是对UPDATE语法的详细介绍,包括UPDATE的概述、UPDATE的语法结构、UPDATE的使用方法以及UPDATE的注意事项等。

一、UPDATE的概述1.UPDATE是用于更新表中已有数据的关键字,它是SQL语句中最常用的关键字之一;2.UPDATE语句可以根据条件将表中的一条或多条数据进行更新,通过设置不同的条件,可以实现精确的数据更新操作;3.UPDATE语句可以更新表中的一个或多个列,从而修改表中的数据。

二、UPDATE的语法结构UPDATE语句的语法结构如下:```sqlUPDATE<表名>SET<列1>=<值1>,<列2>=<值2>,...[WHERE<条件>]```1.`UPDATE`:表示要进行更新操作;2.`<表名>`:需要更新数据的表的名称;3.`SET`:后面跟着要更新的列名以及对应的值,用逗号分隔,表示进行更新的列及其新值;4.`<列1>=<值1>,<列2>=<值2>,...`:表示要更新的列及其新值;5.`[WHERE<条件>]`:可选项,表示对更新的数据进行过滤,只更新满足条件的数据。

三、UPDATE的使用方法1.更新全部数据:如果不设置WHERE条件,则会更新表中的全部数据;```sqlUPDATE表名SET列1=值1,列2=值2,...```2.更新部分数据:如果只想更新满足条件的部分数据,可以通过设置WHERE条件实现。

WHERE条件可以使用比较操作符、逻辑操作符以及通配符进行设置;```sqlUPDATE表名SET列1=值1,列2=值2,...WHERE条件```3.更新多列数据:可以同时更新表中的多个列,只需在SET后面用逗号分隔每个列的更新操作;```sqlUPDATE表名SET列1=值1,列2=值2,...WHERE条件```4.更新特定的列:有些时候,只需要更新几列的数据,而不需要更新表中的全部列。

update标签用法

update标签用法

update标签用法
Update标签是HTML5中的一个新标签,它的作用是用于实时更新网页内容。

在Web开发中,我们经常需要实时更新网页的内容,例如聊天室、股票行情等。

使用Update标签可以很方便地实现这些功能。

Update标签的语法格式如下:
<update id="update1" data-update="content">新的内容
</update>
其中,id属性用于指定Update标签的唯一标识符,data-update属性用于指定需要更新的内容。

在实际使用中,我们可以通过JavaScript代码来动态地更新Update标签中的内容,例如:
var update1 = document.getElementById("update1");
update1.innerHTML = "更新后的内容";
除了innerHTML属性,还可以使用innerText、textContent等属性来更新Update标签中的内容。

需要注意的是,Update标签只能在支持HTML5的浏览器中使用。


果需要在旧版浏览器中实现实时更新功能,可以考虑使用Ajax技术或者轮询技术。

总之,Update标签是一个非常实用的HTML5标签,它可以方便地实现网页内容的实时更新。

在Web开发中,我们可以根据具体需求灵活运用Update标签,提高网页的交互性和用户体验。

updater-script 脚本 Edify语句 详细解读

updater-script 脚本 Edify语句 详细解读

大部分的Edify命名都是函数,当调用这些函数结束的时候,会返回数据给脚本当然,你也可以使用这些函数的返回值来确认成功与否例如:下面是用在Edify的Updater-script中的函数例子:本帖隐藏的内容函数名称:mount函数语法:mount(fs_type, partition_type, location, mount_point)参数详解: fs_type-----------------"yaffs2" 或"ext4"partition_type----------"MTD"或"EMMC"location-----------------分区(partition) 或驱动器(device)mount_poin------------挂载文件系统的目标文件夹(target folder to mount FS)作用解释:挂载一个文件系统到指定的挂载点返回值:挂载成功则返回挂载点,失败返回null函数示例:mount("MTD", "system", "/system");挂载system分区,设置返回指针"/system”mount("vfat", "/dev/block/mmcblk1p2", "/system"); 挂载/dev/block/mmcblk1p2,返回指针"/system”函数名称: is_mounted函数语法: is_mounted(mount_point)参数详解: mount_point-----------字符串,检查是否已经挂载的挂载点作用解释:检查文件系统是否挂载返回值:挂载成功则返回挂载点,失败返回null函数示例:函数名称: unmount函数语法: unmount(mount_point)参数详解: mount_point-----------字符串,要解除挂载的挂载点作用解释:解除文件系统挂载返回值: 解除挂载成功则返回挂载点,失败返回null函数示例: unmount("/system"); 卸载/system分区函数名称: format函数语法: format(fs_type, partition_type, location)参数详解: fs_type-----------------字符串,数据为"yaffs2" 或"ext4"partition_type----------字符串, "MTD" 或"EMMC"location-----------------字符串, 分区(partition) 或驱动器(device)作用解释:格式化为指定的文件系统函数示例: format("MTD", "system");格式化system分区函数名称: delete函数语法: delete(file1, file2, ..., fileN)参数详解:字符串,要删除的文件作用解释:删除一个文件。

update-script脚本语法说明

update-script脚本语法说明

system:系统分区.我们刷机器一般就是刷的这个分区.userdata:数据分区.cache:缓存分区recovery:Recovery分区,相当于建立在hboot与android系统间的一个中间层,如名字一般,主要用于系统调试和恢复。

.boot:存放内核和ramdisk的分区.hboot:这个是SPL所在的分区,即bootloadersplash1:这个就是开机第一屏幕了.radio:这个是无线所在的分区.misc:其他分区1.copy_dir语法:copy_dir <src-dir> <dst-dir> [<timestamp>]<src-dir>表示原文件夹,<dst-dir>表示目的文件夹,[<timestamp>]表示时间戳作用:将<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脚本)语法: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 <boolexpr>作用:此命令用来判断表达式boolexpr的正确与否,当表达式错误时程序终止执行※此作用有待验证11.write_radio_image <src-image>作用:将基带部分的镜像写入手机,<src-image>表示镜像文件举例:write_radio_image PACKAGE:radio.img12.write_hboot_image <src-image>作用:将系统bootloader镜像写入手机,<src-image>表示镜像位置,此命令在直到在所有的程序安装结束之后才会起作用举例:write_hboot_image PACKAGE:hboot.img13.write_raw_image <src-image> <dest-root>作用:将boot.img写入手机,里面包含了内核和ram盘举例:write_raw_image PACKAGE:boot.img BOOT:完整示例:assert(getprop("ro.product.device") == "morr" || getprop("ro.build.product") == "morr" || getprop("ro.product.board") == "morr" || getprop("ro.product.device") == "morrison" || getprop("ro.build.product") == "morrison" || getprop("ro.product.board") == "morrison");package_extract_file("system/bin/backuptool.sh", "/tmp/backuptool.sh");set_perm(0, 0, 0777, "/tmp/backuptool.sh");run_program("/tmp/backuptool.sh", "backup");show_progress(0.500000, 0);format("yaffs2", "MTD", "system");mount("yaffs2", "MTD", "system", "/system");package_extract_dir("recovery", "/system");package_extract_dir("system", "/system");symlink("busybox", "/system/xbin/[", "/system/xbin/[[","/system/xbin/arp", "/system/xbin/ash", "/system/xbin/awk","/system/xbin/basename", "/system/xbin/bbconfig", "/system/xbin/brctl","/system/xbin/bunzip2", "/system/xbin/bzcat", "/system/xbin/bzip2","/system/xbin/cal", "/system/xbin/cat", "/system/xbin/catv","/system/xbin/chgrp", "/system/xbin/chmod", "/system/xbin/chown","/system/xbin/chroot", "/system/xbin/cksum", "/system/xbin/clear","/system/xbin/cmp", "/system/xbin/cp", "/system/xbin/cpio","/system/xbin/cut", "/system/xbin/date", "/system/xbin/dc","/system/xbin/dd", "/system/xbin/depmod", "/system/xbin/devmem","/system/xbin/df", "/system/xbin/diff", "/system/xbin/dirname","/system/xbin/dmesg", "/system/xbin/dnsd", "/system/xbin/dos2unix","/system/xbin/du", "/system/xbin/echo", "/system/xbin/ed","/system/xbin/egrep", "/system/xbin/env", "/system/xbin/expr","/system/xbin/false", "/system/xbin/fdisk", "/system/xbin/fgrep","/system/xbin/find", "/system/xbin/fold", "/system/xbin/free","/system/xbin/freeramdisk", "/system/xbin/fuser", "/system/xbin/getopt","/system/xbin/grep", "/system/xbin/gunzip", "/system/xbin/gzip","/system/xbin/head", "/system/xbin/hexdump", "/system/xbin/id","/system/xbin/ifconfig", "/system/xbin/insmod", "/system/xbin/install","/system/xbin/ip", "/system/xbin/kill", "/system/xbin/killall","/system/xbin/killall5", "/system/xbin/length", "/system/xbin/less","/system/xbin/ln", "/system/xbin/losetup", "/system/xbin/ls","/system/xbin/lsmod", "/system/xbin/lspci", "/system/xbin/lsusb","/system/xbin/lzop", "/system/xbin/lzopcat", "/system/xbin/md5sum","/system/xbin/mkdir", "/system/xbin/mke2fs", "/system/xbin/mkfifo","/system/xbin/mkfs.ext2", "/system/xbin/mknod", "/system/xbin/mkswap", "/system/xbin/mktemp", "/system/xbin/modprobe", "/system/xbin/more", "/system/xbin/mount", "/system/xbin/mountpoint", "/system/xbin/mv", "/system/xbin/netstat", "/system/xbin/nice", "/system/xbin/nohup","/system/xbin/nslookup", "/system/xbin/ntpd", "/system/xbin/od","/system/xbin/patch", "/system/xbin/pgrep", "/system/xbin/pidof","/system/xbin/ping", "/system/xbin/pkill", "/system/xbin/printenv","/system/xbin/printf", "/system/xbin/ps", "/system/xbin/pwd","/system/xbin/rdev", "/system/xbin/readlink", "/system/xbin/realpath","/system/xbin/renice", "/system/xbin/reset", "/system/xbin/rm","/system/xbin/rmdir", "/system/xbin/rmmod", "/system/xbin/route","/system/xbin/run-parts", "/system/xbin/sed", "/system/xbin/seq","/system/xbin/setsid", "/system/xbin/sh", "/system/xbin/sha1sum","/system/xbin/sha256sum", "/system/xbin/sha512sum","/system/xbin/sleep", "/system/xbin/sort", "/system/xbin/split","/system/xbin/stat", "/system/xbin/strings", "/system/xbin/stty","/system/xbin/swapoff", "/system/xbin/swapon", "/system/xbin/sync","/system/xbin/sysctl", "/system/xbin/tac", "/system/xbin/tail","/system/xbin/tar", "/system/xbin/tee", "/system/xbin/telnet","/system/xbin/test", "/system/xbin/tftp", "/system/xbin/time","/system/xbin/top", "/system/xbin/touch", "/system/xbin/tr","/system/xbin/traceroute", "/system/xbin/true", "/system/xbin/tty","/system/xbin/tune2fs", "/system/xbin/umount", "/system/xbin/uname", "/system/xbin/uniq", "/system/xbin/unix2dos", "/system/xbin/unlzop","/system/xbin/unzip", "/system/xbin/uptime", "/system/xbin/usleep","/system/xbin/uudecode", "/system/xbin/uuencode", "/system/xbin/vi", "/system/xbin/watch", "/system/xbin/wc", "/system/xbin/wget","/system/xbin/which", "/system/xbin/whoami", "/system/xbin/xargs","/system/xbin/yes","/system/xbin/zcat");symlink("iwmulticall", "/system/xbin/iwconfig", "/system/xbin/iwgetid", "/system/xbin/iwlist", "/system/xbin/iwpriv","/system/xbin/iwspy");symlink("toolbox", "/system/bin/cat", "/system/bin/cmp","/system/bin/date", "/system/bin/dd", "/system/bin/dmesg","/system/bin/getevent", "/system/bin/getprop", "/system/bin/hd","/system/bin/id", "/system/bin/ifconfig", "/system/bin/iftop","/system/bin/insmod", "/system/bin/ioctl", "/system/bin/ionice","/system/bin/kill", "/system/bin/log", "/system/bin/lsmod","/system/bin/nandread", "/system/bin/netstat","/system/bin/newfs_msdos", "/system/bin/notify", "/system/bin/printenv", "/system/bin/ps", "/system/bin/reboot", "/system/bin/renice","/system/bin/rmdir", "/system/bin/rmmod", "/system/bin/route","/system/bin/schedtop", "/system/bin/sendevent","/system/bin/setconsole", "/system/bin/setprop", "/system/bin/sleep","/system/bin/smd", "/system/bin/start", "/system/bin/stop","/system/bin/sync", "/system/bin/top", "/system/bin/uptime","/system/bin/vmstat", "/system/bin/watchprops","/system/bin/wipe");set_perm_recursive(0, 0, 0755, 0644, "/system");set_perm_recursive(0, 2000, 0755, 0755, "/system/bin");set_perm(0, 3003, 02750, "/system/bin/netcfg");set_perm(0, 3004, 02755, "/system/bin/ping");set_perm(0, 2000, 06750, "/system/bin/run-as");set_perm(1001, 1005, 0444, "/system/etc/AudioPara4.csv");set_perm_recursive(1002, 1002, 0755, 0440, "/system/etc/bluetooth");set_perm(0, 0, 0755, "/system/etc/bluetooth");set_perm(1000, 1000, 0640, "/system/etc/bluetooth/auto_pairing.conf");set_perm(3002, 3002, 0444, "/system/etc/bluetooth/blacklist.conf");set_perm(1002, 1002, 0440, "/system/etc/dbus.conf");set_perm(1014, 2000, 0550, "/system/etc/dhcpcd/dhcpcd-run-hooks");set_perm_recursive(0, 2000, 0755, 0750, "/system/etc/init.d");set_perm(0, 0, 0755, "/system/etc/init.d");set_perm(0, 2000, 0550, "/system/etc/init.goldfish.sh");set_perm(0, 0, 0544, "/system/etc/install-recovery.sh");set_perm_recursive(0, 0, 0755, 0555, "/system/etc/ppp");set_perm_recursive(0, 2000, 0755, 0644, "/system/vendor");set_perm_recursive(0, 0, 0755, 0644, "/system/vendor/firmware");set_perm(0, 2000, 0755, "/system/vendor/firmware");set_perm_recursive(0, 2000, 0755, 0755, "/system/xbin");set_perm(0, 0, 06755, "/system/xbin/hcitool");set_perm(0, 0, 06755, "/system/xbin/librank");set_perm(0, 0, 06755, "/system/xbin/procmem");set_perm(0, 0, 06755, "/system/xbin/procrank");set_perm(0, 0, 06755, "/system/xbin/su");set_perm(0, 0, 06755, "/system/xbin/tcpdump");show_progress(0.200000, 0);show_progress(0.200000, 10);package_extract_file("system/bin/backuptool.sh", "/tmp/backuptool.sh");set_perm(0, 0, 0777, "/tmp/backuptool.sh");run_program("/tmp/backuptool.sh", "restore");package_extract_file("system/bin/modelid_cfg.sh", "/tmp/modelid_cfg.sh");set_perm(0, 0, 0777, "/tmp/modelid_cfg.sh");run_program("/tmp/modelid_cfg.sh");package_extract_file("system/bin/verify_cache_partition_size.sh", "/tmp/verify_cache_partition_size.sh"); set_perm(0, 0, 0777, "/tmp/verify_cache_partition_size.sh");run_program("/tmp/verify_cache_partition_size.sh");show_progress(0.200000, 10);assert(package_extract_file("boot.img", "/tmp/boot.img"), write_raw_image("/tmp/boot.img", "boot"),delete("/tmp/boot.img"));show_progress(0.100000, 0);unmount("/system");。

updateorinsert用法 -回复

updateorinsert用法 -回复

updateorinsert用法-回复update或insert是数据库操作中的两个重要命令,用于更新或插入数据。

update用于更新数据库中已有的数据记录,而insert用于向数据库中插入新的数据记录。

在本文中,我们将以update和insert的用法为主题,一步一步回答。

【引言】在现代社会中,数据库扮演着至关重要的角色。

随着信息技术的发展,数据库操作变得日益常见且重要。

数据库中的数据需要进行更新和插入,这就引出了update和insert命令的用法。

在本文中,我们将详细介绍update和insert的用法,帮助读者更好地理解和应用这两个命令。

【正文】一、update命令用法:1. 语法:UPDATE 表名SET 列名1 = 值1, 列名2 = 值2, ... WHERE 条件;2. 解释:- UPDATE:表示要更新数据。

- 表名:表示要更新数据的表。

- SET:表示要设置的新值。

- 列名:表示要设置新值的列。

- 值:表示要设置的具体数值。

- WHERE:表示要更新的数据的条件。

3. 例子:假设我们有一个名为“Students”的表,其中包含学生的信息,如姓名、年龄和成绩。

如果我们要更新某个学生的成绩,可以使用以下命令:UPDATE Students SET 成绩= 90 WHERE 姓名= '张三';二、insert命令用法:1. 语法:INSERT INTO 表名(列名1, 列名2, ...) VALUES (值1, 值2, ...);2. 解释:- INSERT INTO:表示要插入数据。

- 表名:表示要插入数据的表。

- 列名:表示要插入数据的列。

- 值:表示要插入的具体数值。

3. 例子:假设我们有一个名为“Employees”的表,其中包含员工的信息,如姓名、工号和职位。

如果我们要插入一个新的员工信息,可以使用以下命令:INSERT INTO Employees (姓名, 工号, 职位) VALUES ('李四','E1001', '经理');【总结】数据库操作中的update和insert命令是非常常用和重要的。

update用法js

update用法js

update用法js在JavaScript中,update是一个很常用的方法。

它主要用于更新或修改现有的数据。

无论是更新数组的元素、修改对象的属性,还是更新DOM元素的内容,update方法都是必不可少的。

在这篇文章中,我将详细介绍update方法的用法和一些相关的注意事项。

希望通过阅读这篇文章,你可以对update方法有更深入的了解,并能在实际项目中灵活运用。

一、数组的更新在JavaScript中,数组是一种非常常见的数据结构。

当我们需要更新数组中的元素时,可以使用update方法来实现。

下面是一个使用update方法更新数组的示例代码:```const arr = [1, 2, 3, 4, 5];const updatedArr = update(arr, 2, 10);console.log(updatedArr); // [1, 2, 10, 4, 5]```在上面的代码中,我们将arr数组中索引为2的元素更新为10,最终得到的结果是[1, 2, 10, 4, 5]。

需要注意的是,update方法并不会修改原始的数组,而是返回一个新的数组。

这是因为在JavaScript中,数组是一种可变的数据类型,对它的任何操作都会返回一个新的数组。

二、对象的更新除了数组,对象也是一种非常常见的数据类型。

当我们需要更新对象的属性时,同样可以使用update方法。

下面是一个使用update方法更新对象的示例代码:```const obj =name: "Lucy",age: 25,gender: "female"};const updatedObj = update(obj, { age: 26, gender: "male" });console.log(updatedObj);//// name: "Lucy",// age: 26,// gender: "male"//}```在上面的代码中,我们将obj对象中的age属性更新为26,gender 属性更新为"male",最终得到的结果是更新后的对象。

update-script脚本语法简介

update-script脚本语法简介

(九)---updat‎e r-scrip‎t脚本语法‎简介以及执‎行流程分类:Andri‎o d2012-04-16 14:24 8888人‎阅读评论(23) 收藏举报脚本andro‎i d工作symli‎n ksyste‎m pathAndro‎i d系统R‎e cove‎r y工作原‎理之使用u‎p date‎.zip升级‎过程分析(九)---updat‎e r-scrip‎t脚本语法‎简介以及执‎行流程目前upd‎a te-scrip‎t脚本格式‎是edif‎y,其与ame‎n d有何区‎别,暂不讨论,我们只分析‎其中主要的‎语法,以及脚本的‎流程控制。

一、updat‎e-scrip‎t脚本语法‎简介:我们顺着所‎生成的脚本‎来看其中主‎要涉及的语‎法。

1.asser‎t(condi‎t ion):如果con‎d itio‎n参数的计‎算结果为F‎a lse,则停止脚本‎执行,否则继续执‎行脚本。

2.show_‎p rogr‎e ss(frac,sec):frac表‎示进度完成‎的数值,sec表示‎整个过程的‎总秒数。

主要用与显‎示UI上的‎进度条。

3.forma‎t(fs_ty‎p e,parti‎t ion_‎t ype,locat‎i on):fs_ty‎p e,文件系统类‎型,取值一般为‎“yaffs‎2”或“ext4”。

Parti‎t ion_‎t ype,分区类型,一般取值为‎“MTD”或则“EMMC”。

主要用于格‎式化为指定‎的文件系统‎。

事例如下:forma‎t(”yaffs‎2”,”MTD”,”syste‎m”)。

4.mount‎(fs_ty‎p e,parti‎t ion_‎t ype,locat‎i on,mount‎_poin‎t):前两个参数‎同上,locat‎i on要挂‎载的设备,mount‎_poin‎t挂载点。

作用:挂载一个文‎件系统到指‎定的挂载点‎。

unity update原理

unity update原理

unity update原理Unity Update 原理解析什么是 Unity Update?在 Unity 引擎中,Update 是指一种用于更新游戏逻辑的函数。

它是 Unity 内置函数之一,可以在 MonoBehaviour 类中重写。

当游戏进入每一帧时,Unity 引擎会自动调用 Update 函数,从而让开发者能够在游戏运行过程中实时更新游戏对象的行为。

Unity Update 的执行顺序在 Unity 引擎中,Update 的执行顺序是按照脚本的挂载顺序来确定的。

即先挂载的脚本会先执行 Update 函数,后挂载的脚本则会在其后执行。

这样的执行顺序在某些情况下可能会导致游戏逻辑的混乱,所以开发者需要注意脚本的挂载顺序。

Update 函数的用途Update 函数在游戏开发过程中有着广泛的应用。

它可以用于处理用户输入、控制角色移动、更新游戏状态等等。

以下是一些常见的 Update 函数用途示例: - 根据用户输入更新游戏对象的位置和旋转 - 检测碰撞并处理碰撞事件 - 更新游戏关卡的状态 - 控制游戏对象的动画状态运用时间间隔来控制 Update 的执行在 Update 函数中,Unity 引擎会传入一个时间间隔参数,用于指示距离上次 Update 函数调用经过了多长时间。

开发者可以根据这个时间间隔来控制游戏逻辑的更新速度。

以下是一个示例代码,展示了如何使用时间间隔来控制角色每秒钟移动的距离:float speed = ; // 角色移动的速度void Update(){float distancePerFrame = speed * ;( * distancePerFrame);}FixedUpdate 函数除了 Update 函数,Unity 还提供了另一个函数叫做FixedUpdate。

与 Update 函数不同,FixedUpdate 的执行时间是固定的,不受帧率的影响。

在某些情况下,使用 FixedUpdate 函数可能更加合适。

updater-script语法参考

updater-script语法参考

updateupdater r-script语法参考大星星出品参考来源:Google官方源码(froyo)(src/bootable/recovery/updater/install.c)地址:/?p=platform/bootable/recovery.git;a=blob_plain;f=updater/install.c;hb=HEAD•assert语法:assert(表达式1,[...<表达式N>])描述:按序执行<表达式>,如果返回为真,则继续执行下一命令,否则终止执行。

示例:assert(getprop("ro.product.device")=="umts_sholes"||getprop("ro.build.product")=="umts_sholes"|| getprop("ro.product.board")=="umts_sholes");,这个命令用来判断当前机器是否是Wildfire(buzz)。

不是则终止,是则继续。

•delete语法:delete(文件1,[...<文件N>])描述:删除指定的文件。

示例:delete("/tmp/a2sd.sh");,这个命令会删除手机中的文件/tmp/a2sd.sh。

•delete_recursive语法:delete_recursive(文件夹1,[...<文件夹N>])描述:删除一个文件或递归删除某个文件夹(也就是包括该文件夹中的所有内容)示例:delete_recursive(/system/app);,这个命令会删除手机/system/app文件夹下的所有内容。

•file_getprop语法:file_getprop(文件,指定的属性)描述:打开指定的prop文件,如果存在指定的属性,则返回该属性值,否则返回""。

updater-script语法说明

updater-script语法说明

Android系统recovery刷机脚本updater-script语法说明1.unmount1.unmount(mount_point);2.mount_point---是mount设置产生的值。

作用与挂载相对应,卸载分区或设备。

此函数与mount配套使用。

3.unmount("/system"); 卸载/system分区复制代码2.format1.format(type, location);2.type="MTD" location=partition(分区),location参数代表分区。

3.format("MTD", "system"); 格式化system分区复制代码3.mount1.mount(type, location, mount_point);2.type="MTD" location="" 挂载yaffs2文件系统分区;type="vfat" location="/dev/block/" 挂载设备。

3.mount("MTD", "system", "/system"); 挂载system分区,返回值"/system”4.mount("ext4", "/dev/block/mmcblk1p2", "/system"); 挂载/dev/block/mmcblk1p2,返回值"/system”/system分区格式为ext45.mount("vfat", "/dev/block/mmcblk1p2", "/system"); 挂载/dev/block/mmcblk1p2,返回值"/system”/system分区格式为vfat 复制代码4.Delete1.delete();删除文件2.delete("/data/zipalign.log"); 删除文件/data/zipalign.log复制代码5.delete_recursive1.delete_recursive();删除文件夹2.delete_recursive("/data/dalvik-cache");删除文件夹/data/dalvik-cache复制代码6.show_progress1.show_progress(,);为下面进行的程序操作显示进度条,进度条会根据设置的参数前进2.show_progress(0.1, 10);show_progress下面的操作可能进行10s,完成后进度条前进0.1(也就是10%)复制代码7.package_extract_dir1.package_extract_dir(package_path, destination_path);解压package_path文件夹到destination_path目录2.package_extract_dir("system", "/system"); 解压ROM包里system文件夹下所有文件和子文件夹至/system目录复制代码8.package_extract_file1.package_extract_file(package_path, destination_path);解压package_path文件到destination_path目录2.package_extract_dir("my.zip", "/system"); 解压ROM包里的my.zip文件到/system目录复制代码9.Symlink1.symlink(...);建立指向target符号链接src1,src2,也就是软链接2.symlink("toolbox", "/system/bin/ps");建立指向toolbox的符号链接/system/bin/ps复制代码10.set_perm1.set_perm(...);设置文件的用户为uid,用户组为gid,权限为mode2.set_perm(1002, 1002, 0440, "/system/etc/dbus.conf"); 设置文件/system/etc/dbus.conf的所有者为1002,所属用户组为1002,权限为:所有者有读权限,所属用户组有读权限,其他无任何权限。

update语法结构

update语法结构

update语法结构update 语法结构是 SQL 语句中使用最广泛的一种语句,它提供了作者修改表中数据的功能。

通常情况下,update语句是在存储数据结构上改变数据的基本方式。

update 语法的结构是这样的:UPDATE 表 SET 字段A=值A [, 字段B=值B ][ WHERE 条件 ];其中,update字句后面跟着表的名字,表后面跟着 set 字句,set后面跟着的是要修改的数据的字段-值的结构。

举例来说,一个表中有一个名为“name”的字段,想要把该字段的值改为“Tom”,则可以使用这样的语句:Update 表SET name=’Tom’;上面是一个最简单的update语句,用来修改表中某个字段的值。

一般情况下,update语句会更加复杂,以支持修改表中多个字段的值,以及根据一些条件来修改某些列的值。

比如,要修改示例表中name字段的多个值,这可以用如下的update语句:update 表set name=’Tom’,name=’John’,name=’Alice’;这个 update 语句会将表中 name 字段的值分别改为 Tom、John和Alice。

在一般情况下,update语句会搭配关键字where去使用,来确定要修改的内容。

比如,上面的例子中,其实只需要将表中name字段为“Mary”的记录改为“Alice”,此时可以用以下update语句进行:这句话的意思是筛选出name字段等于“Mary”的记录,将这些记录的name字段的值改为“Alice”。

总而言之,update 语句是 SQL 中使用最为广泛的语句,它提供了修改表中数据的功能,通过简单的几句话就可以完成 config 的修改,极大地简化了数据库开发和维护的工作量。

超级详细的update-script ROM脚本语法说明

超级详细的update-script ROM脚本语法说明

想要深入了解rom定制的一定会学习代码的相关知识在这里我总结了一个关于update-script脚本语法的说明供大家参考研究,部分资料来源于网络我想,能够研究到这一步的童鞋,应该是相当的有耐心和毅力了所以直接就是文字的形式,不搞太花哨的东西了还没有研究到这一步的童鞋,收藏吧,有朝一骂人不好也会用到的进入正题本帖隐藏的内容函数名称: mount函数语法: mount(fs_type, partition_type, location, mount_point)参数详解:fs_type-----------------"yaffs2" 或 "ext4"partition_type----------"MTD" 或 "EMMC"location-----------------分区(partition) 或驱动器(device)mount_poin------------挂载文件系统的目标文件夹(target folder to mount FS)作用解释: 挂载一个文件系统到指定的挂载点返回值: 挂载成功则返回挂载点,失败返回null函数示例: mount("MTD", "system", "/system");挂载system分区,设置返回指针"/system”mount("vfat", "/dev/block/mmcblk1p2", "/system"); 挂载/dev/block/mmcblk1p2,返回指针"/system”函数名称: is_mounted函数语法: is_mounted(mount_point)参数详解: mount_point-----------字符串,检查是否已经挂载的挂载点作用解释: 检查文件系统是否挂载返回值: 挂载成功则返回挂载点,失败返回null函数示例:函数名称: unmount函数语法: unmount(mount_point)参数详解: mount_point-----------字符串,要解除挂载的挂载点作用解释: 解除文件系统挂载返回值: 解除挂载成功则返回挂载点,失败返回null函数示例: unmount("/system"); 卸载/system分区函数名称: format函数语法: format(fs_type, partition_type, location)参数详解: fs_type-----------------字符串,数据为"yaffs2" 或 "ext4"partition_type----------字符串, "MTD" 或 "EMMC"location-----------------字符串, 分区(partition) 或驱动器(device)作用解释: 格式化为指定的文件系统函数示例: format("MTD", "system");格式化system分区函数名称: delete函数语法: delete(file1, file2, ..., fileN)参数详解: 字符串,要删除的文件作用解释: 删除一个文件。

update语句原理

update语句原理

update语句原理Update语句原理1. 简介•Update语句是关系数据库管理系统(RDBMS)中用于修改数据的一种SQL命令。

•它允许我们更新表中的一条或多条记录,通过改变指定列的值来实现数据的更新。

2. 语法•Update语句的基本语法如下:UPDATE 表名 SET 列名1=新值1, 列名2=新值2 W HERE 列名=条件;•其中,表名表示要修改的目标表,列名1和列名2表示要更新的列名,新值1和新值2表示要赋予的新值,WHERE子句用于指定更新的行。

3. 更新所有行•如果不指定WHERE子句,Update语句将会更新表中所有的记录,将指定列的值全部修改成新值。

4. 更新指定行•通过在WHERE子句中指定条件,我们可以更新满足条件的部分行。

常见的条件是使用主键或唯一键进行匹配。

5. 更新多个列•Update语句可以同时更新多个列的值,只需要在SET子句中使用逗号分隔即可。

6. 使用子查询更新•在SET子句中,我们还可以使用子查询来更新列的值。

•子查询可以查询其他表或当前表的不同行,然后将查询结果用于更新操作。

7. 更新事务•在关系数据库中,更新操作是作为事务执行的。

•更新语句将在一个事务中开始,如果执行成功则提交事务,否则会回滚事务并撤销所有更改。

8. 注意事项•在使用Update语句时,需要注意以下几个问题:–确保Update语句安全,避免未授权的访问。

–在更新大量数据时,考虑使用合适的索引来提高性能。

–更新操作会锁定相关行,可能会对系统的并发性产生影响,需要根据具体情况进行调整。

9. 总结•Update语句是修改关系数据库中数据的重要工具,可以通过更新指定行和列的值来满足不同的需求。

•理解Update语句的原理和语法,能够帮助我们更好地进行数据管理和处理。

以上是对Update语句原理的简要介绍和解释,通过本文我们可以了解到Update语句的基本语法、更新范围、多列更新和子查询更新等相关内容。

自定义OTA升级包(差分包,增量包,增量更新)

自定义OTA升级包(差分包,增量包,增量更新)

⾃定义OTA升级包(差分包,增量包,增量更新)OTA是Over-the-Air的简写,空中下载技术的意思,OTA升级包,就是⼀种可以使⽤⽹络或者SD卡给⼿机进⾏升级的⼀种⽂件包,相当于给系统打补丁的⼀种⽅法,其原理是通过recovery升级的功能进⾏实现的。

Recovery提供的功能如下,使⽤apply update from sdcard功能即可升级OTA包。

这种升级⽅式也可以通过adbroot/adb remount/adb push指令实现,但是需要连接到电脑PC端,且⽀持adb才⾏。

1、使⽤ota_from_target_files脚本⽣成制作差分包make otapackage——会⽣成sd卡⽤的全部系统升级包,如Y:\slm753_2\LA.BR.1.2.4-05310-8x16.0\out\target\product\slm753\obj\PACKAGING\target_files_intermediates\slm753-target_files-eng.Data.BU.zip此时修改代码,重新编译make;make otapackage第⼆次⽣成slm753-target_files-eng.Data.BU.zip,然后使⽤脚本,⽣成两个包之间的查分包:./build/tools/releasetools/ota_from_target_files -i <A包> <B包> <差分包名>升级的过程就是按照升级脚本:updater-script指定的动作来的,下⾯会介绍⾃定义升级包的过程,以及updater-script升级脚本的语法。

2、 DIY制作OTA差分包在out下⾯的产品⽬录下会⽣出⼀些OTA的包,最基本的空包组成如下截图:Y:\slm753_2\LA.BR.1.2.4-05310-8x16.0\out\target\product\slm753\其中update-binary是⼀个⼆进制⽂件,相当于⼀个脚本解释器,能够识别updater-script中描述的操作。

qt update语句用法

qt update语句用法

qt update语句用法摘要:1.更新语句简介2.更新语句的基本用法3.更新语句的扩展用法4.更新语句的注意事项正文:更新语句简介在编程领域,更新语句是一种用于修改程序中某些变量或数据结构的语句。

在Qt 中,更新语句被广泛应用于各种场景,以实现界面与数据的同步更新。

本文将详细介绍Qt 中更新语句的用法及注意事项。

更新语句的基本用法在Qt 中,更新语句主要通过QCoreApplication::processEvents() 函数来实现。

该函数可以处理事件队列,并在需要时更新界面。

基本用法如下:```cpp// 更新UIQCoreApplication::processEvents();```此外,还可以使用QTimer 类来实现定时更新。

例如:```cpp// 创建定时器QTimer *timer = new QTimer(this);connect(timer, &QTimer::timeout, this, [this] {// 更新UIQCoreApplication::processEvents();});// 设置定时器周期timer->setInterval(1000);// 启动定时器timer->start();```更新语句的扩展用法除了基本用法外,还可以通过信号与槽机制实现更复杂的更新功能。

例如,可以使用QLineEdit 类实现输入框的实时更新:```cpp// 创建QLineEdit 对象QLineEdit *lineEdit = new QLineEdit(this);// 连接信号与槽connect(lineEdit, &QLineEdit::textChanged, this, [this] {// 更新UIQCoreApplication::processEvents();});```在上述代码中,当输入框中的文本发生改变时,将自动触发textChanged 信号,从而实现界面的实时更新。

update 语法

update 语法

Update 语法简介在软件开发的过程中,更新语法是非常重要的一部分。

它可以用来修复漏洞、改进性能、增加新功能等。

本文将介绍一些常用的更新语法,以帮助开发人员更好地理解和应用。

1. 更新表达式更新语法通常以表达式的形式出现。

表达式由左值和右值组成,用于更新变量的值。

x =10# 设置变量x的值为10x +=5# 将变量x的值增加5,等同于 x = x + 5x -=3# 将变量x的值减少3,等同于 x = x - 3x *=2# 将变量x的值乘以2,等同于 x = x * 2x /=4# 将变量x的值除以4,等同于 x = x / 4上面的例子展示了常见的更新表达式,分别用于增加、减少、乘以和除以变量的值。

2. 更新条件在实际应用中,更新语法经常与条件语句结合使用,以根据特定的条件更新变量的值。

x =10if x >5:x +=3# 如果x大于5,则将x的值增加3else:x -=2# 否则将x的值减少2print(x) # 输出结果为11以上代码示例中,通过判断变量x是否大于5,使用条件语句更新变量的值。

3. 更新函数在一些开发场景中,我们可能需要自定义更新函数来实现更复杂的逻辑。

def update_value(x):if x >10:return x *2# 如果x大于10,则将x的值乘以2else:return x -5# 否则将x的值减少5x =12x = update_value(x)print(x) # 输出结果为24在上述代码中,定义了一个更新函数update_value,根据给定的条件返回更新后的值。

通过调用该函数,我们可以方便地更新变量的值。

4. 更新数据结构在一些应用场景中,更新语法还可以用于更新数据结构,如列表、字典等。

# 更新列表my_list = [1, 2, 3, 4, 5]my_list[2] =10# 将列表索引为2的元素更新为10print(my_list) # 输出结果为 [1, 2, 10, 4, 5]# 更新字典my_dict = {'name': 'John', 'age': 25}my_dict['age'] =30# 将字典键为'age'的值更新为30print(my_dict) # 输出结果为 {'name': 'John', 'age': 30}上述代码示例中,通过索引和键来更新列表和字典中的元素值。

qt update语句用法

qt update语句用法

qt update语句用法摘要:1.更新语句简介2.qt update 语句用法详解a.基本语法b.常用选项c.示例3.qt update 语句与其他更新方式比较4.注意事项正文:更新语句简介在Qt 中,更新语句(update statement)是一种用于更新界面元素的快捷方式。

通过使用更新语句,可以确保界面的状态与数据模型保持一致。

本文将详细介绍qt update 语句的用法及相关注意事项。

qt update 语句用法详解基本语法qt update 语句的基本语法如下:```update( [ <expression> ] )```其中,`<expression>` 是可选的,用于指定要更新的元素。

如果没有指定表达式,那么将更新所有匹配的元素。

常用选项qt update 语句有以下几个常用选项:- `update( <expression> )`: 更新指定表达式匹配的元素。

- `update()`: 更新所有匹配的元素。

示例以下是一个简单的示例,展示了如何使用qt update 语句更新QTableView 中的数据:```pythonfrom PyQt5.QtWidgets import QApplication, QTableView, QVBoxLayout, QPushButton, QWidgetfrom PyQt5.QtCore import Qtimport sysclass MyApp(QWidget):def __init__(self):super().__init__()self.table = QTableView()self.button = QPushButton("更新")self.button.clicked.connect(self.update_data)layout = QVBoxLayout()layout.addWidget(self.table)layout.addWidget(self.button)self.setLayout(layout)data = [[1, "Apple", 2.45],[2, "Banana", 1.23],[3, "Orange", 3.67]]self.model = QStandardItemModel(len(data), len(data[0]), data)self.table.setModel(self.model)def update_data(self):# 更新指定行和列的数据self.model.setData(self.model.index(1, 1), "Banana")self.model.setData(self.model.index(2, 1), "Cherry")# 更新所有匹配的元素self.table.update()app = QApplication(sys.argv)window = MyApp()window.show()sys.exit(app.exec_())```在这个示例中,我们创建了一个简单的应用程序,包含一个QTableView 和一个QPushButton。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

(九)---updater-script脚本语法简介以及执行流程分类:Andriod2012-04-16 14:24 8888人阅读评论(23) 收藏举报脚本android工作symlinksystempathAndroid系统Recovery工作原理之使用update.zip升级过程分析(九)---updater-script脚本语法简介以及执行流程目前update-script脚本格式是edify,其与amend有何区别,暂不讨论,我们只分析其中主要的语法,以及脚本的流程控制。

一、update-script脚本语法简介:我们顺着所生成的脚本来看其中主要涉及的语法。

1.assert(condition):如果condition参数的计算结果为False,则停止脚本执行,否则继续执行脚本。

2.show_progress(frac,sec):frac表示进度完成的数值,sec表示整个过程的总秒数。

主要用与显示UI上的进度条。

3.format(fs_type,partition_type,location):fs_type,文件系统类型,取值一般为“yaffs2”或“ext4”。

Partition_type,分区类型,一般取值为“MTD”或则“EMMC”。

主要用于格式化为指定的文件系统。

事例如下:format(”yaffs2”,”MTD”,”system”)。

4.mount(fs_type,partition_type,location,mount_point):前两个参数同上,location要挂载的设备,mount_point挂载点。

作用:挂载一个文件系统到指定的挂载点。

5.package_extract_dir(src_path,destination_path):src_path,要提取的目录,destination_path目标目录。

作用:从升级包内,提取目录到指定的位置。

示例:package_extract_dir(“system”,”/system”)。

6.symlink(target,src1,src2,……,srcN):target,字符串类型,是符号连接的目标。

SrcX代表要创建的符号连接的目标点。

示例:symlink(“toolbox”,”/system/bin/ps”),建立指向toolbox符号连接/system/bin/ps,值得注意的是,在建立新的符号连接之前,要断开已经存在的符号连接。

7.set_perm(uid,gid,mode,file1,file2,……,fileN):作用是设置单个文件或则一系列文件的权限,最少要指定一个文件。

8.set_perm_recursive(uid,gid,mode,dir1,dir2,……,dirN):作用同上,但是这里同时改变的是一个或多个目录及其文件的权限。

9.package_extract_file(srcfile_path,desfile_paht):srcfile_path,要提取的文件,desfile_path,提取文件的目标位置。

示例:package_extract_file(“boot.img”,”/tmp/boot.img”)将升级包中的boot.img文件拷贝到内存文件系统的/tmp下。

10.write_raw_image(src-image,partition):src-image源镜像文件,partition,目标分区。

作用:将镜像写入目标分区。

示例:write_raw_image(“/tmp/boot.img”,”boot”)将boot.img镜像写入到系统的boot分区。

11.getprop(key):通过指定key的值来获取对应的属性信息。

示例:getprop(“ro.product.device”)获取ro.product.device的属性值。

二、updater-script脚本执行流程分析:先看一下在测试过程中用命令make otapackage生成的升级脚本如下:[plain]view plaincopy1.assert(!less_than_int(1331176658, getprop("ro.build.date.utc")));2.assert(getprop("ro.product.device") == "tcc8800" ||3. getprop("ro.build.product") == "tcc8800");4.show_progress(0.500000, 0);5.format("yaffs2", "MTD", "system");6.mount("yaffs2", "MTD", "system", "/system");7.package_extract_dir("recovery", "/system");8.package_extract_dir("system", "/system");9.symlink("busybox", "/system/bin/cp", "/system/bin/grep",10. "/system/bin/tar", "/system/bin/unzip",11. "/system/bin/vi");12.symlink("toolbox", "/system/bin/cat", "/system/bin/chmod",13. "/system/bin/chown", "/system/bin/cmp", "/system/bin/date",14. "/system/bin/dd", "/system/bin/df", "/system/bin/dmesg",15. "/system/bin/getevent", "/system/bin/getprop", "/system/bin/hd",16. "/system/bin/id", "/system/bin/ifconfig", "/system/bin/iftop",17. "/system/bin/insmod", "/system/bin/ioctl", "/system/bin/ionice",18. "/system/bin/kill", "/system/bin/ln", "/system/bin/log",19. "/system/bin/ls", "/system/bin/lsmod", "/system/bin/lsof",20. "/system/bin/mkdir", "/system/bin/mount", "/system/bin/mv",21. "/system/bin/nandread", "/system/bin/netstat",22. "/system/bin/newfs_msdos", "/system/bin/notify", "/system/bin/printenv",23. "/system/bin/ps", "/system/bin/reboot", "/system/bin/renice",24. "/system/bin/rm", "/system/bin/rmdir", "/system/bin/rmmod",25. "/system/bin/route", "/system/bin/schedtop", "/system/bin/sendevent",26. "/system/bin/setconsole", "/system/bin/setprop", "/system/bin/sleep",27. "/system/bin/smd", "/system/bin/start", "/system/bin/stop",28. "/system/bin/sync", "/system/bin/top", "/system/bin/umount",29. "/system/bin/uptime", "/system/bin/vmstat", "/system/bin/watchprops",30. "/system/bin/wipe");31.set_perm_recursive(0, 0, 0755, 0644, "/system");32.set_perm_recursive(0, 2000, 0755, 0755, "/system/bin");33.set_perm(0, 3003, 02750, "/system/bin/netcfg");34.set_perm(0, 3004, 02755, "/system/bin/ping");35.set_perm(0, 2000, 06750, "/system/bin/run-as");36.set_perm_recursive(1002, 1002, 0755, 0440, "/system/etc/bluetooth");37.set_perm(0, 0, 0755, "/system/etc/bluetooth");38.set_perm(1000, 1000, 0640, "/system/etc/bluetooth/auto_pairing.conf");39.set_perm(3002, 3002, 0444, "/system/etc/bluetooth/blacklist.conf");40.set_perm(1002, 1002, 0440, "/system/etc/dbus.conf");41.set_perm(1014, 2000, 0550, "/system/etc/dhcpcd/dhcpcd-run-hooks");42.set_perm(0, 2000, 0550, "/system/etc/init.goldfish.sh");43.set_perm(0, 0, 0544, "/system/etc/install-recovery.sh");44.set_perm_recursive(0, 0, 0755, 0555, "/system/etc/ppp");45.set_perm_recursive(0, 2000, 0755, 0755, "/system/xbin");46.set_perm(0, 0, 06755, "/system/xbin/librank");47.set_perm(0, 0, 06755, "/system/xbin/procmem");48.set_perm(0, 0, 06755, "/system/xbin/procrank");49.set_perm(0, 0, 06755, "/system/xbin/su");50.set_perm(0, 0, 06755, "/system/xbin/tcpdump");51.show_progress(0.200000, 0);52.show_progress(0.200000, 10);53.assert(package_extract_file("boot.img", "/tmp/boot.img"),54. write_raw_image("/tmp/boot.img", "boot"),55. delete("/tmp/boot.img"));56.show_progress(0.100000, 0);57.unmount("/system");下面分析下这个脚本的执行过程:①比较时间戳:如果升级包较旧则终止脚本的执行。

相关文档
最新文档