如何让我的应用程序成为系统应用程序?应用程序、我的、系统

2023-09-06 13:22:36 作者:独舞只为倾国

我想让我的应用程序成为系统的应用程序编程。我设法同根和busybox的做它在我的手机上。任何想法如何在不busybox的做到这一点?

 调用Runtime.getRuntime()EXEC(新的String [] {苏,-c,安装邻RW,重新挂载-t YAFFS2 /系统;+
                CP`LS /数据/应用/ XXX *`/系统/应用程序;+
                RM /数据/应用/ XXX *;+
                安装邻RO,重新挂载-t YAFFS2 /系统;+
                重启});
 

在这旁边,我还面临着另外一个问题。如果我切换回我的应用程序从系统的应用程序>用户应用程序,并重新启动。 Android系统仍然承认我的应用程序作为系统应用程序,即使该应用程序已驻留在/数据/应用程序。

我用低于code,检查我的应用程序是否是系统的应用程序:

  android.content.pm.ApplicationInfo.FLAG_SYSTEM
 

解决方案

请参考下面的code键移动用户的应用程序的apk到系统应用程序的apk生根设备与RootTools方法的帮助。

  PackageInfo paramPackageInfo = NULL;
        尝试 {
            paramPackageInfo = this.getPackageManager()。getPackageInfo(
                    this.getPackageName(),0);
        }赶上(的NameNotFoundException E){
            e.printStackTrace();
        }

        ApplicationInfo localApplicationInfo = paramPackageInfo.applicationInfo;

字符串STR1 =/系统/应用程序/+ localApplicationInfo.packageName
                +.apk文件;
        字符串str2的=busybox的MV+ localApplicationInfo.sourceDir +
                + STR1;

        RootTools.remount(/系统,RW);
        RootTools.remount(到/ mnt,RW);

        CommandCapture命令=新CommandCapture(0,STR2,
                busybox的搭配chmod 644+ STR1);

        尝试 {
            RootTools.getShell(真)。新增(命令).waitForFinish();
        }赶上(InterruptedException异常E){
            e.printStackTrace();
        }赶上(IOException异常E){
            e.printStackTrace();
        }赶上(TimeoutException异常E){
            e.printStackTrace();
        }赶上(RootDeniedException E){
            e.printStackTrace();
        }

        RootTools.remount(/系统,RO);
        RootTools.remount(到/ mnt,RO);
 
Windows 8系统双界面应用程序的安装与卸载

必要Busybox的和超级用户的应用程序,同时使用上述code。在您的应用程序。

I want to make my app become system app programmatically. I managed to do it in my phone with root and busybox. any idea how achieve this without 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" });

Beside this, I also faced another issue. If i switch back my app from system app > user app and reboot. Android system still recognize my app as system app even though the app already reside in /data/app.

I use code below to check whether my app is system app:

android.content.pm.ApplicationInfo.FLAG_SYSTEM

解决方案

Refer the below code to move user app apk into system app apk in rooting device with the help of RootTools method .

    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");

Necessary of Busybox and superuser app while use the above code in your application.