Отказано в доступе при установке системного приложения с помощью SSH

У меня есть файл APK для приложения, которое я хочу установить как системное приложение через SSH на планшетах Android с root-доступом. Я могу установить это приложение через ADB с помощью сценария, но установка завершается ошибкой, когда я делаю это через SSH. Установленное приложение SSH называется QuickSSHd, и я вхожу в систему как пользователь root. С ADB я связан с учетной записью оболочки, которую я поднимаю как root с помощью suкоманды.

Вот скрипт установки:

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 !"

Значок приложения не отображается и amкоманда не работает.

После проверки в 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

Я также пробовал suкоманду в SSH, но это ничего не меняет.

Разрешения выглядят хорошо:

$ 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

Что означает эта ошибка? Большое спасибо!

Ответы (1)

Я нашел, откуда возникает проблема. Когда я хочу изменить права на файл, установка уже началась. Я не знаю точно, что происходит во время установки. Итак, я загрузил APK в корневую файловую систему, изменил разрешения и скопировал APK с /system/appаргументом -pкоманды cp, чтобы сохранить права доступа к файлу на цели.

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 !"