原型项目合入安全补丁操作

Posted by DoubleWay on May 13, 2021

原型项目合入安全补丁操作:

原型项目我们都会向MTK或者SPRD申请安全补丁,拿到手的一般都是修改前后两个差分文件

20210513114610.png

我们可以通过命令生成patch文件然后打上补丁 合入安全patch:
diff -Naur alps_pre alps > google-11.patch
patch -p1 <google.patch 2>&1 |tee ./patch.log
google-11.patch 这个放到项目根路径(项目的android目录)下

diff命令:生成patch文件
  -a或–text diff预设只会逐行比较文本文件

​ -r或–recursive 比较子目录中的文件

​ -u,-U或–unified= 以合并的方式来显示文件内容的不同

​ -N或–new-file 在比较目录时,若文件A仅出现在某个目录中,预设会显示:Only in目录:文件A若使用-N参数,则diff会将文件A与一个空白的文件比较。

patch命令:根据patch文件合上补丁

-pn:设置欲剥离几层路径名称,为补丁文件中都已经记载了原文件的路径和名称,但是可以看到补丁文件包含了原文件的目录路径

20210513141323.png

-p1会忽略掉第1个”/”之前的内容,就是忽略掉apls目录

最后如果有个别仓库有冲突就手动对比解决下冲突

直接合入google补丁

选择补丁的话 一般选择里面最新的 因为google可能同一个月的补丁有几个版本,比如这个11月补丁 就有1.0和1.1版本 选最新的就是1.1版本

20211022161715.png

google补丁的话 他是每个仓库的patch文件 不需要自己生成

20211022162012.png

google补丁可以通过这个脚本来合入

#!/bin/bash

#项目android目录
ROOT_PATH="/home/data1/weiwei.zhang/works/p710/LA.UM.8.9/LINUX/android"
#项目mtk目录
#MTK_PATH=$ROOT_PATH"/vendor/mediatek/proprietary"
#补丁platform文件夹所在目录
PATCH_PATH="/home/data1/weiwei.zhang/works/p710_patch/bulletin_2021_10_preview/patches/android-10.0.0_r1"
#当前目录
LOCAL_PATH=$(pwd)

#暂停
function get_char()
{
    SAVEDSTTY=`stty -g`
    stty -echo
    stty cbreak
    dd if=/dev/tty bs=1 count=1 2> /dev/null
    stty -raw
    stty echo
    stty $SAVEDSTTY
}

enable_pause=1
function pause()
{
    if [ "x$1" != "x" ]; then
        echo $1
    fi
    if [ $enable_pause -eq 1 ]; then
        echo "Press any key to continue!"
    char=`get_char`
    fi
}

#主函数
main(){
    for file in `ls -a $1`
    do
        if [ -d $1"/"$file ]
        then
            if [[ $file != '.' && $file != '..' ]]
            then
                main $1"/"$file
            fi
        else
            path=$1
            str=${path##*"platform/"}
            if [ ! -d $ROOT_PATH"/"$str ]; then
                echo "##################################"
                echo "目录:"$ROOT_PATH"/"$str"不存在"
                echo "请手动合并此patch:"$1"/"$file
                echo "##################################"
            else
                echo "复制patch文件:"$str"/"$file
                cp $1"/"$file $ROOT_PATH"/"$str

                echo "移动到:"$ROOT_PATH"/"$str
                cd $ROOT_PATH"/"$str

                echo "执行patch文件:"$file
                echo "##################################"
                patch -p1 < $file
                echo "##################################"

                pause "合入补丁过程中无其他提示,则合入成功请按任意键继续;若有其他提示,请手动合入验证补丁,完成后再按任意键继续"

                echo "列出修改的文件到changeFile"
                git status | tee ${LOCAL_PATH}/changeFile/changeFile_${file}.txt

                echo "输出修改点到diffFile"
                git diff $(pwd) | tee ${LOCAL_PATH}/diffFile/diffFile_${file}.txt

                echo "删除patch文件:"$file
                rm $file

                echo "返回patch目录:"$PATCH_PATH
                cd $PATCH_PATH
            fi
            echo ""
        fi
    done
}

#创建空目录
if [ ! -d "changeFile" ]; then
    mkdir changeFile
else
    cd "changeFile"
    rm -rf *
    cd ".."
fi

if [ ! -d "diffFile" ]; then
    mkdir diffFile
else
    cd "diffFile"
    rm -rf *
    cd ".."
fi

#合入补丁
main $PATCH_PATH"/platform" | tee patchLog.log
echo "mtk目录:"$MTK_PATH"需要手动打补丁"

修改对应的路径运行就行了

20211022163119.png

然后遇到冲突 解决了冲突以后 再继续回车运行, 如果是mtk的项目 打google补丁的话 除了外面的目录要打 mtk目录下面也要自己手动对应的去合入 对应外面的目录

如果是MTK的补丁可以看下项目里是否有补丁合入工具

一般使用pycham工具,下载安装好即可

在pycharm中Files–>open,选择工程目录下的android/vendor/tinno/common/misc/mtk_patch/tools/PatchTools/main

20210513144034.png

Run–Edit Configurations, 如图中配置

Script path:合并脚本的路径 Parameters:参数设置

​ -s patch目录(需要包含alps、alps_pre和patch_list.txt文件) -d 项目目录(不进android目录) -j 提交是的key ​ -s “/home/android/ALPS05586652_P52” -d “/home/android/MyProject/k510” -j MTOCR-42 -c ‘Ture’ ​ 注意:这里的key是MTOCR-xx 默认的不对;路径中不要包含空格 ​ Python interpreter:选择可用环境即可

20210513144429.png

配置完成后,点击Run即可 脚本中会先reset代码到和服务器一致,上面参数中的-c 为–clean默认为True,会清除所有改变 脚本运行成功后,会提示输出改变目录,如图 注意输出台中信息是否有fail项 脚本会自动把代码提交到本地仓库 在输出目录中分别提交代码即可(也可以用repo forall -p -c git push xxx) 注意删除临时.orig文件

20210513144658.png