2013-04-17 67 views
1

我在资产文件夹中有一个apk文件。
现在我需要创建一个程序,将该apk文件安装为系统应用程序。
手动也可以通过复制apk文件到SD卡具有以下步骤,如何以编程方式访问android根目录(/ system/app)?

$ 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

你打算开发一个有根系统的系统吗 –

+0

@ArunCThomas是它的根源设备 –

+0

然后通过supersu应用发布你正在做的命令? – DThought

回答

2

请参考下面的代码,通过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的和超级用户的应用程序,而在应用程序中使用上面的代码。