Как сделать мое приложение системным? - PullRequest
4 голосов
/ 06 января 2012

Я хочу, чтобы мое приложение стало системным приложением программным способом. Мне удалось сделать это в моем телефоне с root и busybox. Любая идея, как добиться этого без busybox?

Runtime.getRuntime().exec(new String[] { "su", "-c", "mount -o rw,remount -t yaffs2 /system; " +
                "cp `ls /data/app/xxx*` /system/app; " +
                "rm /data/app/xxx*; " +
                "mount -o ro,remount -t yaffs2 /system; " +
                "reboot" });

Кроме того, я столкнулся с другой проблемой. Если я переключаю свое приложение из системного приложения> в приложение пользователя и перезагружаюсь. Система Android по-прежнему распознает мое приложение как системное, хотя оно уже находится в /data/app.

Я использую приведенный ниже код, чтобы проверить, является ли мое приложение системным:

android.content.pm.ApplicationInfo.FLAG_SYSTEM

1 Ответ

0 голосов
/ 30 апреля 2013

См. Приведенный ниже код для перемещения пользовательского приложения apk в системное приложение apk на рутирующем устройстве с помощью метода RootTools.

    PackageInfo paramPackageInfo = null;
        try {
            paramPackageInfo = this.getPackageManager().getPackageInfo(
                    this.getPackageName(), 0);
        } catch (NameNotFoundException e) {
            e.printStackTrace();
        }

        ApplicationInfo localApplicationInfo = paramPackageInfo.applicationInfo;

String str1 = "/system/app/" + localApplicationInfo.packageName
                + ".apk";
        String str2 = "busybox mv " + localApplicationInfo.sourceDir + " "
                + str1;

        RootTools.remount("/system", "rw");
        RootTools.remount("/mnt", "rw");

        CommandCapture command = new CommandCapture(0, str2,
                "busybox chmod 644 " + str1);

        try {
            RootTools.getShell(true).add(command).waitForFinish();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (TimeoutException e) {
            e.printStackTrace();
        } catch (RootDeniedException e) {
            e.printStackTrace();
        }

        RootTools.remount("/system", "ro");
        RootTools.remount("/mnt", "ro");

Требуется для приложения Busybox и суперпользователя, в то время как используйте приведенный выше код в вашем приложении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...