我在资产文件夹中有一个apk文件 现在我需要创建一个程序,将该apk文件安装为系统应用程序 手动可以通过以下步骤将该apk文件复制到SD卡中,
$ adb push MyApk.apk /sdcard/
$ adb shell
$ su
$ mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system
$ cat /sdcard/MyApk.apk > /system/app/MyApk.apk
$ pm install /system/app/MyApk.apk
但可以通过代码完成吗?
答案 0 :(得分:2)
在RootTools方法的帮助下,请参考以下代码将用户应用apk移至root设备中的系统应用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和超级用户应用程序。