android adb 静默安装,Android_如何静默安装

本文介绍了Android应用程序如何进行普通安装以及如何在具备系统权限的情况下进行静默安装。普通安装通过Intent调用系统安装器完成,而静默安装则涉及在AndroidManifest.xml中添加权限,使用`pm install`命令,并需应用具备系统权限。安装过程中可能遇到文件不存在、内存不足等问题,静默安装结果需通过读取进程输出来判断。
摘要由CSDN通过智能技术生成

Android常用代码之普通及系统权限静默安装APK

本文主要介绍程序如何安装apk,包括普通模式安装和系统权限静默安装。

如果是非系统应用请直接查看:Android常用代码之APK root权限静默安装,查看更完美的解决方案。

1、普通模式安装,调用系统Intent,代码如下:

public static void install(Context context, String filePath) {

Intent i = new Intent(Intent.ACTION_VIEW);

i.setDataAndType(Uri.parse("file://" + filePath), "application/vnd.android.package-archive");

i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

context.startActivity(i);

}

2、静默安装

如果是非系统应用请移步:Android常用代码之APK root权限静默安装,查看更完美的解决方案。

分为如下三步

(1)、静默安装需要系统应用安装权限,需要在AndroidManifest.xml中添加

Java

1

记得clear啊 一般会出错提示。

(2)、实现代码

静默安装代码如下,实际是通过pm install -r 命令安装。

注意:该函数最好在新建的线程中运行并通过handler发送安装结果给主线程,否则安装时间较长会导致ANR。

/**

* install slient

*

* @param context

* @param filePath

* @return 0 means normal, 1 means file not exist, 2 means other exception error

*/

public static int installSlient(Context context, String filePath) {

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 };

ProcessBuilder processBuilder = new ProcessBuilder(args);

Process process = null;

BufferedReader succe***esult = null;

BufferedReader errorResult = null;

StringBuilder successMsg = new StringBuilder();

StringBuilder errorMsg = new StringBuilder();

int result;

try {

process = processBuilder.start();

succe***esult = new BufferedReader(new InputStreamReader(process.getInputStream()));

errorResult = new BufferedReader(new InputStreamReader(process.getErrorStream()));

String s;

while ((s = succe***esult.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 (succe***esult != null) {

succe***esult.close();

}

if (errorResult != null) {

errorResult.close();

}

} catch (IOException e) {

e.printStackTrace();

}

if (process != null) {

process.destroy();

}

}

// TODO should add memory is not enough here

if (successMsg.toString().contains("Success") || successMsg.toString().contains("success")) {

result = 0;

} else {

result = 2;

}

Log.d("installSlient", "successMsg:" + successMsg + ", ErrorMsg:" + errorMsg);

return result;

}

返回值0表示安装成功,1表示文件不存在,2表示其他错误。需要更丰富的安装失败信息(内存不足、解析包出错)可直接使用PackageUtils.installSlient。

(3) 、获取系统权限

完成了上面两步后,普通方式安装我们的应用仍然无法静默安装。需要我们的应用获得系统权限,编译应用并通过

adb push /system/app/

命令实现安装,即可拥有系统权限。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值