<uses-permission android:name="android.permission.INSTALL_PACKAGES"
tools:ignore="ProtectedPermissions" />
前提:apk已经取得系统签名,并且内置了
// 静默安装,1-安装成功,或没有升级文件,2-升级安装出现异常,-1-程序异常
public int installBySlient(Context context, String filePath) {
int result = 0;
try {
File file = new File(filePath);
if (filePath == null || filePath.length() == 0
|| (file = new File(filePath)) == null
|| file.length() <= 0 || !file.exists() || !file.isFile()) {
return 1;
}
//String[] args = { "pm", "install", "-r", filePath };
//String[] args = { "pm", "install","-i ","包名", "-r",filePath }; //适用7.0
String[] args = {"pm", "install", "-i", "包名", "--user", "0", filePath};
ProcessBuilder processBuilder = new ProcessBuilder(args);
Process process = null;
BufferedReader successResult = null;
BufferedReader errorResult = null;
StringBuilder successMsg = new StringBuilder();
StringBuilder errorMsg = new StringBuilder();
try {
process = processBuilder.start();
successResult = new BufferedReader(new InputStreamReader(
process.getInputStream()));
errorResult = new BufferedReader(new InputStreamReader(
process.getErrorStream()));
String s;
while ((s = successResult.readLine()) != null) {
successMsg.append(s);
}
while ((s = errorResult.readLine()) != null) {
errorMsg.append(s);
}
} catch (IOException e) {
e.printStackTrace();
result = 2;
} catch (Exception e) {
e.printStackTrace();
result = 2;
} finally {
try {
if (successResult != null) {
successResult.close();
}
if (errorResult != null) {
errorResult.close();
}
} catch (IOException e) {
e.printStackTrace();
}
if (process != null) {
process.destroy();
}
}
if (successMsg.toString().contains("Success")
|| successMsg.toString().contains("success")) {
result = 1;
sendToUI("安装成功result = 1");
} else {
result = 2;
}
Log.i(TAG,"App升级信息:" + "successMsg:" + successMsg + ", ErrorMsg:" + errorMsg);
} catch (Exception e) {
result = -1;
}
return result;
}