Tengo el archivo APK de una aplicación que quiero instalar como aplicación del sistema a través de SSH en tabletas Android rooteadas. Puedo instalar esta aplicación a través de ADB con un script, pero la instalación falla cuando lo hago a través de SSH. La aplicación SSH instalada se llama QuickSSHd e inicio sesión como root. Con ADB estoy conectado con la cuenta shell que levanto como root con el su
comando.
Aquí está el script de instalación:
if [[ $EUID -ne 0 ]]; then
echo ">> This script must be run as root."
exit 1
fi
echo ">> Remounting /system in write mode..."
mount -o rw,remount /system
echo ">> Installing Manager..."
wget -P /system/app http://update.esmart.net/apk/Manager.apk
chmod 777 /system/app/Manager.apk
chown system:system /system/app/Manager.apk
echo ">> Removing smanager..."
rm /system/app/smanager*
echo ">> Remounting /system in read mode..."
mount -o ro,remount /system
echo ">> Starting Manager..."
sleep 2
am start -W -n ch.esmart.managerapp/.MainActivity
echo ">> Finished !"
El icono de la aplicación no se muestra y am
el comando no funciona.
Después de registrar logcat:
$ logcat | grep Manager
W/zipro ( 3308): Unable to open zip '/system/app/Manager.apk': Permission denied
D/asset ( 3308): failed to open Zip archive '/system/app/Manager.apk'
W/PackageParser( 3308): Unable to read AndroidManifest.xml of /system/app/Manager.apk
También probé el su
comando en SSH pero no cambia nada.
Los permisos se ven bien:
$ stat /system/app/Manager.apk
File: "/system/app/Manager.apk"
Size: 370990 Blocks: 728 IO Block: 4096 regular file
Device: 13h/19d Inode: 1448 Links: 1
Access: (0777/-rwxrwxrwx) Uid: ( 1000/ system) Gid: ( 1000/ system)
Access: 2014-10-24 12:10:05.000000000
Modify: 2014-10-24 12:10:05.000000000
Change: 2014-10-24 12:10:05.000000000
¿Qué significa este error? ¡Muchas gracias!
Encontré donde viene el problema. Cuando quiero cambiar los derechos sobre el archivo, la instalación ya ha comenzado. No sé exactamente lo que sucede durante la instalación. Así que descargué el APK en el sistema de archivos raíz, cambio los permisos y copio el APK /system/app
con el -p
argumento del cp
comando para mantener los permisos del archivo en el destino.
if [[ $EUID -ne 0 ]]; then
echo ">> This script must be run as root."
exit 1
fi
echo ">> Remounting /system in write mode..."
mount -o rw,remount /system
echo ">> Installing Manager..."
wget -P / http://update.esmart.net/apk/Manager.apk
chmod 777 /Manager.apk
chown system:system /Manager.apk
cp -p -f /Manager.apk /system/app
echo ">> Removing smanager..."
rm /system/app/smanager*
echo ">> Remounting /system in read mode..."
mount -o ro,remount /system
echo ">> Starting Manager..."
sleep 2
am start -W -n ch.esmart.managerapp/.MainActivity
echo ">> Finished !"