Я пишу adb-toolkit и застрял в функции apk extract, где мне нужно перечислить установленные пакеты телефона в yad / zenity.
Позволяет выбрать один раз, когда я использую предыдущий код выбора устройства, но не работает с измененным кодом.
Вот прежний выбор устройства
adb start-server 2>/dev/null
adb devices>/tmp/devices.txt
sed -i '1d' /tmp/devices.txt
dl=$(sed 's/\device//g' /tmp/devices.txt)
device=$(zenity --list --text="Choose a device" --column="Devices" $dl --width=300 --height=200 2>/dev/null)
Вотвыбор устройства с рефакторингом:
adb start-server 2>/dev/null
adb devices>/tmp/devices.txt
sed -i '1d' /tmp/devices.txt
get_index(){
local value="$1"
shift
local arr=("$@")
for j in "${!arr[@]}";
do
if [[ "${arr[$j]}" == "${value}" ]]; then
index="${j}"
return
fi
done
}
x=()
read -r stat < /tmp/devices.txt
if [ "$stat" == "" ]; then
zenity --error --text="No devices connected" --title="No device" --width=300 >/dev/null 2>&1
else
while read -r dev || [[ -n $dev ]]; do
IFS='|'; for i in $dev; do
if [ "$i" != "" ]; then
x+=("$(sed 's/[[:space:]].*//g' <<<$i)")
if [ "$(grep -o -w device <<<$i)" == "device" ]; then
x+=("authorized")
else
x+=("$(sed 's/.*[[:space:]]//g' <<<$i)")
fi
else continue
fi
done
done < /tmp/devices.txt
#dl=$(sed 's/\device//g' /tmp/devices.txt)
device=$(yad --list --text="Choose a device" --column="Devices" --column="Status" ${x[@]} --print-column=1 --no-click --center --width=300 --height=200 2>/dev/null)
А вот код выбора пакета:
apk=$(adb -s $device shell pm list packages)
opt=$(zenity --list --mid-search --column="Apps" ${apk} --width=600 --height=600 2>/dev/null)