接手或者重构一个Android工程,或多或少都会遇到接口迁移。一边删掉、一边添加,一个人开发还好,多个人协同开发时则极大可能造成接口丢失。
所以我们需要一个检查的抓手,改前改后对一下,基本接口别丢失,用下面的管道命令可以简单的筛出需要迁移的所有接口。迁移完后,跑一把,省的提心吊胆。
grep -A1 "@JavascriptInterface" Interface.java|grep "public"|sed -e 's/^[ ]*//g' | sed -e 's/[ ]*$//g' > old.txt
秉着重复三次的工作,就要尽可能自动化,所以就搞了个脚本进行自动化处理。
脚本逻辑
脚本代码
#!/bin/bash
# 将迁移前接口文件地址配置在OLD_FILE中,迁移后文件地址配置在NEW_FILE中
OLD_FILE="OldInterface.java"
NEW_FILE="NewInterface.java"
oldPath="old.txt"
newPath="new.txt"
# 通过“@JavascriptInterface”作为标记找到所有的JsApi
grep -A1 "@JavascriptInterface" ${OLD_FILE}|grep "public"|sed -e 's/^[ ]*//g' | sed -e 's/[ ]*$//g' > ${oldPath}
grep -A1 "@JavascriptInterface" ${NEW_FILE}|grep "public"|sed -e 's/^[ ]*//g' | sed -e 's/[ ]*$//g' > ${newPath}
echo "=====================新文件中接口====================="
cat $newPath | while read line
do
echo $line
done
echo "=====================旧文件中接口====================="
cat $oldPath | while read line
do
echo $line
done
# 将接口读入缓存
# 设置IFS,将分隔符设置为换行符
OLDIFS=$IFS
IFS=$'\n'
new_interface_array=($(cat $newPath))
old_interface_array=($(cat $oldPath))
# 恢复之前的设置
IFS=$OLDIFS
new_interface_num=${#new_interface_array[*]}
old_interface_num=${#old_interface_array[*]}
# 删除过程文件
rm ${oldPath}
rm ${newPath}
echo "=====================扫描结果====================="
echo "新接口个数:"${#new_interface_array[*]}
echo "旧接口个数:"${#old_interface_array[*]}
# 如果新旧文件接口数不同则中断扫描
if [[ ${new_interface_num} != ${old_interface_num} ]] ; then
echo "新旧接口个数不一致,请检查!!!"
exit
fi
# 遍历旧接口集与新接口集比对,没有的打印记录
interface_num=${new_interface_num}
catch_num=0
for(( i=0;i<${interface_num};i++ )) do
catchState="false"
interface=${old_interface_array[i]};
for(( j=0;j<${interface_num};j++ )) do
if [[ ${new_interface_array[i]} == ${interface} ]] ; then
catchState="true"
((catch_num++))
break
fi
done;
if [[ ${catchState} == "false" ]] ; then
echo "丢失旧接口:" ${interface}
fi
done;
if [[ ${catch_num} == ${interface_num} ]] ; then
echo "旧接口全部命中,请进行功能测试"
else
echo "仅命中"${catch_num}"个接口,请检查!!!"
fi