阅读本文大约需要1.1分钟。
背景
现在应用市场的要求越来越高了,而且随着Android版本的升级,官方对于权限这部分的管控越来越严格,因此我们秉着最少可用原则,绝不向用户申请额外的权限,但由于团队规模越来越大,很难保证某个模块没有新增权限,所以我们需要一个工具可以简单的给出每个版本应用的权限变化信息。
方案
这里我是用Android SDK自带的aapt工具来获取应用的manifest文件信息的,有时候明明你已经配置好Android的开发环境了但还是报“Unable to find executable for: aapt” 这个错误,这时候首先看看自己Android SDK目录下的build-tools下有没有aapt可执行文件,如果没有建议下载26.0.0的版本,然后再把路径加到环境变量中。
1、在命令行中输入新旧版本的apk地址,然后过滤出权限信息到文本中:
apk_old=$1
apk_new=$2
aapt d badging ${apk_old} | grep "uses-permission:" | awk -F "'" '{print $2}' > permission_old.txt
aapt d badging ${apk_new} | grep "uses-permission:" | awk -F "'" '{print $2}' > permission_new.txt
2、遍历新版本权限列表,看是否有旧版本权限列表中没有的权限,如果有就是新增,将新增的权限写入新增权限文件:
for data in $(cat permission_new.txt);
do
count=$(cat permission_old.txt | grep -c ${data})
if [ "$count" -eq 0 ]; then
echo ${data} >> permission_increase.txt
fi
done
3、遍历旧版本权限列表,看是否有新版本权限列表中没有的权限,如果有就是减少,将减少的权限写入减少权限文件:
for data in $(cat permission_old.txt);
do
count=$(cat permission_new.txt | grep -c ${data})
if [ "$count" -eq 0 ]; then
echo ${data} >> permission_decrease.txt
fi
done
4、判断新增权限文件是否存在,如果存在,就输出新增的权限信息:
if [[ ! -f permission_increase.txt ]]; then
echo "无权限新增"
else
echo "新增的权限:"
cat permission_increase.txt
#删除新增权限文件
rm permission_increase.txt
fi
5、判断减少权限文件是否存在,如果存在,就输出减少的权限信息:
if [[ ! -f permission_decrease.txt ]]; then
echo "无权限减少"
else
echo "减少的权限:"
cat permission_decrease.txt
#删除减少权限文件
rm permission_decrease.txt
fi