2013-12-19 3 views
1

Я хочу программно нажать APK в систему/приложение на корневом устройстве. Я пробовал следующий код, но push не является командой на Android. Как я могу изменить его для работы?Программно нажать APK в систему/приложение

public static void copyApkToSys(){ 
    Process process; 
    try { 
     process = Runtime.getRuntime().exec("su"); 
     DataOutputStream out = new DataOutputStream(process.getOutputStream()); 
     out.writeBytes("mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system\n"); 
     out.writeBytes("push /data/shareData/a1.apk /system/app\n"); 
     out.writeBytes("mount -o remount,ro -t yaffs2 /dev/block/mtdblock3 /system\n"); 
     out.writeBytes("exit\n"); 
     out.flush(); 
     process.waitFor(); 

    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 

Если я использую следующий код, приложение появляется только после перезагрузки устройства:

public static void copyApkToSys(){ 
    Process process; 
    try { 
     process = Runtime.getRuntime().exec("su"); 
     DataOutputStream out = new DataOutputStream(process.getOutputStream()); 
     out.writeBytes("mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system\n"); 
     out.writeBytes("cat /data/shareData/a1.apk > /system/app/a1.apk\n"); 
     out.writeBytes("mount -o remount,ro -t yaffs2 /dev/block/mtdblock3 /system\n"); 
     out.writeBytes("exit\n"); 
     out.flush(); 
     process.waitFor(); 

    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (InterruptedException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

} 

редактировать: если я использовать кошку, а затем использовать код последующих, но я не могу начать свою деятельность

public static boolean startApk(String packageName, String activityName) { 
    boolean isSuccess = false; 

    String cmd = "am start -n " + packageName + "/" + activityName + " \n"; 
    try { 
     Process process = Runtime.getRuntime().exec(cmd); 

     isSuccess = waitForProcess(process); 
    } catch (IOException e) { 

     e.printStackTrace(); 
    } 
    return isSuccess; 
} 

кажется, что есть разница между push и cat, как толкая приложение через ADB дает результат, я хотел бы. Как я могу сделать это программно?

+0

Насколько мне известно, нет команды 'push'. На Android очень ограниченное количество команд posix, но 'cat' должен иметь возможность копировать файл таким образом. Каковы ваши аргументы в том, чтобы не использовать его? –

+0

если я использую cat, но я не могу начать свою деятельность. Я хочу скопировать или нажать apk в систему, а затем запустить его. – pengwang

+0

Скорее всего, Android не знает, что новое приложение установлено. Он должен будет проверить манифест приложения, чтобы понять, какие намерения он может получить, что происходит при установке приложения обычным способом. Я не уверен, как вызвать это поведение, но перезагрузка устройства, скорее всего, будет работать. –

ответ

-1

попробовать с командой «mv -R», подобно команде Linux

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