2012-01-06 7 views
4

Я хочу, чтобы мое приложение стало программным приложением. Мне удалось сделать это в телефоне с помощью 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" }); 

У меня также возникла другая проблема. Если я переключу свое приложение из системного приложения> приложение пользователя и перезагрузитесь. Система Android по-прежнему распознает мое приложение как системное приложение, хотя приложение уже находится в/data/app.

Я использую ниже код, чтобы проверить, является ли мое приложение системы приложение:

android.content.pm.ApplicationInfo.FLAG_SYSTEM 
+0

Я думаю, вы можете использовать команду 'cat' без busybox. И я думаю, что он делает то же самое, что и cp – Jakar

+0

заметил, что, как насчет «rm». это команда busybox или она поставляется с андроидом по умолчанию? – Jason

+0

Я думаю, что 'rm' is busybox, но я не уверен. Вы можете использовать оболочку adb на эмуляторе, чтобы узнать. – Jakar

ответ

0

См ниже код для перемещения пользователя приложения APK в системе приложения APK в искоренении устройства с помощью метода RootTools.

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 и суперпользователя при использовании вышеуказанного кода в вашем приложении.

+0

Вряд ли ваше приложение станет системным приложением, просто сделав это. Вам также нужно настроить AndroidManifest, чтобы придать приложению правильный UID. Тогда правильный контекст SELinux. Кроме того, новые KK и L, вероятно, используют другой путь для системных приложений ... – not2qubit

Смежные вопросы