#!/bin/bash # Copyright (C) 2021 The Android Open Source Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. readme() { echo ''' check permissions xml from a apk bundle release aginast those on a device ./batch_check_permission.sh ~/Downloads/apk_bundle_dir ~/Downloads/override.csv ''' } SECONDS=0 MY_NAME=$0 SCRIPT_NAME="${MY_NAME##*/}" SCRIPT_DIR="${MY_NAME%/$SCRIPT_NAME}" echo Running from $SCRIPT_DIR if [[ -z $OUT_DIR ]]; then OUT_DIR="${HOME}/Downloads" fi INPUT_DIR=$1 if [[ -z "${INPUT_DIR}" ]]; then readme exit fi RENAME_CSV=$2 # Read rename csv to create xmlRenameDic declare -A xmlRenameDic if [[ -f ${RENAME_CSV} ]]; then while IFS=',' read -r name newName others || [ -n "${name}" ]; do if [[ "${name}" == "name" ]]; then # skip header header="${name},${newName}" else xmlRenameDic["${name}"]="${newName}" fi done < $RENAME_CSV fi echo "LOG=${LOG}" log() { if [[ -n ${LOG} ]]; then echo $1 fi } echo "Listing xmls in ${INPUT_DIR}" declare -A relXmlDic declare -A relXmlDic="$(${SCRIPT_DIR}/get_file_dir.sh ${INPUT_DIR} xml)" echo "Found: ${#relXmlDic[@]} xmls" echo "Listing xmls in the device" declare -A deviceXmlDic deviceXmlList=$(adb shell "find / -name *.xml" 2>/dev/null) for xml in ${deviceXmlList}; do file=${xml##*/} fPath=${xml%/*} fParentPathPostfix=${fPath:(-11)} if [[ "permissions" == ${fParentPathPostfix} ]]; then deviceXmlDic[${file}]=${xml} log "${file} ${fPath} ${fParentPathPostfix}" fi done echo "Found: ${#deviceXmlDic[@]} xmls" echo "Comparing xmls from ${INPUT_DIR} to those on the device." i=1 for xml in "${!relXmlDic[@]}"; do # relFile="...google/etc/permissions/privapp-permissions-car.xml" relFile=${relXmlDic[$xml]} # fPath="...google/etc/permissions" fPath=${relFile%/*} # fParentPathPostfix="permissions" fParentPathPostfix=${fPath:(-11)} log "${xml} ${fPath} ${fParentPathPostfix}" # Only care about permissions if [[ "permissions" == ${fParentPathPostfix} ]]; then echo "$i Comparing permission file: $xml" deviceFile=${deviceXmlDic[$xml]} if [[ -z ${deviceFile} ]]; then # Maybe it's renamed newXml=${xmlRenameDic[$xml]} log "Rename $xml to $newXml" deviceFile=${deviceXmlDic[$newXml]} if [[ -z ${deviceFile} ]]; then echo "Error: no ${xml} on the device." echo i=$(($i + 1)) continue fi fi # Pull the xml from device & diff adb pull "${deviceFile}" "${OUT_DIR}/${xml}" diff "${relXmlDic[$xml]}" "${OUT_DIR}/${xml}" i=$(($i + 1)) echo fi done echo "Took ${SECONDS} seconds"