У меня есть файл 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
Что означает эта ошибка? Большое спасибо!
Я нашел, откуда возникает проблема. Когда я хочу изменить права на файл, установка уже началась. Я не знаю точно, что происходит во время установки. Итак, я загрузил 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 !"