В чем разница между системным приложением и пользовательским приложением?

Когда я играл с разными ПЗУ и использовал Titanium Backup, я вижу, что приложения делятся на системные и пользовательские. Некоторые разработчики ПЗУ заявляют, что Titanium Backup следует использовать только для пользовательских, а не системных приложений, и когда я приступаю к удалению системных приложений, TiBu предупреждает меня, что ПЗУ может работать неправильно.

Помимо того факта, что пользовательские приложения можно загрузить через Маркет или каким-либо другим образом, в чем заключаются основные различия между ними?

Что такого особенного в системных приложениях, что делает их более неотъемлемой частью самой ОС?

Ответы (5)

/systemдоступен только для чтения без рута, поэтому он предотвращает удаление приложений из /system/appи /system/priv-app. Критические приложения помещаются туда, чтобы их нельзя было удалить. Туда же помещается вредоносное ПО оператора связи, которое они не хотят позволять вам удалять. Последнюю категорию приложений можно удалить, если у вас есть root-права; прежний не очень.

/system/priv-appтакже позволяет приложениям, установленным там, использовать signatureOrSystemи другие привилегированные разрешения. В ответе Стивена есть несколько примеров.

Что касается того, почему приложения могут быть критическими, это зависит от ПЗУ. Насколько я слышал, например, HTC Sense сильно зависит от своих встроенных приложений. Они просто не разработали свой пользовательский интерфейс таким образом, чтобы он изначально работал со сторонними приложениями (или нормально работал, если системные приложения отсутствовали). Другие приложения по сути являются частью ОС Android, но Google закодировал их как приложения/службы (вероятно, из соображений инкапсуляции и надежности).

Обновления для некоторых системных приложений, таких как Google Maps, можно загрузить через Play Store. Если оно не было предустановлено в качестве системного приложения на вашем устройстве, вы можете использовать Titanium, чтобы преобразовать его из пользовательского приложения в системное.

это также означает, что системное приложение не может быть убито убийцами задач?? или что они будут автоматически запускаться, если их убьют??
@ashishsony Системные службы обычно запускаются автоматически, да, но (большинство?) приложений / служб все еще можно убить. Например, я могу убить браузер на своем устройстве. (Вставьте обычный совет о том, чем плохи тасккиллеры.)
Правильно, системные приложения на устройствах HTC (даже такие, как Dropbox, Facebook) слишком глубоко интегрированы с пользовательским интерфейсом Sense. Нужно воздерживаться от их удаления; также не следует преобразовывать пользовательские приложения в системные приложения, если в этом нет крайней необходимости, поскольку на некоторых ПЗУ они могут не завершаться из-за нехватки памяти.
@ все одно программное отличие заключается в том, что системное приложение (priv-app) получает системную трансляцию, даже если это force_stop из настроек приложения, когда несистемное приложение (user-app) не может получать любую трансляцию, если это force_stop из настроек устройства.

Другие ответы верны, но не указывают пару отличий:

Разрешения

Системным приложениям предоставляется возможность запрашивать определенные системные разрешения, которые никогда не доступны для пользовательских приложений. Это не то же самое, что права root/sudo/su.

Один пример, который я знаю и использую ежедневно, — это возможность сбросить счетчик уведомлений о пропущенных вызовах. У меня есть Go Dialer, который является заменой стандартному номеронабирателю и контактному приложению (как вы звоните по телефону). Когда я пропускаю вызов, Android сообщает мне об этом уведомлением. Однако Go Dialer не может сбросить этот счетчик, даже если он запрашивает это разрешение при установке приложения. Android 2.2 и более ранние версии позволяли пользовательским приложениям сбрасывать его, но сделали это разрешение доступным только для системы для Android 2.3.

Переместив мое приложение Go Dialer в системный раздел, можно сбросить этот счетчик. Root для приложения не требуется (за исключением, конечно, фактического перемещения приложения в системный раздел).

Еще одним системным разрешением является возможность установить текущее местоположение GPS. Теперь у Android есть настройка, в которой вы можете разрешить фиктивные местоположения, поэтому любое установленное вами приложение для спуфинга GPS может объявить местоположение GPS. Но если приложение находится в системном разделе, фиктивные местоположения можно отключить, но при этом приложение сможет подделывать местоположение GPS.

Обновления

Системные приложения можно обновлять так же, как и пользовательские приложения, но обновление никогда не интегрируется в исходный ПЗУ. То есть системные приложения имеют уникальную возможность откатиться к версии, существовавшей при первой установке рома.

Переместить на SD

Android позволяет пользователям перемещать userприложения из внутренней памяти на SD-карту. Системные приложения не могут быть перемещены и всегда занимают некоторое внутреннее пространство. Однако большинство (все?) устройств имеют внутренние пользовательские приложения в другом разделе, поэтому удаление системного приложения не даст вам больше места для пользовательского приложения (кроме удаления dalvik-cache).

Вы освободите место, если удалите какие-либо обновления для системного приложения. Как уже отмечалось, обновления не интегрированы с ПЗУ и поэтому хранятся в пользовательском пространстве. Обновления также не могут перемещаться на SD-карту, но при удалении пользовательское пространство восстанавливается.

Как это влияет на вас

Если вы случайный пользователь Android, вы, скорее всего, не столкнетесь со сценариями, в которых система и пользовательское приложение будут иметь значение. Если вы являетесь опытным пользователем, у вас, вероятно, есть root и, таким образом, вы можете изменить системное приложение на пользователя (и наоборот), если вы когда-либо столкнетесь с одной из этих ситуаций.

Вы имели в виду «Это не то же самое, что права root/su»? Кажется, я припоминаю, что sudoи suэто не одно и то же - по крайней мере, в Unix и Linux.
Вы правы, что su и sudo разные в * nix. Но sudoздесь это более применимо, потому что sudo запрашивает привилегии root, а suпросто просит переключить пользователя. Для того, чтобы использовать su, вам нужно знать только пароль учетной записи, на которую вы переходите; если вы не указываете учетную запись, вы просите стать пользователем root. Однако в Android нет ни пароля root, ни каких-либо других учетных записей, поэтому suпользователям известна команда, которую нужно запустить в терминале для получения привилегий root.
В любом случае, я обновлю ответ, включив в него su, так как это то, что некоторые пользователи Android приравнивают к root.

Системные приложения — это приложения, которые включены в систему. Они находятся в папке /system/app.

Подавляющее большинство из них требуется для запуска устройства. Примером некоторых из них является номеронабиратель, который настраивает все сетевые подключения, и браузер, без которого веб-просмотры в приложении не будут работать.

Звонилка настраивает сетевое подключение?
@MatthewRead Да, это так! Фактический номеронабиратель - это отдельное действие, расположенное в приложении номеронабирателя. Dialer.apk — это приложение, которое настраивает подключение. Если вам нужны доказательства, заморозьте приложения для набора номера и его хранения, сеть не будет работать.

Я хотел бы добавить кое-что к приведенным выше ответам. Системные приложения не могут быть удалены при полном сбросе настроек, в отличие от пользовательских приложений. Поэтому, если вы хотите удалить все свои личные файлы, но их слишком много, чтобы их можно было удобно удалить, поэтому сброс к заводским настройкам является наиболее удобным, и у вас есть приложения, которые вы хотите сохранить, вы можете преобразовать эти приложения в системные приложения, чтобы они выиграли не стирается во время сброса настроек.

Интересный совет! Я хочу переместить свою музыку в систему сейчас, лол

Еще одна особенность системных приложений заключается в том, что они используют собственные библиотеки ( файлы libsomething.so ) из общего каталога системных библиотек (обычно /system/lib или /system/lib64 ), а не из каталога личных библиотек приложений (например, /data /app/com.example.HelloJni/lib/arm ). До появления Android Nougat пользовательские приложения могли свободно загружать и использовать собственные системные библиотеки. Ограничения были введены позже, см . https://developer.android.com/about/versions/nougat/android-7.0-changes.html#ndk .