Puedes hacer adb shell pm list packages
y después de leer la lista, haga un adb shell pm path "com.yourpackage"
para obtener la ruta completa y hacer un simple adb pull
.
El hecho es: Quiero automatizar esto. Pensé en un muy simple bash script:
for apk in $(adb shell pm list packages | sed 's/package://g' | sort); do
# If you just do an echo, IT WORKS
# echo $apk
# But here it doesn't work
adb shell pm path $apk
done
Pero eso simplemente no funciona. Parece que "$apk" se convierte en perdido o algo así y no se muestra nada en ese fragmento. No sé si es un problema de subshell, o alguna peculiaridad al usar variables que pasaron por un adb shell.
¿Debo crear un script apks.sh sólo usando pm list
para y tal, empujarlo a mi dispositivo, ejecutar adb shell
sólo una vez y ejecutar apks.sh?
0 votos
Intente encerrar los parámetros entre comillas:
adb shell "pm path $apk"
y ver si eso funciona. Citándolo así queda claro que hay que pasarlo todo aadb shell
. Sin las comillas, no está claro si el$apk
es el segundo parámetro depm
o el 5º parámetro aadb
;)0 votos
El culpable es que
pm list packages
, al igual quepm path [PACKAGE]
, hace que la salida vaya precedida de la indicación " paquete: ". Una forma de evitar esto sería iterar a través de la cadenapm list packages
con algo como lo siguiente:for i in $(pm list packages); do
. Luego, dentro del bucle, definirás una variablevar
con el contenido dei
como en:var=$i
. A continuación, recortará el " paquete: " convar="${var#p*:}"
que devolverá el nombre del paquete. Después de eso, pasevar
a través depm path
como en:pm path $var
y recorte " paquete: " una vez más.0 votos
En cuanto a su pregunta, supongo que la variable
apk
pertenece sólo a la terminal de Linux. En la línea 4, está tratando de pasarapk
a lapm
como si fuera una variable del shell de Android.