android 如何使我的应用程序成为系统应用程序?

qni6mghb  于 2022-11-20  发布在  Android
关注(0)|答案(1)|浏览(256)

我想使我应用程序成为系统应用程序编程。我设法做到这一点在我的手机与根和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
mv1qrgav

mv1qrgav1#

参考下面的代码,在RootTools方法的帮助下,将用户应用程序apk移动到生根设备中的系统应用程序apk。

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和超级用户应用程序是必需的。

相关问题