recovery 升级过程执行自定义shell命令

有时候我们需要,在升级的过程中,执行一些shell命令,来完成我们的一些需求,利用升级过程,进行一些特殊化的操作,思路如下:

第一:

把我们需要执行的命令,写成一个test.sh脚本,然后在recovery串口环境下,source test.sh,保证我们的sh能够正常运行。

第二:

把test.sh打包到升级包update.zip的根目录中去,主要是修改build/core/Makefile以及build/tools/releasetools/ota_from_target_files.

第三:

修改升级脚本updater-script,增加执行test.sh的脚本函数,主要是修改build/tools/releasetools/ota_from_target_files,在生成的脚本中增加如下函数:

package_extract_file("test.sh","/tmp/test.sh")    //提取test.sh到tmp目录
set_perm/set_metadata                             //设置test.sh权限
run_program("/tmp/test.sh");                      //执行sh
delete("/tmp/test.sh"):                           //删除test.sh

注意:set_perm在android L之后去掉了,只能使用set_metadata了。

第四:

如果在升级执行过程,提示了selinux相关的权限,则需要增加recovery相关的selinux的权限

至此,我们的功能即增加完成,升recovery升级的过程,会提取升级包update.zip中的test.sh到/tmp目录,然后赋予test.sh可执行的权限,然后执行test.sh,最后删除/tmp/test.sh

原文地址:https://www.cnblogs.com/codeking100/p/10338645.html

时间: 2024-10-14 15:44:36

recovery 升级过程执行自定义shell命令的相关文章

Android 执行 adb shell 命令

Android 执行Adb shell 命令大多需要root权限,Android自带的Runtime. getRuntime().exec()容易出错,在网上找到了一个执行adb shell命令的类 代码如下: /**检查手机是否存在root权限,发送一些消息*/package com.dx.superbar.util; import java.io.DataOutputStream;import java.io.File;import java.io.FileOutputStream;impo

java执行linux shell命令,并拿到返回值

1 package com.suning.spc.util; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.nio.charset.Charset; 6 7 import org.slf4j.Logger; 8 import org.slf4j.LoggerFactory; 9 10 import ch.ethz.ssh2.ChannelCondition; 11 import ch.eth

Android Java代码执行adb Shell命令

通过java代码代替adb命令 增加工具类 ShellUtils.java import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.util.List; /** * ShellUtils */ public class ShellUtils { public static fin

linux||mac os如何自定义shell命令

博主是goagent忠实用户,但是在mac下每次启动goagent都要cd到proxy的目录下,然后再执行proxy.py文件,非常麻烦,所以博主想到能否自己定义一个shell命令,一健启动goagent,其实也很简单,过程如下. (1)我们在user目录下输入,"-a"是现实隐藏的文件 ls -a (2)展现出了很多前边是"."的文件,这种文件在通常情况下是隐藏的 hirotekiMacBook-Pro:~ hakuri$ ls -a . .. .CFUserTe

java程序执行,调用shell命令和shell脚本

  坑呀!记得在start()之后, waitFor()之前把缓冲区读出来打log,否则是阻塞缓冲区,没有输出的 package com.jikexueyuancrm.util; import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import

[Python] 利用commands模块执行Linux shell命令

用Python写运维脚本时,经常需要执行linux shell的命令,Python中的commands模块专门用于调用Linux shell命令,并返回状态和结果,下面是commands模块的3个主要函数: 1. commands.getoutput('shell command') 执行shell命令,返回结果(string类型) >>> commands.getoutput('pwd') '/home/oracle' 2. commands.getstatus('file') 该函数

在windows上使用jenkins远程执行linux shell命令

最近公司把jenkins搭建在windows上面,但是发布是要发布到linux服务器上,所以在自动部署上面会有执行shell命令的问题,遂找了一下: 发现jenkins有个shell脚本的插件: shell plugin This plugin executes shell commands remotely using SSH protocol. 安装这个插件,然后到构建任务里面选择构建,到构建后操作里面,会发现有一项是: Excute shell script on remote host

【Devops】【docker】【CI/CD】关于jenkins构建成功后一步,执行的shell命令详解

1.展示这段shell命令 #===================================================================================== #=================================定义初始化变量====================================== #====================================================================

查找文件并执行的shell命令

来由 经常我们需要找到某类文件, 并对进行处理. 例如找到.svn文件夹, 然后删除掉. 如果不使用shell,你可以选择手动删除, 前提是没有几个此类文件, 但是svn信息文件很多, 不能采用手动删除, 或者逐个命令删除. 由此引入shell来解决此问题. 方法1 find –exec 选项 NAME       find - search for files in a directory hierarchy SYNOPSIS       find [-H] [-L] [-P] [-D deb