111 lines
3.0 KiB
Bash
Executable File
111 lines
3.0 KiB
Bash
Executable File
#!/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 '''
|
|
Install apps in an app bundle release directory to the device via adb, e.g.
|
|
./batch_install_app.sh /path/to/app_bundle /path/to/report
|
|
|
|
Note: aapt is needed to get the metadata from APKs.
|
|
'''
|
|
}
|
|
|
|
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 [[ ! -d ${INPUT_DIR} ]]; then
|
|
echo "Error: ${INPUT_DIR} is not a directory."
|
|
readme
|
|
exit
|
|
fi
|
|
|
|
echo "LOG=${LOG}"
|
|
log() {
|
|
if [[ -n ${LOG} ]]; then
|
|
echo $1
|
|
fi
|
|
}
|
|
|
|
# check an app/package version via adb, e.g.
|
|
# checkAppVersion package_name
|
|
checkAppVersion() {
|
|
pkg=$1
|
|
cmd="adb shell dumpsys package ${pkg}"
|
|
dump=$(${cmd})
|
|
log "$dump"
|
|
echo "${dump}" | grep versionName
|
|
}
|
|
|
|
echo "Process all APKs in ${INPUT_DIR}"
|
|
# apkDic[apk_name]=apk_path
|
|
declare -A apkDic="$(${SCRIPT_DIR}/get_file_dir.sh ${INPUT_DIR} apk)"
|
|
echo "Found: ${#apkDic[@]} apks"
|
|
|
|
screenshotDir="/data/local/tmp/screenshots"
|
|
echo "Removig the following screenshots from the device"
|
|
adb shell ls -l ${screenshotDir}
|
|
adb shell rm -r ${screenshotDir}
|
|
adb shell mkdir -p ${screenshotDir}
|
|
|
|
# apkBadgingDic[apk_name]=aapt_badging_output_string
|
|
declare -A apkBadgingDic
|
|
# manifestDic[apk_name]=AndroidManifest_xml_content_string
|
|
declare -A manifestDic
|
|
i=1
|
|
for apk in "${!apkDic[@]}"; do
|
|
path="${apkDic[${apk}]}"
|
|
badging=$(aapt dump badging ${path})
|
|
apkBadgingDic[${apk}]="\"${badging}\""
|
|
log "${apkBadgingDic[${apk}]}"
|
|
|
|
# Get package name from the aapt badging output string
|
|
# ... package: name='com.google.android.gsf' versionCode...
|
|
pkg0=${badging#package: name=\'}
|
|
pkg=${pkg0%\' versionCode*}
|
|
|
|
echo "$i,${pkg},${apk},${path}"
|
|
checkAppVersion ${pkg}
|
|
${SCRIPT_DIR}/install_apk.sh ${path}
|
|
checkAppVersion ${pkg}
|
|
echo
|
|
|
|
# Get the 1st launchable activity
|
|
# ... launchable-activity: name='com.google.android.maps.MapsActivity' label...
|
|
if [[ "$badging" == *"launchable-activity: name="* ]]; then
|
|
activity0=${badging#*launchable-activity: name=\'}
|
|
activity=${activity0%%\' label=*}
|
|
echo "Launching an activity: ${activity}"
|
|
adb shell am start -n "${pkg}/${activity}"
|
|
sleep 5
|
|
adb shell screencap "${screenshotDir}/${pkg}.png"
|
|
echo "grep screen"
|
|
fi
|
|
|
|
i=$(($i + 1))
|
|
done
|
|
|
|
adb shell ls -l ${screenshotDir}
|
|
adb pull ${screenshotDir} ${OUT_DIR}
|
|
echo "Took ${SECONDS} seconds"
|