原型项目合入安全补丁操作:
原型项目我们都会向MTK或者SPRD申请安全补丁,拿到手的一般都是修改前后两个差分文件
我们可以通过命令生成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:设置欲剥离几层路径名称,为补丁文件中都已经记载了原文件的路径和名称,但是可以看到补丁文件包含了原文件的目录路径
-p1会忽略掉第1个”/”之前的内容,就是忽略掉apls目录
最后如果有个别仓库有冲突就手动对比解决下冲突
直接合入google补丁
选择补丁的话 一般选择里面最新的 因为google可能同一个月的补丁有几个版本,比如这个11月补丁 就有1.0和1.1版本 选最新的就是1.1版本
google补丁的话 他是每个仓库的patch文件 不需要自己生成
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"需要手动打补丁"
修改对应的路径运行就行了
然后遇到冲突 解决了冲突以后 再继续回车运行, 如果是mtk的项目 打google补丁的话 除了外面的目录要打 mtk目录下面也要自己手动对应的去合入 对应外面的目录
如果是MTK的补丁可以看下项目里是否有补丁合入工具
一般使用pycham工具,下载安装好即可
在pycharm中Files–>open,选择工程目录下的android/vendor/tinno/common/misc/mtk_patch/tools/PatchTools/main
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:选择可用环境即可
配置完成后,点击Run即可 脚本中会先reset代码到和服务器一致,上面参数中的-c 为–clean默认为True,会清除所有改变 脚本运行成功后,会提示输出改变目录,如图 注意输出台中信息是否有fail项 脚本会自动把代码提交到本地仓库 在输出目录中分别提交代码即可(也可以用repo forall -p -c git push xxx) 注意删除临时.orig文件