Как преобразовать приложение / apk в системное / пользовательское приложение, включая приложения split-apk - PullRequest
5 голосов
/ 14 апреля 2019

Фон

Без рута я знаю, что можно установить один обычный APK с помощью Intent ( здесь ).

Учитываяroot, я знаю, что возможно установить его, используя this .

Это установит приложение как обычный процесс установки, как пользовательское приложение.

Существует также способ установить разделенное приложение apk ( здесь ), хотя по какой-то причине мне не удалось его использовать.

Проблема

Я хочу знать, как преобразовать и / или установить приложение в приложение, устанавливаемое системой, и обратно в приложение пользователя.

Это включает как APKфайлы приложений, которые еще не установлены, и приложений, которые уже установлены.

Что я нашел

Я нашел несколько очень старых способов преобразования существующего приложения (илиустановка нового) в системное приложение (например, здесь или здесь ), говоря (короче) я должен простопереместите файл APK в /system/app/ путь.

Дело в том, что это могло работать раньше, но сейчас это не так.Я думаю, причина этого в том, что приложения в /system/app/ теперь существуют по-разному: у каждого приложения есть папка с некоторыми файлами внутри.

Что касается преобразования обратно в пользовательское приложение, я могу 'не могу найти это.То же самое касается установки разделенного apk-приложения в системное приложение и преобразования его обратно в пользовательское приложение.

На самом деле в магазине Play есть приложения (например, это ), которые я помню, которые могли нормально конвертировать другие приложения в системные приложения (используя root) - теперь ничего не могу сделать.

Вопросы

  1. Когда сделалметод установки / преобразования приложения в системное приложение сработал?Почему это больше не работает?

  2. Что нужно сделать, чтобы установить / преобразовать приложение в системное приложение и обратно в пользовательское приложение на старых и новых версиях Android?

  3. Возможно ли то же самое для приложений split-apk (например, приложения AirBnb) или хотя бы установленных?

Ответы [ 2 ]

0 голосов
/ 01 июня 2019

Как я знаю, процедура, определяющая системное приложение, со временем изменилась.Документация AOSP о привилегированных разрешениях может помочь вам:

Привилегированные приложения - это системные приложения, расположенные в каталоге / system / priv-app на образе системы.Исторически разработчики устройств имели небольшой контроль над тем, какие привилегии подписи могут быть предоставлены привилегированным приложениям.Начиная с Android 8.0, разработчики могут явно вносить привилегированные приложения в белый список в XML-файлах конфигурации системы в каталоге / etc / permissions.Приложениям, явно не указанным в этих файлах XML, не предоставляются привилегированные разрешения.

0 голосов
/ 01 июня 2019

Процесс, описанный ниже, не будет работать со всеми версиями сборки Android, но в большинстве случаев он будет работать как положено.

1 - Когда появился метод установки / преобразования приложения в системное приложение работал? Почему это больше не работает?

У вас есть две ситуации для установки приложения, например, системного приложения.

  1. При создании изображения для Android Вы можете поместить приложение, для которого вы хотите, системные привилегии в папку /system/app, и система сборки подпишет его ключом платформы, и оно будет работать как системное приложение.

  2. После получения прав root для установленных образов Если вы можете получить доступ к своей системе Android от имени пользователя root, то вы можете просто отправить определенное приложение в каталог /system/app на устройстве Android.

2 - Что нужно сделать, установив / преобразовав приложение в системное приложение, и обратно к пользовательскому приложению на старых и новых версиях Android?

Если вы хотите сделать ваше приложение системным, вам нужно добавить android:sharedUserId="android.uid.system" в качестве атрибута приложения в файл AndroiManifest.xml

<application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:sharedUserId="android.uid.system"
        android:theme="@style/AppTheme">

Для большинства пользовательских изображений предоставляется инструментарий производителя, который можно использовать для создания нового файла изображения с системными приложениями. Если у вас нет такого инструмента, вы можете получить root права на ваше устройство и отправить файл apk в каталог system/app. Насколько я понимаю, у нас нет прямого способа вернуть системное приложение обратно в пользовательское приложение. Что вы можете сделать, это просто удалить системное приложение и снова установить его как пользовательское приложение.

3 - возможно ли то же самое для приложений split-apk (пример: AirBnb приложение) или хотя бы установленные?

Выше процедура должна работать с приложениями split-apk. Но не могу подтвердить, потому что у меня нет опыта.

...