установка apk в /system/app с Android 5.1 или выше (простой adb push больше не работает)

может быть, это вопрос новичка, но я изо всех сил пытаюсь найти ответ...

Мне нужно установить некоторые apk в качестве системных приложений. В прошлом (до Android 5.01) я привык просто нажимать adb на /system/app, и все работало нормально.

Сегодня я узнал, что с Android 5.1 это больше не работает, поскольку приложения в этом каталоге больше не являются простыми apk, а представляют собой папки с каталогом arm с фактическими apk и другими файлами.

Как мне теперь установить в качестве системных приложений имеющиеся у меня apks?

У меня есть исходники только для 1 из них.

Заранее спасибо за вашу поддержку

С уважением, Блэкдир

Вам нужно создать папку с именем по вашему выбору в /system/priv-app . Затем переименуйте APK в точное имя вновь созданной папки и поместите [APK] в папку. Затем измените владельца папки с помощью chown 0.0 /system/priv-app/yourFolderи ее разрешения с помощью chmod 744 /system/priv-app/yourFolder( yourFolderбудет имя папки). Наконец, сделайте то же самое для APK с теми же владельцами, 0.0но с 644разрешениями, затем перезагрузитесь и посмотрите, работает ли он.

Ответы (1)

В Android API уровня 21+ (5.1+) изменения в /system/app не будут автоматически распознаваться менеджером пакетов. Вместо этого вы должны попробовать /system/priv-app.
Предположим, ваше приложение называется Foo.apk, создайте папку в /system/priv-app/Foo и установите для нее chmod 755 и chown 0.0. Затем поместите в него свой файл apk (путь должен быть /system/priv-app/Foo/Foo.apk) и добавьте к нему chmod 644 & chown 0.0. Тогда он будет распознан менеджером пакетов, а если нет, просто перезагрузите устройство, и приложение появится.
В некоторых прошивках моды в /system/app БУДУТ распознаваться автоматически, но это зависит от обстоятельств.

+1: это правильный способ сделать это, но вы забыли о контексте SELinux. Фактически, некоторые приложения, установленные в /system/priv-app, будут аварийно завершать работу, если их контекст безопасности не был изменен на u:object_r:system_file:s0через chcon. Подводя итог, после установки соответствующих прав собственности и разрешений нужно выдать chcon u:object_r:system_file:s0 /system/priv-app/Fooи chcon u:object_r:system_file:s0 /system/priv-app/Foo/Foo.apk.