我想以编程方式让我的应用成为系统应用。我设法在我的手机中使用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" });
除此之外,我还面临另一个问题。如果我从系统应用程序切换回我的应用程序>用户应用并重启。即使应用程序已驻留在/ data / app中,Android系统仍将我的应用程序识别为系统应用程序。
我使用下面的代码来检查我的应用是否是系统应用:
android.content.pm.ApplicationInfo.FLAG_SYSTEM
答案 0 :(得分:0)
在RootTools方法的帮助下,请参考以下代码将用户app apk移植到root设备中的系统app 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和超级用户应用程序。