Android通过busybox命令行静默安装apk
我想通过BusyBox命令在后台静默安装.apk。我见过一些类似的问题,如,但我仍然无法正确地使用我的代码 我有:Android通过busybox命令行静默安装apk,android,busybox,android-install-apk,Android,Busybox,Android Install Apk,我想通过BusyBox命令在后台静默安装.apk。我见过一些类似的问题,如,但我仍然无法正确地使用我的代码 我有: My.apk我需要安装在/sdcard/download/app.apk上 根 已安装BusyBox 代码(不工作): 如果我使用“安装”而不是“pm安装”,它可以很好地复制文件 上面的p.S.代码正在AsyncTask中执行。没有错误,但也没有发生任何事情。。。 请帮忙 我也试过了,但是我得到了退出值139,没有结果: Process process;
Process process;
process = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
os.writeBytes("pm install /mnt/sdcard/app.apk\n");
os.flush();
os.writeBytes("exit\n");
os.flush();
int i = process.waitFor();
在对许多android设备进行了大量调查之后,我意识到这段代码是正确的,并且可以工作
只是有一个设备(三星Galaxy Tab 2 7.0-4.0.3 ICS)出现了一些问题。也许这是ICS的一些奇怪的特性。将固件更新到4.1.2(Jelly Bean)后,问题已得到解决。您只需使用adb install命令以静默方式安装/更新APK即可。下面是示例代码
public static void InstallAPK(String filename){
File file = new File(filename);
if(file.exists()){
try {
String command;
filename = StringUtil.insertEscape(filename);
command = "adb install -r " + filename;
Process proc = Runtime.getRuntime().exec(new String[] { "su", "-c", command });
proc.waitFor();
} catch (Exception e) {
e.printStackTrace();
}
}
}
也许这段代码会对你有所帮助
Process p = null;
try
{
p = Runtime.getRuntime().exec("su");
DataOutputStream outs=new DataOutputStream(p.getOutputStream());
String cmd="pm install /mnt/sdcard/app.apk";
outs.writeBytes(cmd+"\n");
}
catch (IOException e)
{
e.printStackTrace();
}
应用程序无法安装其他应用程序。您需要使用root权限(su)执行install命令。这已经在您链接到您的问题的答案中提到。@Robert我只是在安装之前尝试执行su:install=Runtime.getRuntime().exec(“su”);它检查root权限,但不安装。apkIt通过PC ADB:1“ADB外壳”工作;2.“pm安装/mnt/sdcard/download/app.apk”。但我不能通过执行命令以编程方式重复它。我的Android操作系统是ICS。你的应用程序没有通过执行
su
获得root权限。您必须创建一个包含su和您的命令的命令行:su-c“pm install…”
@Robert我理解这一点,但我不能编写正确的命令。你能帮助我吗?我试过:process=Runtime.getRuntime().exec(“su”);os.writeBytes(“pm安装/mnt/sdcard/app.apk\n”);但是它不起作用。请,您能发布StringUtil.insertEscape(文件名)实现吗?您能解释一下哪些代码对您有效吗?如果可能的话,你能发布工作代码吗?
Process p = null;
try
{
p = Runtime.getRuntime().exec("su");
DataOutputStream outs=new DataOutputStream(p.getOutputStream());
String cmd="pm install /mnt/sdcard/app.apk";
outs.writeBytes(cmd+"\n");
}
catch (IOException e)
{
e.printStackTrace();
}